DevOps

Kubernetes - kube-controller-manager

Vince_rf 2024. 10. 19. 15:03

kube-controller-manager는 Kubernetes 클러스터에서 다양한 컨트롤러를 실행하고 관리하는 핵심 컴포넌트입니다. 이 컨트롤러들은 클러스터의 상태를 지속적으로 모니터링하고, 사용자 또는 시스템의 요청에 따라 상태를 원하는 상태로 유지하기 위한 작업을 수행합니다. 컨트롤러들은 클러스터의 각 리소스에 대한 제어 루프(Control Loop)를 통해 클러스터의 상태를 지속적으로 확인하고 수정합니다. kube-controller-manager는 이러한 여러 컨트롤러들을 하나의 프로세스로 묶어 관리합니다.

 

 

kube-controller-manager의 역할

kube-controller-manager는 Kubernetes 클러스터의 여러 리소스를 관리하기 위해 **다양한 컨트롤러(controller)**들을 실행합니다. 주요 역할은 클러스터의 실제 상태를 원하는(desired) 상태로 유지하는 것입니다. Kubernetes의 선언적 방식에 따라 사용자는 원하는 상태를 정의하고, kube-controller-manager는 클러스터의 실제 상태를 주기적으로 확인한 후, 필요한 경우 이를 조정하여 사용자가 정의한 상태에 맞추도록 합니다.

주요 컨트롤러들:

  1. Node Controller
    • 역할: 클러스터 내 노드의 상태를 모니터링합니다. 노드가 정상적으로 작동하지 않거나 장애가 발생했을 때, 이를 감지하여 적절한 대응을 합니다.
    • 동작 원리: 일정 시간 동안 노드로부터 상태 보고가 없으면, 노드 상태를 "NotReady"로 변경하고, 그 노드에 배치된 Pod들을 다른 노드로 옮기거나 복구를 시도합니다.
  2. Replication Controller
    • 역할: 특정 수의 Pod 인스턴스가 항상 실행 중인지 확인합니다.
    • 동작 원리: 사용자가 정의한 Pod의 수(Replica 수)가 클러스터에 맞춰져 있는지 지속적으로 모니터링하고, 부족할 경우 새로운 Pod을 생성하거나, 너무 많을 경우 불필요한 Pod를 삭제합니다.
  3. Endpoints Controller
    • 역할: 각 서비스에 연결된 Pod의 엔드포인트 정보를 관리합니다.
    • 동작 원리: 서비스가 적절하게 엔드포인트(클러스터 내의 서비스와 Pod를 연결하는 지점)를 유지하도록, Pod가 추가되거나 삭제될 때 자동으로 엔드포인트를 수정합니다.
  4. Service Account & Token Controller
    • 역할: 클러스터에서 서비스 계정과 그에 대한 인증 토큰을 생성하고 관리합니다.
    • 동작 원리: 새로 생성된 서비스 계정에 대한 인증 토큰이 자동으로 발급되도록 처리합니다.
  5. Job Controller
    • 역할: Job 리소스를 관리하고, 정의된 Job이 정상적으로 실행되고 완료되는지 확인합니다.
    • 동작 원리: Job이 생성되면 해당 Job에 필요한 Pod들을 생성하고, 모든 작업이 완료될 때까지 모니터링합니다.
  6. PersistentVolume Controller
    • 역할: 클러스터 내에서 동적으로 생성된 PersistentVolume(PV)과 PersistentVolumeClaim(PVC)을 관리하고 연결합니다.
    • 동작 원리: PVC가 생성되면 사용 가능한 PV를 찾아 자동으로 바인딩하고, 스토리지 볼륨이 적절하게 프로비저닝되었는지 확인합니다.

kube-controller-manager의 동작 원리

kube-controller-manager는 여러 개의 컨트롤러들을 한 프로세스로 실행합니다. 각 컨트롤러는 Kubernetes API 서버와 상호작용하며, 클러스터의 상태를 지속적으로 모니터링하고 이를 원하는 상태와 비교한 후 조치를 취합니다.

  1. 컨트롤 루프(Control Loop)
    • 모든 컨트롤러는 **제어 루프(Control Loop)**라는 구조로 동작합니다. 이 루프는 클러스터의 상태를 지속적으로 확인하고, 실제 상태가 사용자 정의 상태와 일치하지 않을 경우 이를 수정하는 작업을 수행합니다.
    • 예를 들어, Replication Controller는 현재 실행 중인 Pod의 수와 사용자가 원하는 수를 비교합니다. 원하는 수보다 적다면 추가 Pod를 생성하고, 많다면 일부를 종료시킵니다.
  2. 클러스터 상태 모니터링
    • 각 컨트롤러는 주기적으로 API 서버에서 클러스터 상태 정보를 조회합니다. API 서버는 etcd에 저장된 클러스터의 상태 데이터를 관리하고 있으므로, API 서버를 통해 현재 상태를 확인합니다.
    • 이 상태 정보는 컨트롤러가 참조하는 "실제 상태(Current State)"입니다.
  3. 상태 비교 및 수정
    • 컨트롤러는 API 서버에서 받은 실제 상태를 사용자가 정의한 **원하는 상태(Desired State)**와 비교합니다. 원하는 상태는 사용자가 작성한 Kubernetes 객체(예: Pod, Deployment, Service 등) 스펙에 정의되어 있습니다.
    • 실제 상태와 원하는 상태가 일치하지 않을 경우, 컨트롤러는 이를 수정합니다. 예를 들어, 원하는 Replica 수가 3인데 실제로는 2개만 실행 중이라면, Replication Controller는 추가 Pod을 생성합니다.
  4. API 서버와 상호작용
    • 컨트롤러가 상태를 수정하기 위해 필요한 작업을 결정하면, Kubernetes API 서버를 통해 리소스를 생성, 업데이트 또는 삭제하는 작업을 요청합니다.
    • 이러한 작업은 kube-apiserver가 받아들이고, 해당 작업의 결과를 다시 etcd에 기록합니다.

주요 동작 예시

  1. Replication Controller 예시
    • 사용자가 ReplicaSet을 통해 5개의 Pod를 실행하고자 요청합니다.
    • Replication Controller는 클러스터 상태를 확인하고, 현재 3개의 Pod만 실행 중인 것을 감지합니다.
    • 2개의 추가 Pod를 생성하기 위해 kube-apiserver에 요청을 보내고, Pod가 실행되면 API 서버로부터 확인을 받습니다.
    • 이후에도 Replication Controller는 계속해서 상태를 모니터링하며, 만약 Pod가 종료되거나 문제가 생기면 새로운 Pod를 생성하여 원하는 상태를 유지합니다.
  2. Node Controller 예시
    • 클러스터에서 하나의 노드가 일정 시간 동안 응답하지 않으면 Node Controller는 이를 감지합니다.
    • Node Controller는 해당 노드를 "NotReady" 상태로 표시하고, 그 노드에 배치된 Pod들이 장애를 겪지 않도록 다른 노드로 옮기거나, 필요할 경우 Pod를 재시작하도록 API 서버에 요청합니다.

요약

  • kube-controller-manager는 Kubernetes 클러스터에서 상태 관리의 핵심 역할을 합니다.
  • 여러 컨트롤러가 클러스터의 리소스 상태를 모니터링하고, 원하는 상태실제 상태를 비교하여 필요한 조정을 수행합니다.
  • 각 컨트롤러는 **제어 루프(Control Loop)**로 동작하며, 지속적으로 클러스터 상태를 확인하고 수정 작업을 자동으로 처리합니다.
  • 이를 통해 Kubernetes는 사용자가 선언한 상태를 지속적으로 유지하며, 고가용성, 안정성, 자원 관리 등을 효율적으로 수행할 수 있습니다.

'DevOps' 카테고리의 다른 글

Kubernetes - kubelet  (1) 2024.10.19
Kubernetes - kube-scheduler  (0) 2024.10.19
Kubernetes - kube-apiserver  (0) 2024.10.19
Kubernets - ETCD  (0) 2024.10.19
Terraform Name Prefix 옵션의 사용  (0) 2024.10.10