쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위로 하나 이상의 컨테이너 그룹이다. 그룹은 스토리지 및 네트워크를 공유하고 해당 컨테이너를 구동하는 방식에 대한 명세를 갖는다. 파드 콘텐츠는 항상 함께 배치, 스케줄되며 공유 콘텍스트에서 실행된다.
https://kubernetes.io/ko/docs/concepts/workloads/pods/
복제된 애플리케이션을 관리하는 오브젝트로 파드와 레플리카셋에 대한 선언적 업데이트를 제공한다. 디플로이먼트 컨트롤러는 현재 상태에서 원하는 상태로 비율을 조정하며 변경한다.
https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/
파드 집합의 실행을 안정적으로 유지하기 위한 것으로 명시된 파드 개수에 대한 가용성을 보장하는 데 사용한다. 레플리카셋은 원하는 상태를 충족하기 위해 필요한 만큼 파드를 만들고 삭제한다. 새로운 파드를 생성해야 할 경우 명시된 파드 템플릿을 사용한다.
https://kubernetes.io/ko/docs/concepts/workloads/controllers/replicaset/
스테이트풀셋은 상태가 존재하는 애플리케이션을 관리하는데 사용하는 오브젝트로 파드들의 순서 및 고유성을 보장한다. 디플로이먼트와 유사하게 스테이트풀셋은 동일한 컨테이너 스펙을 기반으로 둔 파드들을 관리한다. 하지만 각 파드의 독자성을 유지하므로 서로 교체 불가능하며 재스케줄링 간에도 지속적으로 유지되는 식별자를 가진다.
https://kubernetes.io/ko/docs/concepts/workloads/controllers/replicaset/
레플리케이션 컨트롤러는 레플리카셋과 유사하게 동작한다. 하지만 레플리카셋이 더 다양한 셀렉터를 지원하므로 레플리카셋이 레플리케이션 컨트롤러보다 선호된다.
디플로이먼트와 레플리카셋은 지정된 수의 파드 레플리카가 항상 실행되도록 보장한다. 하지만 디플로이먼트는 레플리카셋을 관리하고 다른 유용한 기능과 함께 파드에 대한 선언적 업데이트를 제공하는 상위 개념이다.
디플로이먼트로 애플리케이션을 배포할 경우 파드의 이름은 다음과 같다.
<deployment 이름>-<replicaset hash값>-<pod hash값>
스테이트풀셋 애플리케이션을 배포할 경우 이름은 다음과 같다.
<statefulset 이름>-<pod 식별자>
디플로이먼트의 이름은 랜덤한 해쉬 값이 이름에 들어가기 때문에 상태가 있는 애플리케이션을 지속적으로 관리하긴 힘들다. 하지만 스테이트풀셋의 경우 지속적으로 동일한 식별자를 제공하기 때문에 애플리케이션이 안정적인 식별자 또는 순차적인 작업이 필요하다면 스테이트풀셋을 사용해야 한다.
https://kubernetes.io/ko/docs/concepts/workloads/controllers/statefulset/
데몬셋은 파드를 모든 노드에서 실행되도록 보장한다. 노드가 클러스터에 추가되면 파드도 추가되고 제거 또한 동일하게 동작한다. 데몬셋을 삭제하면 데몬셋이 생성한 파드들이 삭제된다. 모든 노드에서 동일하게 필요한 로그 수집, 모니터링 같은 파드를 배포하는 용도로 사용된다.
https://kubernetes.io/ko/docs/concepts/workloads/controllers/daemonset/
하나 이상의 파드를 생성하고 파드가 성공적으로 종료될 때까지 계속해서 파드의 실행을 재시도한다. 잡을 스케줄에 따라 구동하고 싶은 경우 크론잡을 사용해야 한다.
잡의 동작방식
https://kubernetes.io/ko/docs/concepts/workloads/controllers/job/
크론 형식으로 쓰여진 주어진 일정에 따라 주기적으로 동작시킨다. 크론잡은 정기적인 작업을 수행하기 위해 사용되며 각 작업은 무기한 반복되도록 구성해야 한다. 잡은 완벽히 동작해야 하겠지만 두 개의 잡이 생성되거나 생성되지 않기도 한다.
https://kubernetes.io/ko/docs/concepts/workloads/controllers/cron-jobs/