네른

[Kubernetes] Kubernetes의 구조 - 컨트롤러 본문

DevOps

[Kubernetes] Kubernetes의 구조 - 컨트롤러

네른 2022. 4. 30. 20:18

저번 포스트에서는 기본 오브젝트들에 대해 정리함.

이번에는 컨트롤러 - 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간의 동기화는 별도로 처리해주어야 함

 

 

Comments