-
[Kubernetes] Kubernetes ObController란? Controller 간략하게 알아보기 (ReplicaSet, Deployment, StatefulSet, DaemonSet, job, CronJob)CI-CD/Kubernetes 2023. 1. 19. 20:41반응형
컨트롤러(Controller)란?
쿠버네티스에서 제공하는 오브젝트를 생성하고 삭제 등 직접관리 할 수 있지만, Controller를 사용하여 high-level 컨트롤이 가능하다. 종류로는 ReplicaSet, ReplicationController, Deployment, StatefulSet, DaemonSet, Job, CronJob 등이 있다.
ReplicaSet
ReplicaSet은 ReplicationController의 상위 버전입니다. 기본적으로 Pod의 복제를 관리하며, replica의 지정한 수보다 많으면 삭제 작으면 생성하여 유지합니다. ReplicationController보다 ReplicaSet을 사용을 권장하며, ReplicationController와 동일한 기능을 제공합니다. 다음과 같은 차이점이 존재합니다.
ReplicationController
- Selector는 라벨을 기반으로 하며, 라벨을 지정하면 해당 라벨을 가진 모든 Pod를 관리합니다.
- Eqaulity 기반의 Selector를 사용합니다. 즉, 라벨이 같은지만(=) 바라보고 작동합니다.
ReplicaSet
- Selector는 라벨을 기반으로 하며, 라벨을 지정하면 해당 라벨을 가진 모든 Pod를 관리합니다.
- Selector는 집합 단위로 사용됩니다. 즉, in, notin, exists 같은 연산자를 사용 가능합니다.
Deployment
ReplicaSet의 상위 추상화 개념입니다. 실제 운영에서는 ReplicaSet을 직접 사용하는 것이 아니라 Deployment를 사용하여 관리합니다. Deployment는 말 그대로 배포입니다. 이 오브젝트는 배포에 대한 관리를 어떻게 진행할지 표기하고 그 방식 대로 Replicaset과 Pod를 관리합니다.
Deployment 방식 1 - 블루/그린 배포
블루 그린 배포 방식은 말 그대로 블루와 그린이라는 별개의 내용을 만들고 생성 삭제를 한다는 것입니다. Kubernetes Cluster에서 블루 그린 Deployment의 오브젝트를 제출하면 아래와 같이 서비스가 아예 하나가 통째로 생깁니다. 그러고 나서 배포가 완전히 완료되면 그전에 있던 배용은 죽이고 배포된 서비스를 운용합니다.
Deployment 방식 2 -롤링 업그레이드
롤링 배포는 Deployment 오브젝트가 제출되면 아래와 같이 하나씩 생성 및 전이되고 기존에 있던 것은 삭제된다. 이렇게 진행되면 노출이 다재다능하며, 하나씩 배포 되고 삭제 되기 때문에 latency가 존재하지 않게 된다.
StatefulSet
StatefulSet은 Pod의 상태를 유지하고 관리할 때 사용합니다. Deployment에 의해 Pod를 삭제하고 다시 생성하여 운영을 한다고 하면, Pod를 완전 삭제 하는데 StatefulSet을 사용하여 Pod를 생성하면 Pod가 삭제되었다 새로 생성되어도 기존의 상태를 그래도 유지할 수 있습니다.
StatefulSet은 데이터를 유실 없이 가지고 있기 위해서 분산하여 데이터를 가지고 있습니다. Replica를 3에서 2로 줄이더라도 이 내용을 다시 분산해서 저장 후에 pod가 삭제 되게 됩니다. 이런 특성 때문에 StatefulSet 은 DB와 같은 꼭 살아 있거나 데이터 유실이 없이 계속 유지되어야 하는 경우에 사용합니다. Deployment는 Stateless Application에 사용됩니다.
DaemonSet
디플로이먼트와 유사하게 파드를 생성하고 관리합니다. DaemonSet의 기본단위는 Node단위입니다. 데몬이란 백그라운드에서 항상 실행되면서 여러 작업을 하는 프로그램을 말합니다. 이처럼 DaemonSet은 전체 노드에서 백그라운드에 항상 실행되어야 하는 특정 Pod를 실 행 할 때 사용합니다.
예를 들어, 기존에 node당 log수집기나 Prometheus와 같은 모니터링 툴을 사용하고 있었다고 가정했을 때 node를 더 추가하면 log수집기나 Prometheus와 같은 모니터링 툴은 꼭 추가되어 node의 변화를 읽어야 합니다. 이럴 때 DaemonSet 오브젝트를 사용합니다.
Job
Job은 하나 이상의 Pod를 지정하고 지정된 수의 Pod를 실행합니다. 생성된 Pod에 배치작업을 실행하거나, 백업을 진행하는 용도로 사용됩니다. Pod가 정상적으로 실행되지 않았을 경우 Job은 자동으로 새로운 Pod를 생성하여 실행합니다. retry는 재실행 정책(restartPolicy)에 의해 결정됩니다.
CronJob
CronTab을 이용하여 주기적으로 Job을 실행하는 역할을 합니다. Cron은 ‘* * * * *’와 같은 형식으로 작성하여 배치 주기를 설정할 수 있습니다.
참고문헌
https://kubernetes.io/docs/concepts/architecture/controller/
https://kubernetes.io/ko/docs/concepts/workloads/controllers/replicaset/
https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/
https://www.bluematador.com/blog/kubernetes-deployments-rolling-update-configuration
https://kubernetes.io/ko/docs/concepts/workloads/controllers/statefulset/
https://medium.com/@marko.luksa/graceful-scaledown-of-stateful-apps-in-kubernetes-2205fc556ba9
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
https://kubernetes.io/docs/concepts/workloads/controllers/job/
https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
반응형'CI-CD > Kubernetes' 카테고리의 다른 글