본 포스팅은 Udemy Certificated Kubernetes Administrator 강좌를 공부한 내용입니다.

 

Kuberentes Control Plane 이란

Kubernetes에 배포되는 Container를 관리하기 위한 구성요소들을 Kubernetes Control Plane이라고 한다.

주로 master node에 배포되며 minion node의 kubelet과 통신하면서 Container를 관리한다.

 

Control Plane의 구성 요소

etcd : K-V 저장소이며 kubernetes cluster 정보를 저장한다.

kube-api-server : kubernetes의 API server이며 minion node를 관리하는 kubelet, 사용자 client kubectl 등과 통신한다.

kube-controller-manager : kubernetes의 resource(node, replicaset, pod, service account, secret 등)을 모니터링하며 관리한다.

kube-scheduler : pod가 어느 minion node에 배치될지를 결정한다.

 

kube-api-server

kubernetes의 API server

역할 :

  • Control Plane의 구성요소 및 minion node의 kubelet 사이를 통신해주는 역할을 한다.
  • 사용자가 kubectl을 사용할 때 요청을 받아 처리하는 역할을 한다.

 

예시. kubectl create pod Process

  1. Authenticate User
    - 사용자가 인증된 사용자인지 확인한다. (cert key 또는 oidc)
  2. Validate Request
    - 요청이 올바른 요청인지 확인한다.
  3. Retrieve data
    - 요청에 대한 결과를 응답한다. (Pod 생성 요청 완료)
  4. Updatae ETCD
    - 생성 요청된 POD 정보를 ETCD에 업데이트 한다.
  5. Scheduler
    - Scheduler에게 POD이 배치될 Minion Node를 요청한다.
  6. Kubelet
    - Schduler에게 받은 Minion Node의 Kubelet에게 POD 생성을 요청한다.

 

kube-controller-manager

Kubernetes의 resource를 모니터링 및 관리

하나의 프로세스지만 각 resource를 담당하는 모듈이 다 별도로 존재함

 

역할 :

  • Kubernetes Resource 상태 모니터링(Watch Status)
  • Resource에 이슈 발생 시 조치(Remediate Situation)

예시. node-controller monitoring

  1. Node Monitor Period (5s)
    - kube-api-server --> kublet을 통해 5초마다 node의 상태를 요청한다.
  2. Node Monitor Grace Period (40s)
    - kubelet이 응답하지 않았을 시, unreachable 상태를 마킹하고 40초를 더 대기한다.
  3. POD eviction TImeout (5m)
    - 40초 이후에도 응답하지 않을 시, 해당 node에 떠있는 POD를 다른 node로 이전시킨다.
    - POD이 replicaset이라면 replicaset-controller를 통해 POD을 이전시킨다.

예시. replicaset-controller monitoring

  1. Replicaset의 POD 갯수가 유지되고 있는지 확인한다.
  2. 갯수가 맞지 않을 경우 새로운 POD를 생성한다.

kube-scheduler

POD를 어느 node에 배정될지 결정

직접 POD를 실행시키지 않음, POD를 실행시키는 역할은 각 minion node의 kubelet

 

역할:

  • 정해진 Scheduling 방식에 의해 POD이 배정될 node를 결정한다.

예시. POD Scheduling

  1. 4개의 minion node가 각기 다른 가용 CPU resource를 가지고 존재한다.
    - minion 1 : CPU 4 core
    - minion 2 : CPU 6 core
    - minion 3 : CPU 12 core
    - minion 4 : CPU 16 core
  2. CPU를 10 core 사용하는 POD 생성 요청이 들어와 이를 Sheduleing 함.
  3. POD가 들어갈 수 없는 minion 1, minion 2를 제외함
  4. POD가 생성되었을 경우 minion node의 가용 CPU를 계산함
    - minion 3 : CPU 2 core
    - mnion 4 : CPU 6 core
  5. minion 4의 가용 CPU가 많기 때문에 minion 4에 POD를 배정할 것을 결정함.
  6. minion 4의 Kubelet이 POD를 생성함.

Affinity, taint-and-toleration 등에 의해 스케쥴링 방식이 위 예시처럼 간단하진 않다고 한다.

더 자세한 내용은 다음에 해준다고함.

정리

control plane 구성요소를 간단하게 살펴볼 수 있었음

각 구성요소 간의 통신을 위한 certificate는 다음에 살펴본다고 함

kubeadm 또는 manaual deploy 방법 또한 다음에 살펴본다고 함

+ Recent posts