[CKA] 1.3 kube Controller Manager 기본
[CKA] 1.3 kube Controller Manager 기본 — #개발자의도구들 #kube-controller #cka #쿠버네티스 Controller 컨트롤러란 무엇인가? 쿠버네티스에서 컨...
#개발자의도구들 #kube-controller #cka #쿠버네티스
Controller
컨트롤러란 무엇인가?
쿠버네티스에서 컨트롤러란, 클러스터의 상태를 지속적으로 감시하면서 "현재 상태"를 "원하는 상태"로 맞춰주는 역할을 합니다.
항구로 비유하자면
- 선박 상태를 점검하는 선박 관리자
- 컨테이너 수량을 맞추는 물류 관리자
- 창고 공간을 관리하는 창고 관리자
각 관리자는 맡은 영역을 계속 살펴보며, 문제가 생기면 바로 조치를 취합니다. 이와 같이 쿠버네티스에는 많은 관리자(컨트롤러)가 존재하며 각자 담당영역에서 문제가 생기면 자동으로 해결해줍니다.
대표적인 컨트롤러
- 노드 컨트롤러
노드 컨트롤러는 워커 노드들의 건강 상태를 감시합니다.
각 노드의 kubelet은 주기적으로 kube-apiserver에게 상태 신호(heart-beat)를 보냅니다. 노드 컨트롤러는 이 하트비트를 통해 현재 노드가 정상인지 파악합니다.
만약 어떤 노드로부터 하트 신호가 끊기면 다음과 같은 조치를 취합니다.
- 40초 대기: 일시적인 네트워크 문제라고 가정하고 대기합니다.
- 연결 불가 표시: 40초가 지나도 응답이 없으면, 해당 노드를 "Unreachable"로 표시합니다.
- 5분 유예: 노드가 다시 살아날 수 있도록 5분의 시간을 부여합니다.
- 파드 재배치: 5분이 지나도 복구되지 않으면, 그 노드에 있던 파드들을 제거하고 다른 정상 노드에 새로 만들어줍니다.
2. Replication 컨트롤러
Replication 컨트롤러는 파드의 갯수를 원하는 만큼 유지시켜줍니다.
예를 들어 "front server pod"를 항상 3개로 유지시켜 달라고 할 수 있습니다.
- 파드 하나가 죽으면? → 새로운 파드를 만들어서 3개를 맞춥니다.
- 실수로 파드가 4개가 됐다면? → 하나를 제거해서 3개로 맞춥니다.
이 외에도 쿠버네티스에는 수많은 컨트롤러가 존재합니다.
- Deployment 컨트롤러: 배포와 롤링 업데이트 관리
- Service 컨트롤러: 서비스와 로드밸런싱 관리
- Namespace 컨트롤러: 네임스페이스 관련 리소스를 관리
- PersistentVolume 컨트롤러: 스토리지 볼륨 관리
- Job 컨트롤러: 일회성 작업들 관리
kube-controller-manager
kube-controller-manager
많은 컨트롤러들이 각각 따로 실행되고 있으면 관리하기가 어렵습니다. 그래서 쿠버네티스는 모든 컨트롤러를 하나의 프로세스로 묶어서 실행합니다. 이게 바로 kube-controller-manger입니다.
kube-controller-manger를 설치하면, 그 안에 포함된 모든 컨트롤러가 함께 설치되고 실행됩니다.
설정 확인 법
- kubeadm
kube-controller-manager는 마스터 노드의 kube-system 네임스페이스에 Pod 형태로 배포됩니다.
/etc/kubernetes/manifests/kube-controller-manager.yaml
2. 수동으로 설치
systemd 서비로 실행되며, 설정은 아래에서 확인 가능합니다.
/etc/systemd/system/kube-controller-manager.service
실행중인 옵션 확인
ps aux | grep kube-controller-manager
정리
컨트롤러는 클러스터의 상태를 지속적으로 감시하며, 현재 상태를 원하는 상태로 맞춰주는 역할을 합니다. 노드 컨트롤러는 노드의 건강상태를, 레플리케이션 컨트롤러는 파드의 개수를 관리합니다.
이런 수많은 컨트롤러들이 하나의 프로세스로 묶인 것이 kube-controller-manager입니다. 쿠버네티스가 알아서 자동으로 복구하고, 상태를 유지하는 self-healing 능력의 핵심이 바로 여기에 있습니다.


