Controller
는 Cluster
를 관찰하면서 관리자가 선언한 상태를 유지하기 위해 동작합니다.
이를 위해 Cluster
의 상태를 관찰한 다음 필요한 경우 오브젝트의 생성 또는 변경을 api-server
에 요청하는 방식으로 동작합니다.
Container
를 감시하고 수를 보장해주는 Controller
에는 크게 4가지 역할이 있습니다.
Auto Healing
Pod
또는 Pod
이 실행되고 있는 노드에 문제가 생겼을 경우 자동으로 복구하는 기능
ex) ReplicaSet
, DaemonSet
Software Update
Pod
을 업데이트 하는 기능, 롤백 기능도 제공
ex)Deployment
Auto Scaling
Pod
의 리소스가 부족할 때 Pod
을 추가적으로 생성하는 기능
Job
일시적인 작업을 위해 필요한 순간에만 Pod
을 만들었다가 삭제할 수 있는 기능
ex) job
, cron job
Kubernetes
에는 다양한 형태의 Controller
들이 존재합니다.
Kubernetes의 다양한 Controller
Node Controller
Replication Controller
Deployment Controller
Service Account Controller
Namespace Controller
Endpoint Controller
PV Protection Controller
Job Controller
CronJob
ReplicaSet
DaemonSet
이런 다양한 Controller
들은 동작하는 방식은 다양하지만 Cluster
의 구성요소들에대한 상태를 관찰한 다음, 현재 상태(current state)
를 선언한 상태(desired state)
와 일치시키기 위해 노력합니다.
이번에는 Node Controller
와 Replication Controller
에 대해서만 간단히 설명하겠습니다.
Node Controller
는 이름에서도 볼 수 있듯이 Node
들의 상태를 유지하기 위해 동작합니다.
Node
들의 상태를 모니터링하여 애플리케이션이 정상적으로 동작 할 수 있도록 필요한 조치를 취해주는 Controller
입니다.
동작 방식은 다음과 같습니다.
Node Monitor Period
일정 시간(5초)마다 상태를 체크합니다.
Node Monitor Grace Period
특정 노드에 문제가 있는지 판단하기 위한 시간입니다.
문제가 있는 노드인지 판단하기 위해 40초를 기다리고,
40초 이후에도
POD Eviction Timeout
Pod
이 잘 동작하는지 5분동안 기다려봅니다.
그 후에도 문제가 있다면 해당 노드에 있는 파드를 제거하고 잘 작동하는 노드에 provision 합니다.
(Pod
이 ReplicaSet
에 의해 관리되고 있을 경우)
Replication Controller
는 ReplicaSet
의 상태를 모니터링하며 Pod
의 개수를 보장합니다.
Pod
에 문제가 생길 경우 Pod
을 새로 생성합니다.
Replication Controller
가 관리하는 ReplicaSet
에 대해서는 나중에 오브젝트에 대해 공부하는 부분에서 별도로 살펴 볼 예정입니다.