3일차: kube controller manager

발행: (2025년 12월 10일 오전 10:34 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

개요

Kube Controller Manager는 Kubernetes 클러스터 내 구성 요소들의 상태를 지속적으로 모니터링하고 시스템을 원하는 상태로 만들기 위해 작업하는 다양한 컨트롤러들을 실행합니다.

컨트롤러

컨트롤러는 Kubernetes API 서버의 변화를 감시하고 현재 상태를 원하는 상태와 일치시키기 위해 행동을 취하는 프로세스입니다.

Node Controller

  • Kube API 서버를 통해 노드 상태를 모니터링합니다.
  • 5초마다 노드 하트비트를 확인합니다.
  • 하트비트가 누락되면 40초 후에 노드를 연결 불가 상태로 표시합니다.
  • 그 후 노드는 5분 동안 복구할 시간을 갖게 되며, 복구되지 않으면 파드가 퇴출되고(ReplicaSet에 속한 경우) 정상 노드에 다시 스케줄됩니다.

ReplicaSet Controller

  • ReplicaSet에 지정된 파드 수가 항상 유지되도록 보장합니다.
  • 파드가 종료되거나 비정상 상태가 되면, 컨트롤러는 원하는 복제본 수를 맞추기 위해 새로운 파드를 생성합니다.

패키징

모든 컨트롤러는 Kubernetes Controller Manager라는 단일 바이너리로 묶여 있습니다. 매니저를 설치하면 내장 컨트롤러들(노드, 레플리카, 디플로이먼트 등)이 자동으로 제공됩니다.

설치

  1. Kubernetes 릴리스 페이지에서 해당 릴리스를 다운로드합니다.
  2. 아카이브를 압축 해제합니다.
  3. 바이너리를 시스템 서비스로 실행합니다(예: systemd 사용).
# 예시: 압축을 풀고 컨트롤러 매니저 시작
tar -xzf kubernetes-server-linux-amd64.tar.gz
sudo cp kubernetes/server/bin/kube-controller-manager /usr/local/bin/
sudo systemctl enable kube-controller-manager
sudo systemctl start kube-controller-manager

kubeadm 배포

kubeadm을 사용할 경우, 컨트롤러 매니저는 kube-system 네임스페이스의 정적 파드로 배포됩니다. 매니페스트 파일은 다음 위치에 배치됩니다:

/etc/kubernetes/manifests/kube-controller-manager.yaml

설정 옵션

컨트롤러 매니저는 동작을 맞춤화할 수 있는 다양한 플래그를 제공합니다. 예시:

  • --node-monitor-period=5s – 노드 상태 확인 간격.
  • --node-monitor-grace-period=40s – 노드를 연결 불가로 표시하기 전 대기 시간.
  • --pod-eviction-timeout=5m – 연결 불가 노드에서 파드를 퇴출하기까지의 기간.

이 플래그들은 서비스 정의 파일이나 정적 파드 매니페스트에 추가할 수 있습니다.

실행 중인 매니저 확인하기

컨트롤러 매니저가 kubeadm에 의해 관리되지 않는 경우, 서비스 설정 및 실행 중인 프로세스를 확인할 수 있습니다:

# systemd 서비스 파일 확인 (예시 경로)
cat /etc/systemd/system/kube-controller-manager.service
# 실행 중인 프로세스 확인
ps -aux | grep kube-controller-manager

Day 3 노트 종료.

Back to Blog

관련 글

더 보기 »

4일차: kube scheduler

개요 Kubernetes 스케줄러는 각 파드가 실행될 노드를 결정합니다. 스케줄러가 파드를 직접 배치하는 것이 아니라, 각 파드에 대한 대상 노드를 기록합니다.