https://kubernetes.io/ko/docs/concepts/architecture/controller/
로보틱스, 자동화 분야에서 Controll loop는 시스템 상태를 조절하기 위해 종료되지 않는 루프를 말한다. 대표적인게 실내 온도 조절기라고함. 이 예시에서 사용자는 온도를 설정한다 → 사용자가 의도한 상태(Desired Status)를 알려주면, 온도 조절기는 현재 상태를 해당 의도한 상태에 가깝게 만든다.
쿠버네티스에서의 컨트롤러도 동일한 행위를 한다. 클러스터의 상태를 관찰한 다음 필요한 경우에 생성, 변경을 요청해 클러스터의 현재 상태를 의도한 상태로 만들어간다.
컨트롤러 루프 프로세스들은 각자가 맡은 하나 이상의 쿠버네티스 리소스를 추적하고 해당 리소스를 의도한 상태에 가깝게 만드는 역할을 한다. 이들은 의도한 상태로 가기 위해 현재 상태에 약간의 변화를 주고, 이 상태를 클러스터 API에 보고한 후, 이 보고된(공유된) 데이터를 바탕으로 다시 자체 조치를 취한다. 이 과정을 실제로 수행하기 위해 컨트롤러는 API서버로 메시지를 발송한다. 그 예시는 다음과 같음.
예를 들면, 잡(Job)컨트롤러는 쿠버네티스 내장 컨트롤러중 하나. 내장 컨트롤러는 클러스터 API 서버와 상호작용하며 리소스 상태를 관리함.
💡 Job은 단일 파드, 또는 여러 파드를 실행하고 작업을 수행한 다음 파드를 중지하는 역할을 하는 쿠버네티스 리소스임.
잡 컨트롤러가 새로운 작업을 인식하면, 잡 컨트롤러는 API서버에 파드를 생성하거나 삭제하도록 지시함. 그동안 컨트롤 플래인의 다른 컴포넌트들도 이 새로운 작업(파드 생성 및 실행)에 대응. (예를들면 kube-scheduler는 어떤 노드에 파드를 띄울지 결정한다.) 이후 각 노드의 kubelet이 작업을 수행하기에 적절한 수의 파드를 실행함.
새 Job이 생성되고 나면 의도한 상태는 이 Job이 완료되는 것. Job컨트롤러는 현재 상태를 의도한 상태에 가깝게 만든다.
일부 컨트롤러들은 클러스터 외부의 것들과 소통해야 할 일이 생기기도 함. 이 때는 외부 시스템과 직접 통신해서 현재 상태를 의도 상태에 가깝게 만든다.
예를들면
Service Controller가 클라우드 로드밸런서를 생성·삭제하는 경우가 있음.
이렇게 외부 시스템과 직접 통신할 때에도 오브젝트 상태를 갱신하기 위해 내부 API 서버와도 소통함.