Kubernetes(쿠버네티스)는 다양한 구성요소들이 상호작용하면서 컨테이너화된 애플리케이션을 배포, 관리, 확장 및 운영합니다. 주요 구성요소는 컨트롤 플레인노드로 나눌 수 있으며, 각각의 세부 요소들은 다음과 같습니다:

 

The components of a Kubernetes cluster

1. 컨트롤 플레인(Control Plane)

컨트롤 플레인은 클러스터 전체를 관리하고, 애플리케이션의 상태를 원하는 대로 유지하기 위한 지휘 본부 역할을 합니다. 주요 구성요소는 다음과 같습니다:

  • API 서버 (kube-apiserver)
    Kubernetes의 모든 작업 요청은 API 서버를 통해 이루어집니다. API 서버는 Kubernetes의 핵심 인터페이스로, 클러스터와의 통신을 관리하고, 유효성 검사를 수행하며, 작업 요청을 전달합니다.
  • 클러스터 스토리지 (etcd)
    클러스터의 모든 상태 데이터를 저장하는 Key-Value 저장소입니다. 애플리케이션의 상태나 구성 정보가 이 저장소에 안전하게 보관되며, 분산 시스템에서 데이터 일관성을 보장합니다.
  • 컨트롤러 매니저 (kube-controller-manager)
    다양한 컨트롤러가 모여 있는 관리 모듈입니다. 각 컨트롤러는 클러스터의 상태를 지속적으로 모니터링하며, 원하는 상태와 실제 상태를 일치시키기 위한 작업을 수행합니다. 대표적인 컨트롤러로는 노드 컨트롤러, 레플리케이션 컨트롤러, 엔드포인트 컨트롤러 등이 있습니다.
  • 스케줄러 (kube-scheduler)
    새로운 Pod(컨테이너 그룹)가 생성되면, 이를 적절한 노드에 배치하는 역할을 합니다. 스케줄러는 각 노드의 리소스 상태를 고려해 작업 부하를 효율적으로 분배합니다.

2. 노드(Node)

Kubernetes 클러스터에서 실제로 애플리케이션 컨테이너가 실행되는 물리적 또는 가상 서버입니다. 각 노드는 여러 구성 요소로 이루어져 있으며, 실제 애플리케이션을 실행하고 관리하는 역할을 담당합니다.

  • Kubelet
    각 노드에서 실행되는 에이전트로, API 서버로부터 전달된 명령을 받아 컨테이너를 생성하고 관리합니다. 노드의 상태를 주기적으로 API 서버에 보고하고, Pod가 올바르게 실행되고 있는지 확인합니다.
  • 컨테이너 런타임
    컨테이너를 실제로 실행하는 소프트웨어입니다. Docker, containerd, CRI-O와 같은 컨테이너 런타임이 사용됩니다. Kubelet은 컨테이너 런타임을 통해 Pod 안의 컨테이너를 관리합니다.
  • Kube-Proxy
    클러스터 내 네트워킹을 관리하는 컴포넌트입니다. Kube-Proxy는 서비스에 대한 네트워크 트래픽을 적절한 Pod로 라우팅하며, 로드 밸런싱도 처리합니다.
  • Pod
    Kubernetes의 최소 배포 단위로, 하나 이상의 컨테이너를 포함할 수 있습니다. 같은 Pod 내의 컨테이너는 네트워크와 스토리지를 공유하며, 항상 같은 노드에서 함께 실행됩니다.

3. 기타 구성 요소

  • 네임스페이스 (Namespaces)
    Kubernetes 클러스터에서 리소스를 격리하는 논리적 구획입니다. 하나의 클러스터에서 여러 팀이 작업하거나 다양한 환경(개발, 테스트, 프로덕션)을 분리할 때 유용하게 사용됩니다.
  • 서비스 (Service)
    Kubernetes에서 Pod는 언제든지 삭제되고 재배포될 수 있습니다. 이를 감안해, Pod와 외부 클라이언트 간의 안정적인 네트워크 연결을 제공하는 것이 서비스입니다. IP 주소와 로드 밸런싱 기능을 통해 Pod를 쉽게 찾아서 연결할 수 있도록 합니다.
  • 디플로이먼트 (Deployment)
    애플리케이션을 선언적 방식으로 배포하고, 업데이트하며, 관리하는 리소스입니다. 롤링 업데이트, 롤백 등 무중단 배포를 지원합니다.

구성 요소 간의 상호작용

이 구성 요소들은 긴밀하게 상호작용하며, Kubernetes 클러스터를 통해 애플리케이션을 자동으로 관리합니다. 예를 들어, 컨트롤러 매니저는 상태를 지속적으로 모니터링하고, 스케줄러는 리소스를 최적으로 배분하며, Kubelet은 노드에서 이를 실제로 실행하게 됩니다. 이러한 구성요소들의 조화는 Kubernetes가 복잡한 애플리케이션의 관리를 자동화하고 확장할 수 있게 해줍니다.

'IT > kubernetes[k8s]' 카테고리의 다른 글

쿠버네티스 서비스(Service)  (0) 2024.11.13
쿠버네티스 - 노드  (1) 2024.11.08
클러스터의 개념  (0) 2024.11.07
Deployment, ReplicaSet, DaemonSet, StatefulSet  (0) 2024.11.06
Kubernetes 소개  (8) 2024.10.21

+ Recent posts