오늘의 인기 글
최근 글
최근 댓글
Today
Total
11-14 05:00
관리 메뉴

우노

[K8S] Control Plane, Data Plane이란? 본문

DevOps/Kubernetes

[K8S] Control Plane, Data Plane이란?

운호(Noah) 2023. 3. 19. 17:02

들어가기 앞서,

  • 쿠버네티스 클러스터는 노드들의 집합이며, 노드는 두가지 종류로 이루어져있습니다.
    • Master Node - Control Plane(컨트롤 플레인)
      • 워커 노드 및 클러스터 내 파드들을 관리하고 제어합니다.
    • Worker Node - Data Plane(데이터 플레인)
      • 실제로 애플리케이션을 실행하는 파드들을 호스팅합니다.

Control Plane(컨트롤 플레인)

  • Control Plane은 실제 애플리케이션의 실행과는 무관하며, 클러스터의 상태를 관리하고 조정하는 데 초점을 맞춥니다.
  • Control Plane의 구성 요소는 클러스터 전반의 안정성과 일관성을 유지하는 데 필수적입니다.
  • 구성 요소
    • API Server
      • Kubernetes의 프론트엔드 역할을 하며, RESTful API 및 kubectl 명령어 등을 통해 클러스터에 대한 요청을 처리합니다.
      • 모든 인증 및 인가 절차를 처리하고, 클러스터의 상태를 클라이언트에게 제공합니다.
    • Controller Manager
      • 다양한 컨트롤러를 실행하여 클러스터의 리소스를 지속적으로 모니터링하고 관리합니다.
      • 클러스터의 현재 상태와 사용자가 원하는 상태(예: Deployment, ReplicaSet 등)가 동일해지도록 조정하는 역할을 합니다.
    • Scheduler
      • 어떤 워커 노드에 파드를 배정할지를 결정합니다.
      • 파드의 리소스 요구 사항(CPU, 메모리 등)과 노드의 현재 상태를 기반으로 파드의 배치를 결정합니다.
      • 실제로 파드를 실행하는 것은 워커 노드의 kubelet입니다.
    • etcd
      • 클러스터의 상태 정보를 저장하는 분산 키-값 저장소입니다.
      • 클러스터의 모든 구성 및 상태 정보가 저장되며, 고가용성과 일관성을 보장합니다.

Data Plane(데이터 플레인)

  • Data Plane은 실제 사용자 애플리케이션이 실행되는 부분으로, 파드가 워커 노드에서 구체적인 작업을 수행합니다.
  • 이는 실제 비즈니스 로직이 실행되는 곳입니다.
  • 구성 요소
    • kubelet
      • 각 노드에서 실행되는 에이전트로, Master Node와 통신하여 할당된 파드를 실행하고 관리합니다.
      • 스케줄러가 특정 노드에 파드를 할당하면, kubelet이 해당 파드에서 컨테이너를 실행합니다.
      • 컨테이너의 라이프사이클을 관리하고, Pod의 상태를 주기적으로 API 서버에 보고합니다.
    • kube-proxy
      • 각 노드에서 실행되며, 네트워크 프록시 역할을 수행합니다.
      • IP 변환 및 네트워크 통신을 관리하며, 클러스터 내 서비스 간의 네트워크 트래픽을 라우팅합니다.
      • Kubernetes 서비스의 가상 IP를 유지하고, 트래픽이 올바른 파드로 전달되도록 합니다.
    • Container Runtime
      • 컨테이너를 실행하고 관리하는 엔진입니다.
      • Docker, containerd, CRI-O 등 다양한 런타임이 사용될 수 있습니다.

Pod 생성 과정

  • kubectl

    • 사용자는 kubectl CLI를 사용하여 Kubernetes 클러스터에 Pod 생성 요청을 보냅니다.

    • 명령어 예시:

        kubectl apply -f my-pod.yaml
    • kubectl은 사용자로부터 명령을 받아서 Kubernetes API 서버에 RESTful API 요청을 보냅니다.

  • kube-apiserver

    • kubectl로부터 받은 API 요청을 수신합니다.
    • 요청을 인증 및 인가한 후, 요청의 유효성을 검증합니다.
    • 요청에 따라 etcd에 변경 사항을 기록하거나, 필요한 다른 Control Plane 구성 요소에게 작업을 전달합니다.
  • etcd

    • 클러스터의 상태를 저장하는 분산 저장소로, API 서버로부터 받은 상태 변경 요청(예: 새로운 Pod 추가)을 저장합니다.
    • 모든 상태 정보는 etcd에 저장되며, Control Plane 구성 요소들은 이를 참조하여 클러스터의 현재 상태를 확인합니다.
  • kube-controller-manager

    • etcd를 통해 클러스터의 상태 변화를 감지하고, 클러스터의 실제 상태와 사용자가 원하는 상태(desired state)가 일치하도록 조정합니다.
    • Pod가 생성되었음을 감지하고, ReplicaSet 및 Deployment와 같은 컨트롤러가 이를 적절히 관리하도록 합니다.
  • kube-scheduler

    • 스케줄러는 새로운 Pod가 할당되지 않은 상태로 대기하고 있음을 감지합니다.
    • 클러스터 내의 모든 노드의 자원 상황을 평가하고, 새로운 Pod를 실행할 최적의 노드를 결정합니다.
    • Pod의 스케줄링 정보를 etcd에 기록합니다.
  • kubelet

    • 각 노드에서 실행되며, 스케줄러가 지정한 Pod가 자신이 관리하는 노드에 할당되었음을 인식합니다.
    • 컨테이너 런타임(Docker, containerd 등)을 사용하여 Pod의 컨테이너를 실제로 실행합니다.
    • Pod의 상태를 지속적으로 모니터링하고, 필요한 경우 재시작 등의 작업을 수행합니다.
    • 실행 상태를 주기적으로 API 서버에 보고합니다.

Pod 생성 과정 요약

  • 사용자kubectl 명령어를 통해 클러스터에 요청을 보냅니다.
  • kube-apiserver가 요청을 처리하고 인증/인가 후, etcd에 상태를 기록합니다.
  • kube-controller-manager가 상태 변경을 감지하고, 클러스터의 상태를 조정합니다.
  • kube-scheduler가 Pod의 실행 위치를 결정합니다.
  • kubelet이 노드에서 Pod의 컨테이너를 실행하고 상태를 모니터링합니다.

참고

Comments