[Kubernetes] Kubernetes의 구조 - 컨트롤러
저번 포스트에서는 기본 오브젝트들에 대해 정리함.
이번에는 컨트롤러 - Replication Controller(ReplicaSet), Deployment, StatefulSet, DaemonSet, Job Controller 에 대해 정리하고자 함.
Controller?
- 쿠버네티스의 오브젝트를 관리해주는 것
Replication Controller (ReplicaSet)
- 구 버전의 Replication Controller와 ReplicaSet은 동일.
- Kube의 Pod 수를 일정하게 유지되도록 생성하고 관리하는 것이 주 역할.
- Kube는 가용성 확보를 위해 동일한 Pod를 여러개 띄우게 되는데, 이를 replica로 묶어서 관리하게 됨
: 즉, 어떤 ReplicaSet의 replica 수가 3 == 정의된 Pod를 총 세개 띄우고, 세개가 유지되도록 하라.
- 서비스 등과 마찬가지로 selector를 이용해서 Pod를 선택할 수 있음
- 이러한 ReplicaSet의 추상화된 개념이 바로 Deployment
Deployment Controller
- 앞서 이야기한 것 처럼 ReplicaSet의 추상화 된 개념.
- 실제 yaml 파일의 구조도 매우 유사하며, 실제 배포시에는 replicaset을 만들기보다는 이 deployment를 정의함.
- deployment를 정의하면 replicaSet도 알아서 생성됨
- revision 기능을 사용하여 배포를 관리할 수 있음
: 컨테이너에 사용되는 이미지를 변경한 후에 새로운 revision을 생성하여 배포 버전을 관리할 수 있음!
DaemonSet
- ReplicaSet처럼 Pod를 관리하지만, 특정 Pod를 '한 노드당 한 개씩' 배치되도록 관리함
- 혹은 특정 노드에만 deploy할 수도 있음!
- 주로 모니터링용 Pod 혹은 로깅용 Pod 등에 사용됨
Job Controller
- 한 번 실행된 후에 반드시 종료되어야하는 업무를 담당하는 Pod
- 주로 yaml에 수행할 커맨드를 입력해두고 해당 커맨드 실행 후 죽도록 구성하게 됨
- 만약 그 커맨드가 실행에 실패한다면? restartPolicy, backoffLimit 등의 설정에 따라 실패시 재시작하는 등의 방법이 있음
- 순차적으로 Job을 처리하거나, 여러 Pod를 병렬로 처리할 수도 있음!
CronJob Controller
- Crontab(unix cron)과 유사.
- 정기적으로 특정 작업을 반복해야할 때 사용하곤 함
StatefulSet
- DB와 같이, Pod의 state(상태)가 중요한 경우에 사용하게 됨. 즉, 내부 app의 상태를 저장하고 관리함!
- StatefulSet으로 생성된 Pod는 '영구 식별자'를 가지게 됨.
: 혹 해당 Pod가 삭제되고 다시 생성되더라도 이전 상태를 유지할 수 있음
: 생성된 Pod 뒤에 0, 1, 2와 같이 숫자가 붙어서 생성됨
- 주의할 점) Pod 네트워크의 유지를 위해 Headless service를 사용하는것을 권장함
: StatefulSet은 상태가 중요하므로 죽었다 살아나도 그대로 유지되어야 함
: 이를 위해 Domain Name으로 특정 Pod에 접근하는 것이 유리함
- 주의할 점) StatefulSet으로 DB를 관리하는 경우, DB간의 동기화는 별도로 처리해주어야 함