Exercise 7.5: Rolling Updates and Rollbacks using DaemonSet

  1. CP 노드에 연결된 터미널로 이동

  2. 이전 실습에서 생성된 DaemonSet의 updateStrategy 확인

    kubectl get ds ds-one -o jsonpath='{.spec.updateStrategy}' | jq
  3. 아래의 명령어로 텍스트에디터을 실행해서 생성된 DaemonSet의 Manifest를 수동으로 수정

    kubectl edit ds ds-one
  4. 45번 라인의 type을 아래와 같이 OnDelete로 변경하고 저장

    .... 
      updateStrategy:
        rollingUpdate:
          maxUnavailable: 1
        type: OnDelete
    ....
  5. 3, 4번 단계를 수행하지 않고 아래의 명령어로 대체 가능

    kubectl patch ds ds-one --patch '{"spec":{"updateStrategy":{"type":"OnDelete"}}}'
  6. DaemonSet의 updateStrategy 가 변경 됐는지 확인

    kubectl get ds ds-one -o jsonpath='{.spec.updateStrategy}' | jq
  7. DaemonSet 이미지를 변경

    kubectl set image ds ds-one nginx=nginx:1.16.1-alpine
  8. Pod의 컨테이너 이미지 변경됐는지 확인

    kubectl get pod -l system=DaemonSetOne \
    -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image
  9. Pod를 삭제 (DaemonSet으로 생성된 2개의 Pod 중에서 한개만 삭제)

    kubectl delete pod POD_NAME

    OR

    kubectl delete pod $(kubectl get pod -l system=DaemonSetOne -o=jsonpath='{.items[0].metadata.name}')
  10. 새로운 Pod가 생성됐는지 확인

    kubectl get pod -l system=DaemonSetOne
  11. Pod의 컨테이너 이미지 변경됐는지 확인

    kubectl get pod -l system=DaemonSetOne \
    -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image,TIMESTAMP:.metadata.creationTimestamp
  12. DaemonSet의 변경 기록 확인

    kubectl rollout history ds ds-one
  13. Revision 1과 Revision 2를 비교

    diff <(kubectl rollout history ds ds-one --revision=1) \
    <(kubectl rollout history ds ds-one --revision=2) -y
  14. Revision 1으로 롤백

    kubectl rollout undo ds ds-one --to-revision=1
  15. Pod의 컨테이너 이미지 변경됐는지 확인

    kubectl get pod -l system=DaemonSetOne \
    -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image,TIMESTAMP:.metadata.creationTimestamp
  16. Pod를 삭제 (위에서 새로 생성된 Pod)

    kubectl delete pod POD_NAME

    OR

    kubectl delete pod \
    $(kubectl get pod -l system=DaemonSetOne --sort-by='.metadata.creationTimestamp' -o=jsonpath='{.items[-1].metadata.name}')
  17. 새로운 Pod가 생성됐는지 확인

    kubectl get pod -l system=DaemonSetOne
  18. 새로 생성된 Pod의 컨테이너 이미지 확인

    kubectl get pod -l system=DaemonSetOne \
    -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image,TIMESTAMP:.metadata.creationTimestamp
  19. 새로운 DaemonSet 생성

    cat <<EOF | kubectl create -f -
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: ds-two
      labels:
        system: DaemonSetTwo
    spec:
      updateStrategy:
        rollingUpdate:
          maxUnavailable: 1
        type: RollingUpdate
      selector:
        matchLabels:
          system: DaemonSetTwo
      template:
        metadata:
          labels:
            system: DaemonSetTwo
        spec:
          containers:
          - name: nginx
            image: nginx:1.15.1
            ports:
            - containerPort: 80
    EOF
  20. 새로운 Pod가 생성됐는지 확인

    kubectl get pod -l system
  21. 새로 생성된 Pod의 컨테이너 이미지 확인

    kubectl get pod -l system=DaemonSetTwo \
    -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image
  22. 아래의 명령어로 텍스트에디터을 실행해서 새로 생성된 DaemonSet의 Manifest를 수동으로 수정

    kubectl edit ds ds-two --record
  23. 30번 라인의 image를 아래와 같이 nginx:1.16.1-apline 으로 변경하고 저장

    ....
          - image: nginx:1.16.1-alpine
    ....
  24. Pod가 교체됐는지 확인

    kubectl get pod -l system=DaemonSetTwo
  25. 새로 생성된 Pod의 컨테이너 이미지 확인

    kubectl get pod -l system=DaemonSetTwo \
    -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image
  26. DaemonSet의 Rollout 상태 확인

    kubectl rollout status ds ds-two
  27. DaemonSet의 변경기록 확인

    kubectl rollout history ds ds-two
  28. Revision 2 변경사항 확인

    kubectl rollout history ds ds-two --revision=2
  29. DaemonSet 삭제

    kubectl delete ds ds-one ds-two

Last updated