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-one
45번 라인의 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}' | jq
DaemonSet 이미지를 변경
kubectl set image ds ds-one nginx=nginx:1.16.1-alpine
Pod의 컨테이너 이미지 변경됐는지 확인
kubectl get pod -l system=DaemonSetOne \ -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image
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}')
새로운 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의 변경 기록 확인
kubectl rollout history ds ds-one
Revision 1과 Revision 2를 비교
diff <(kubectl rollout history ds ds-one --revision=1) \ <(kubectl rollout history ds ds-one --revision=2) -y
Revision 1으로 롤백
kubectl rollout undo ds ds-one --to-revision=1
Pod의 컨테이너 이미지 변경됐는지 확인
kubectl get pod -l system=DaemonSetOne \ -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image,TIMESTAMP:.metadata.creationTimestamp
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}')
새로운 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 --record
30번 라인의 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[*].image
DaemonSet의 Rollout 상태 확인
kubectl rollout status ds ds-two
DaemonSet의 변경기록 확인
kubectl rollout history ds ds-two
Revision 2 변경사항 확인
kubectl rollout history ds ds-two --revision=2
DaemonSet 삭제
kubectl delete ds ds-one ds-two
Last updated