[쿠버네티스 기초다지기] 05장 - 디플로이먼트, 잡, 데몬셋
05장 디플로이먼트, 잡, 데몬셋
디플로이먼트
- 롤링 업데이트와 복제 컨트롤러의 기본 매커니즘 개선판
- 애플리케이션 배포를 일시중지하고 재개 할 수 있음
- 과거 배포 이력 유지 및 이전 버전으로 쉽게 롤백 가능
- 복제 컨트롤러와 차이점
- 디플로이먼트 오브젝트를 변경하고 업데이트해서 쿠버네티스가 파드와 레플리카를 업데이트하도록 관리 할 수 있음
- create 커맨드에 –record 플래그 붙이면 디플로이먼트 생성이 롤아웃 히스토리에 기록
kubectl create -f node-js-deploy.yaml --record
스케일링
- scale 커맨드는 복제 컨트롤러와 동일한 방식으로 동작
kubectl scale deployment node-js-deploy --replicas 3
업데이트와 롤아웃
- kubectl set 커맨드로 업데이트
- 수동으로 재배포할 필요없이 디플로이먼트 설정 변경
- 현재 이미지만 업데이트 가능
kubectl set image deployment/node-js-deploy node-js-deploy=jonbaier/pod-scaling:0.2
- 롤아웃
kubectl rollout status deployment/node-js-deploy
히스토리와 롤백
- 디플로이먼트 히스토리
- 디플로이먼트 업데이트 후 히스토리 확인
kubectl set image deployment/node-js-deploy node-js-deploy=jonbaier/pod-scaling:0.3
kubectl rollout history deployment/node-js-deploy
- rollout pause
- 롤아웃이 진행 중인 경우 커맨드 일시중지
- rollout resume
- 롤아웃 계속 할 준비가 되면 실행
- 롤아웃 실패 시 롤백
- 특정 버전으로 되돌리기 : –to-revision 플래그 지정
-- 없는 이미지로 set
kubectl set image deployment/node-js-deploy node-js-deploy=jonbaier/pod-scaling:42.0
-- 상태 확인. 없는 이미지이므로 대기상태.. Ctrl + C로 상태 중단
kubectl rollout status deployment/node-js-deploy
-- 롤아웃 취소
kubectl rollout undo deployment/node-js-deploy
오토스케일링
- 수평 파드 오토스케일러(HPA)
- 디플로이먼트와 완벽하게 통합 됨
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: node-js-deploy
spec:
minReplicas: 3
maxReplicas: 6
scaleTargetRef:
apiVersion: v1
kind: Deployment
name: node-js-deploy
targetCPUUtilizationPercentage: 10
- 10% 이상 부하가 올라가면 파드 수가 최대 6개까지 올라감
잡
- 단시간 수행, 한 번만 수행되는 태스크, 정기적으로 스케줄링된 태스크
- 1 ~ n개의 파드를 생성하고 모든 파드가 성공적인 종료와 함께 완료 되도록 보장
- restartPolicy
- 재시도 하지 않음 - restartPolicy : Never
- 파드가 성공적으로 완료되지 않고 끝났을 때 재시도 - restartPolicy : OnFailur
apiVersion: batch/v1
kind: Job
metadata:
name: long-task
spec:
template:
metadata:
name: long-task
spec:
containers:
- name: long-task
image: docker/whalesay
command: ["cowsay", "Finishing that task in a jiffy"]
restartPolicy: OnFailure
- 완료 된 pod 보기 : -a나 –show-all 플래그 사용
- kubectl get pods -a
- log 보기
- kubectl logs <파드id>파드id>
그외 형태의 잡
- 스케줄링된 잡
- CronJob
- 매주 토요일 오전 10시 15분에 수행
apiVersion: batch/v2alpha1
kind: CronJob
metadata:
name: long-task-cron
spec:
schedule: "15 10 * * 6"
jobTemplate:
spec:
template:
spec:
containers:
- name: long-task-cron
image: docker/whalesay
command: ["cowsay", "Developers! Developers! Developers! \n\n Saturday task complete!"]
restartPolicy: OnFailure
데몬셋
- 클러스터의 모든 노드나 노드에 정의된 서브셋에 실행할 파드를 정의
- 모니터링 및 로깅 에이전트, 보안 에이전트 및 파일시스템 데몬과 같이 여러 프로덕션 관련 작업에 유용
- 데몬셋 조회
kubectl get ds --namespace=kube-system
노드 선택
- nodeSelector
- 특정 레이블과 메타데이터를 찾아 파드가 실행될 노드를 제한할 수 있도록 해준다.
- 키/값 쌍을 각 노드의 레이블과 비교
- 노드에 닉네임 레이블 추가
kubectl label nodes <노드 이름> nodenickname=trusty-steve
- nodeSelector 추가 예제
apiVersion: batch/v1
kind: Job
metadata:
name: long-task-ns
spec:
template:
metadata:
name: long-task-ns
spec:
containers:
- name: long-task-ns
image: docker/whalesay
command: ["cowsay", "Finishing that task in a jiffy"]
restartPolicy: OnFailure
nodeSelector:
nodenickname: trusty-steve
- 잡 이름으로 파드 조회
kubectl get pods -a -l job-name=long-task-ns