Exercise 7.5: Rolling Updates and Rollbacks using DaemonSet
CP 노드에 연결된 터미널로 이동
이전 실습에서 생성된 DaemonSet의 updateStrategy 확인
kubectl get ds ds-one -o jsonpath='{.spec.updateStrategy}' | jq아래의 명령어로 텍스트에디터을 실행해서 생성된 DaemonSet의 Manifest를 수동으로 수정
kubectl edit ds ds-one45번 라인의 type을 아래와 같이 OnDelete로 변경하고 저장
.... updateStrategy: rollingUpdate: maxUnavailable: 1 type: OnDelete ....3, 4번 단계를 수행하지 않고 아래의 명령어로 대체 가능
kubectl patch ds ds-one --patch '{"spec":{"updateStrategy":{"type":"OnDelete"}}}'DaemonSet의 updateStrategy 가 변경 됐는지 확인
kubectl get ds ds-one -o jsonpath='{.spec.updateStrategy}' | jqDaemonSet 이미지를 변경
kubectl set image ds ds-one nginx=nginx:1.16.1-alpinePod의 컨테이너 이미지 변경됐는지 확인
kubectl get pod -l system=DaemonSetOne \ -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].imagePod를 삭제 (DaemonSet으로 생성된 2개의 Pod 중에서 한개만 삭제)
kubectl delete pod POD_NAMEOR
kubectl delete pod $(kubectl get pod -l system=DaemonSetOne -o=jsonpath='{.items[0].metadata.name}')새로운 Pod가 생성됐는지 확인
kubectl get pod -l system=DaemonSetOnePod의 컨테이너 이미지 변경됐는지 확인
kubectl get pod -l system=DaemonSetOne \ -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image,TIMESTAMP:.metadata.creationTimestampDaemonSet의 변경 기록 확인
kubectl rollout history ds ds-oneRevision 1과 Revision 2를 비교
diff <(kubectl rollout history ds ds-one --revision=1) \ <(kubectl rollout history ds ds-one --revision=2) -yRevision 1으로 롤백
kubectl rollout undo ds ds-one --to-revision=1Pod의 컨테이너 이미지 변경됐는지 확인
kubectl get pod -l system=DaemonSetOne \ -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image,TIMESTAMP:.metadata.creationTimestampPod를 삭제 (위에서 새로 생성된 Pod)
kubectl delete pod POD_NAMEOR
kubectl delete pod \ $(kubectl get pod -l system=DaemonSetOne --sort-by='.metadata.creationTimestamp' -o=jsonpath='{.items[-1].metadata.name}')새로운 Pod가 생성됐는지 확인
kubectl get pod -l system=DaemonSetOne새로 생성된 Pod의 컨테이너 이미지 확인
kubectl get pod -l system=DaemonSetOne \ -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image,TIMESTAMP:.metadata.creationTimestamp새로운 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새로운 Pod가 생성됐는지 확인
kubectl get pod -l system새로 생성된 Pod의 컨테이너 이미지 확인
kubectl get pod -l system=DaemonSetTwo \ -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image아래의 명령어로 텍스트에디터을 실행해서 새로 생성된 DaemonSet의 Manifest를 수동으로 수정
kubectl edit ds ds-two --record30번 라인의 image를 아래와 같이 nginx:1.16.1-apline 으로 변경하고 저장
.... - image: nginx:1.16.1-alpine ....Pod가 교체됐는지 확인
kubectl get pod -l system=DaemonSetTwo새로 생성된 Pod의 컨테이너 이미지 확인
kubectl get pod -l system=DaemonSetTwo \ -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].imageDaemonSet의 Rollout 상태 확인
kubectl rollout status ds ds-twoDaemonSet의 변경기록 확인
kubectl rollout history ds ds-twoRevision 2 변경사항 확인
kubectl rollout history ds ds-two --revision=2DaemonSet 삭제
kubectl delete ds ds-one ds-two
Last updated