[7] Rolling Update & Rollback
❓Rolling Update
- Create a deployment as follows:
- 작업 클러스터: k8s
- TASK:
- name: nginx-app
- Using container nginx with version 1.11.10-alpine
- The deployment should contain 3 replicas
- Next, deploy the application with new version 1.11.13-alpine, by performing a rolling update
- Finally, rollback that update to the previous version 1.11.10-alpine
Reference
docs에서 Deployment검색 Updating a Deployment 부분 확인
실습
# 클러스터 전환
[user@console ~]$ kubectl config use-context k8s
# 조건에 맞춰 deployment 생성
# dry-run 옵션 사용
[user@console ~]$ kubectl create deployment nginx-app --image=nginx:1.11.10-alpine --replicas=3
# 만들어진 deployment 확인
[user@console ~]$ kubectl get deployment nginx-app
NAME READY
nginx-app 3/3
# nginx-app로 시작하는 pod확인
[user@console ~]$ kubectl get pods |grep nginx-app
# POD안에 있는 container 버전 확인
[user@console ~]$ kubectl describe pod {pod 이름}
container 이미지 버전 nginx:1.11.10-alpine 인거 확인
# docs 참고해서 update
# 여기서 nginx는 container이름
# --record 옵션을 쓰면 히스토리 파악 가능
[user@console ~]$ kubectl set image deployment nginx-app nginx=nginx:1.11.13-alpine --record
# update가 되고있는지 과정 확인
[user@console ~]$ kubectl rollout status deployment/nginx-app
# update가 됬는지 확인
[user@console ~]$ kubectl get pods |grep nginx-app
# 위의 결과에서 나온 하나의 pod 확인
# 버전 업데이트 된 것 확인하기
[user@console ~]$ kubectl describe pod {pod이름}
# rollback 하기
# 바로 전 단계로 롤백된다
[user@console ~]$ kubectl rollout undo deployment/nginx-app
# rollback 된 것 확인
[user@console ~]$ kubectl get pods | grep nginx-app
[user@console ~]$ kubectl describe pod {pod이름}
Update가 되는 과정
update를 실행하면 기존에 있는 Replicaset에서 새로운 Replicaset이 생성되고 그 새로 생성된 곳에 업데이트 된 버전의 pod가 생성된다.
업데이트 된 버전의 pod가 하나씩 생겨날때마다 기존 버전의 pod가 하나씩 삭제된다.
업데이트가 모두 완료된 후에 get pods명령어를 확인해보면 다른 해쉬값을 가지는 replicaset이 생성된 것을 확인할 수 있다.