쿠버네티스

[쿠버네티스] 2. 쿠버네티스 구조 이해하기

Catnap 2025. 6. 4. 18:07

 

출처: https://www.oracle.com/kr/cloud

 

쿠버네티스 클러스터는 크게 컨트롤 플레인(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와 연동하여 로드 밸런서나 영구 볼륨과 같은 클라우드 인프라 자원을 프로비저닝하고 관리하는 역할을 수행합니다.


전체적인 흐름 요약:

  1. 사용자/관리자는 kubectl 명령어를 통해 **API 서버(KUBE-APISERVER)**에 파드, 서비스 등의 원하는 상태를 선언합니다.
  2. API 서버는 이 정보를 ETCD에 저장합니다.
  3. **스케줄러(KUBE-SCHEDULER)**는 새로 생성된 파드를 ETCD에서 감지하고, 실행 가능한 최적의 노드를 찾아 해당 파드를 할당합니다.
  4. 할당된 노드의 KUBELET은 API 서버로부터 파드의 명세를 받아 컨테이너 런타임을 사용하여 해당 파드의 컨테이너들을 시작합니다.
  5. KUBE PROXY는 서비스에 대한 네트워크 규칙을 설정하여, 외부 또는 내부 트래픽이 올바른 파드로 라우팅되고 로드 밸런싱되도록 합니다.
  6. **컨트롤러 매니저(KUBE-CONTROLLER-MANAGER)**들은 클러스터의 실제 상태가 ETCD에 저장된 원하는 상태와 일치하도록 지속적으로 모니터링하고 조정합니다.

이러한 구성 요소들이 유기적으로 협력하여 쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장, 관리, 그리고 자가 치유를 자동화할 수 있게 됩니다.