[쿠버네티스 기초다지기] 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>

그외 형태의 잡

  • 스케줄링된 잡
    • 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