- set-based selector 지원
- replicas로 지정한 파드 개수를 라벨을 기준으로 맞춰 줌.
- 파드를 실행하던 노드에 장애가 발생하여 파드가 종료된다면 클러스터 안 다른 노드에 다시 파드를 실행시킨다.
- yaml 파일 명세 (예시는 아래 deployment에서 참고)
- metadata.name: 레플리카세트 이름
- spec.metadata.name: 파드 이름
- spec.metadata.labels.app: 오브젝트를 식별하는 레이블이 앱 컨테이너고 해당 이름으로 식별한다고 설정.
- spec.replicas: 파드를 몇 개 유지할지 개수 지정
- spec.selector: 어떤 레이블의 파드를 선택해서 관리할지를 설정. 레이블을 기준으로 파드를 관리하므로 실행중인 파드르 중단하거나 재시작하지않고 레플리케이션 컨트롤러가 관리하는 파드를 변경할 수 있다. spec.template.metadata.labels의 하위 필드 설정과 spec.selector.matchLabels의 하위 필드 설정이 같아야 한다. 템플릿에 별도의 spec.selctor 설정이 없으면 spec.template.metadata.labesl.app에 있는 내용을 기본값으로 설정한다.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx-deployment template: metadata: labels: app: nginx-deployment spec: containers: - name: nginx-deployment image: nginx ports: - containerPort: 80
- nginx-deployment: 디플로이 이름. nginx-deployment-69cfxxxxx: 디플로이가 관리하는 레플리카 세트. 69cfxxxx는 레플리카세트를 구분하는 UUID 해시 문자. nginx-deployment-69cfxxxxx-yyyyyy 형식의 파드들이 생성
- kubectl set 명령으로 직접 컨테이너 이미지를 지정
- kubectl edit 명령으로 현재 파드의 설정 정보를 연 다음 컨테이너 이미지 정보 수정
kubectl edit deploy nginx-deployment
-> image 부분 수정
- 처음 적용했던 템플릿의 컨테이너 이미지 정보를 수정한 다음 apply로 재 배포
kubectl rollout histroy deploy 디플로이먼트이름
으로 확인- --revision==리비전숫자 옵션으로 특정 리비전의 상세 내용 확인
kubectl rollout undo deploy 디플로이먼트이름
: 이전 리비전으로 되돌림. 되돌리면 레플리카세트 이름이 이전 버전으로 바뀜.
리비전 버전도 바뀐다. 여기서 CHANGE-CAUSE는 해당 리비전에서 무엇을 수정했는지 확인하기 위한 옵션이다. CHANGE-CAUSE에 내용을 출력하려면 metadata.annotaitions 필드를 추가하면 된다.
- Progressing, complete, failed
- kubectl rollout status 로 확인 가능
- Progressing
- 디플로이먼트가 새로운 레플리카세트를 만들 때
- 디플로이먼트가 새로운 레플리카세트의 파드 개수를 늘릴 때
- 디플로이먼트가 예전 레플리카세트의 파드 개수를 줄일 때
- 새로운 파드가 준비 상태가 되거나 이용 가능한 상태가 되었을 때
- Complete
- 디플로이먼트가 관리하는 모든 레플리카세트가 업데이트 완료되었을 때
- 모든 레플리카세트가 사용 가능해졌을 때
- 예전 레플리카세트가 모두 종료되었을 때
- Faild 원인
- 쿼터 부족
- readinessProbe 진단 실패
- 컨테이너 이미지 가져오기 에러
- 권한 부족
- 제한 범위 초과
- 앱 실행 조건을 잘못 지정
- 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러. 클러스터안에 새롭게 노드가 추가 되었을 때 데몬세트가 자동으로 해당 노드에 파드를 실행시킨다.
- 따라서 보통 로그 수집기, 모니터링용 데몬 등을 사용
apiVersion: apps/v1 kind: DaemonSet metadata: name: flu-ES namespace: kube-system labels: k8s-app: flu-log spec: selector: matchLabels: name: flu-ES updateStrategy: type: RollingUpdate template: metadata: labels: name: flu-ES spec: containers: - name: flu-ES image: fluent/fluentd-kubernetes-daemonset:elasticsearch env: - name: testenv value: value resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi
- 로그 수집기는 쿠버네티스 관리용 파드나 설정에 해당하므로 kube-system 네임스페이스로 지정
- 데몬세트의 파드를 업데이트하는 방법은 spec.updateStrategy.type 필드 값을 설정하는 것.
- OnDelete: 데몬셋의 템플릿을 수정하더라도 바로 적용되지 않는다. 변경된 템플릿을 적용하려면 데몬셋으로 실행한 포드를 직접 지워야지 그 노드에 새로운 템플릿 버전의 포드가 실행.
출처: https://arisu1000.tistory.com/27834 [아리수:티스토리]- RollingUpdate: 기본 값. 템플릿을 변경하면 바로 변경사항 반영. 모든 파드를 한번에 변경하지 않고 지정한 개수만큼 이전 파드를 삭제 후 실행.
Reference