이전 Pod를 모두 종료하고 새로운 Pod의 replicas만큼 생성
새로운 Pod 생성과 이전 Pod 종료가 동시에 일어나는 방식
RollingUpdate를 수행하는 동안 유지하고자 하는 최소 Pod의 비율을 지정할 수 있음
replicas: 10, maxUnvailable: 30%
RollingUpdate를 수행하는 동안 허용할 수 있는 최대 Pod의 비율을 지정할 수 있음
replicas: 10, maxSurge: 30%
spec:
replicas: 3
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 2
kubectl set image deployment {Deployment 명} {업데이트할 container 명}={업데이트할 Image}
Deployment의 Pod Template 이미지를 변경하는 방법
replicas가 3인 상태이고 maxSurge: 1, maxUnavailable: 2 버전 업을 실행
1. 세개의 api Pod가 Running
2. 2개가 Terminating이 되고 3개의 새로운 Pod가 생성이 됨
3. 기존 버전의 api 1개 + 새로운 버전 api 3개가 Running이 됨
(replicas: 3 + maxSurge: 1)
4. 기존 버전의 api 1개 남아있던것 마저 종료됨
5. 중단없이 api Pod 3개가 교체됨
Revision을 이용해 Deployment의 Rollback이 가능함
kubectl rollout history deployment/{Deployment 명}
kubectl rollout history deployment/{Deployment 명} --revision={조회할 revision}
kubectl rollout undo deployment/{Deployment 명}
직전 버전으로 롤백
kubectl rollout undo deployment/{Deployment 명} --to-revision={revision}
특정 버전으로 롤백 하려면 --to-revision 옵션을 이용해 원하는 버전을 명시해줌.
kubectl annotate deployment/{Deployment 명} kubernetes.io/change-cause="some cause"
배포 주석 남기는 방법
reference:
- https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/
- https://auth0.com/blog/deployment-strategies-in-kubernetes/
- Kubernetes와 Docker로 한 번에 끝내는 컨테이너 기반 MSA