쿠버네티스 클러스터는 크게 컨트롤 플레인(Control Plane)과 워커 노드(Worker Node), 그리고 부가적인 클라우드 통합 요소로 구성됩니다.
1. 컨트롤 플레인 (Control Plane) - '쿠버네티스 마스터'
이미지에서 파란색 박스로 표시된 "KUBERNETES MASTER" 부분이 바로 컨트롤 플레인입니다. 이전에는 마스터 노드라고 불렸으나, 현재는 컨트롤 플레인이라는 용어가 더 보편적으로 사용됩니다. 이곳은 클러스터 전체를 관리하고 오케스트레이션하는 두뇌 역할을 합니다.
- KUBE-APISERVER (API 서버):
- 쿠버네티스 클러스터의 프론트엔드입니다. 모든 REST API 요청(예: kubectl 명령)을 처리합니다.
- 사용자, 다른 클러스터 구성 요소, 그리고 외부 도구들이 쿠버네티스 클러스터와 통신하는 유일한 지점입니다.
- 클러스터의 모든 상태를 etcd에 저장하고 조회합니다.
- ETCD:
- 쿠버네티스 클러스터의 모든 클러스터 데이터(상태, 구성 정보, 메타데이터 등)를 저장하는 분산 키-값 저장소입니다.
- 내구성이 뛰어나고 일관성이 보장되어야 하므로 매우 중요합니다.
- KUBE-SCHEDULER (스케줄러):
- 새로 생성된 파드(Pod)에 대해 어떤 노드에 배포할지 결정하는 역할을 합니다.
- 각 노드의 자원(CPU, 메모리), 제약 조건, 품질 서비스(QoS) 요구 사항, 어피니티/안티-어피니티(affinity/anti-affinity) 등의 요소를 고려하여 최적의 노드를 선택합니다.
- KUBE-CONTROLLER-MANAGER (컨트롤러 매니저):
- 다양한 컨트롤러를 실행하는 컴포넌트입니다. 각 컨트롤러는 클러스터의 "실제 상태"를 "원하는 상태"와 일치시키기 위해 노력합니다.
- 예시 컨트롤러:
- Node Controller: 노드가 다운되었을 때 감지하고 처리합니다.
- Replication Controller: ReplicaSet 오브젝트를 관리하여 지정된 수의 파드 복제본을 항상 실행 상태로 유지합니다.
- Endpoint Controller: 서비스와 파드를 연결합니다.
- Service Account Controller: 새로운 네임스페이스에 기본 서비스 어카운트를 생성합니다.
- CLOUD-CONTROLLER-MANAGER (클라우드 컨트롤러 매니저 - 선택 사항):
- 클라우드 환경에 쿠버네티스를 배포할 때만 존재하는 컴포넌트입니다. (이미지에서 CLOUD 박스와 연결되어 있습니다.)
- 클라우드 제공업체(AWS, GCP, Azure 등)의 API와 상호작용하여 클러스터의 인프라(예: 로드 밸런서, 영구 볼륨, 노드)를 관리합니다.
- 예를 들어, LoadBalancer 타입의 서비스를 생성하면, 클라우드 컨트롤러 매니저가 클라우드 제공업체에 요청하여 실제 외부 로드 밸런서를 프로비저닝합니다.
2. 워커 노드 (Worker Node) - '노드'
이미지에서 주황색 박스로 표시된 "NODE" 부분은 워커 노드입니다. 이 노드들은 컨트롤 플레인으로부터 명령을 받아 실제로 애플리케이션(파드/컨테이너)을 실행하는 작업자 역할을 합니다. 쿠버네티스 클러스터는 하나 이상의 워커 노드를 가집니다.
워커 노드의 주요 구성 요소는 다음과 같습니다:
- KUBELET:
- 각 노드에서 실행되는 에이전트입니다.
- API 서버로부터 파드 명세(PodSpec)를 받아 컨테이너 런타임(Docker, containerd 등)을 통해 해당 파드의 컨테이너들을 실행하고 관리합니다.
- 노드의 상태와 파드의 상태를 API 서버에 보고합니다.
- KUBE PROXY (kube-proxy):
- 각 노드에서 실행되는 네트워크 프록시입니다.
- 쿠버네티스 서비스(Service) 개념을 구현합니다. 파드로 네트워크 요청을 라우팅하고 로드 밸런싱하는 역할을 합니다.
- 노드의 네트워크 규칙(iptables, IPVS 등)을 동적으로 업데이트하여 서비스의 가상 IP 주소(ClusterIP)로 들어오는 트래픽이 올바른 파드로 전달되도록 합니다.
- POD (파드):
- 쿠버네티스에서 가장 작은 배포 단위입니다.
- 하나 이상의 **컨테이너(Container)**를 포함할 수 있습니다.
- 파드 내의 컨테이너들은 동일한 네트워크 네임스페이스와 스토리지를 공유합니다.
- CONTAINER (컨테이너):
- 파드 내에서 실제로 애플리케이션 코드가 실행되는 격리된 환경입니다.
- Docker, containerd, CRI-O 등 다양한 컨테이너 런타임에 의해 관리됩니다.
3. 클라우드 (Cloud) - '클라우드 통합'
위에서 언급된 CLOUD-CONTROLLER-MANAGER가 클라우드 제공업체(AWS, GCP, Azure 등)의 API와 연동하여 로드 밸런서나 영구 볼륨과 같은 클라우드 인프라 자원을 프로비저닝하고 관리하는 역할을 수행합니다.
전체적인 흐름 요약:
- 사용자/관리자는 kubectl 명령어를 통해 **API 서버(KUBE-APISERVER)**에 파드, 서비스 등의 원하는 상태를 선언합니다.
- API 서버는 이 정보를 ETCD에 저장합니다.
- **스케줄러(KUBE-SCHEDULER)**는 새로 생성된 파드를 ETCD에서 감지하고, 실행 가능한 최적의 노드를 찾아 해당 파드를 할당합니다.
- 할당된 노드의 KUBELET은 API 서버로부터 파드의 명세를 받아 컨테이너 런타임을 사용하여 해당 파드의 컨테이너들을 시작합니다.
- KUBE PROXY는 서비스에 대한 네트워크 규칙을 설정하여, 외부 또는 내부 트래픽이 올바른 파드로 라우팅되고 로드 밸런싱되도록 합니다.
- **컨트롤러 매니저(KUBE-CONTROLLER-MANAGER)**들은 클러스터의 실제 상태가 ETCD에 저장된 원하는 상태와 일치하도록 지속적으로 모니터링하고 조정합니다.
이러한 구성 요소들이 유기적으로 협력하여 쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장, 관리, 그리고 자가 치유를 자동화할 수 있게 됩니다.
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스] 1.등장 배경과 디자인 철학 쉽게 이해하기 (0) | 2025.06.04 |
---|---|
[쿠버네티스] POD(파드) 에 대해서 쉽게 알아보기 1 (0) | 2025.06.04 |