예1 ) 웹서비스처럼 오랜시간동안 계속 파드들을 관리할 때 > 레플리케이션 컨트롤러, 레플리카세트, 디플로이먼트
예2 ) 클러스터의 전체 노드에 같은 파드를 실행할 때는 데몬세트를 사용
예3 ) 1회성 작업을 할 때 사용하는 잡
예4 ) 주기적인 배치 작업을 실행할 때 사용하는 크론잡
레플리케이션 컨트롤러
지정한 숫자만큼의 파드가 항상 클러스터 안에서 실행되도록 리한다.
예 ) 파드 2개를 명시해둔 레플리케이션 컨트롤러가 있다면 장애나 다른 이유로 파드 갯수가 2개보다 적을 때 다시 새로운 파드를 실행해서 파드 개수를 2개로 맞춘다.
컨트롤러를 사용하지 않고 파드를 직접 실행하면 파드에 이상이 생겨서 종료되거나 삭제됐을 때 재시작하기 어렵다.
파드를 실행하던 노드에 장애가 발생해서 파드가 종료되었을 때, 레플리케이션 컨트롤러를 이용해서 실행한 파드라면 클러스터 안 다른 노드에 다시 파드를 실행시킨다.
레플리카세트
레플리케이션 컨트롤러의 발전형
레플리케이션 컨트롤러와 같은 동작을 하지만 집합 기반의 셀렉터를 지원하는 차이점이 있다.
예 ) 레플리케이션 컨트롤러는 셀렉터가 등호기반이므로 레이블을 선택할 때 같은지(=) 다른지(!=)만 확인한다. 하지만 집합 기반의 셀렉터는 in, notion, exits같은 연산자를 지원한다.
레플리케이션 컨트롤러는 kubectl에서 rolling-update옵션을 사용할 수 있지만 레플리카세트는 사용할 수 없다. Rolling-update옵션이 필요할. 때는 디플로이먼트를 사용해야한다.
spec.replicas는 파드를 몇 개 유지할지 개수를 설정하는 필드. 따로 설정하지 않으면 기본값은 1이다.
spec.selector는 어떤 레이블의 파드를 선택해서 관리할지를 설정. 별도의 설정이 없으면 spec.template.metadata.labels.app에 있는 내용을 기본값으로 설정
파드는 레이블 기준으로 관리하므로 레플리카세트와 파드는 느슨하게 결합되어있다. —cache=fase 옵션을 사용하면 레플리카세트가 관리하는 파드에 영향을 끼치지 않고 레플리카세트만 삭제할 수 있다. 그럼 현재 실행중인 파드들을 관리하는 레플리카세트를 추가로 만들 수도 있다.
레플리카 세트상태
DESIRED : 레플리카세트 설정에 지정한 파드 개수
CURRENT : 레플리카세트를 이용해 현재 클러스터에서 동작하는 실제 파드 개수
디플로이먼트
쿠버네티스에서 상태가 없는 앱을 배포할 때 사용하는 가장 기본적인 컨트롤러
레플리카세트를 관리하면서 앱 배포를 더 세밀하게 관리한다.
배포기능을 세분화한 것
단순히 실행시켜야 할 파드 개수를 유지하는 것 뿐만 아니라 앱을 배포할 때 롤링 업데이트하거나, 앱 배포 도중 잠시 멈췄다가 다시 배포할 수 있다.
앱 배포 후 이전 버전으로 롤백할 수도 있다.
디플로이먼트의 설정을 변경할 때마다 새로운 레플리카세트가 생성되고 그에 맞게 파드가 변경된다
디플로이먼트 롤백 명령
kubectl rollout undo deploy [디플로이먼트이름]
kubectl rollout history 명령을 실행 했을 때 나오는 CHANGE-CAUSE 항목을 출력하려면 metadata.annotation 필드를 추가한다.