배포할 때 서비스를 유지하면서 추가 기능이나 library 버전업 등 배포가 필요할 때가 있다.
기존 3개의 nginx 서버가 1.14 버전으로 실행되고 있고, 1.15 버전으로 서비스를 유지하면서 업데이트 하고 싶다면 다음과 같이 구현이 될것이다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deploy
spec:
selector:
matchLabels:
app: webui
replicas: 3
template:
metadata:
labels:
app: webui
spec:
containers:
- image: nginx:1.14
name: web
ports:
- containerPort: 80
# 위의 pod 실행
kubectl create -f char6_app-deploy.yaml
# nginx 버전 업데이트
kubectl set image deployment app-deploy web=nginx:1.15
deployment.apps/app-deploy image updated
# 업데이트 후 실행결과
kubectl get pods
NAME READY STATUS RESTARTS AGE
app-deploy-594ccdd789-h86jn 0/1 ContainerCreating 0 3s
app-deploy-5f69db7d6b-24sng 1/1 Running 0 41s
app-deploy-5f69db7d6b-9tdww 1/1 Running 0 41s
app-deploy-5f69db7d6b-nq6hl 1/1 Running 0 41s
# 업데이트 완료시
kubectl get pods
NAME READY STATUS RESTARTS AGE
app-deploy-594ccdd789-4wmqc 1/1 Running 0 12s
app-deploy-594ccdd789-gqm56 1/1 Running 0 5s
app-deploy-594ccdd789-h86jn 1/1 Running 0 20s
# 변경 히스토리 보기
# 기존 --record 옵션을 통한 CHANGE-CAUSE 기록이 anotation으로 변경되었음
# 아래 1.15 버전 yaml 의 anotation을 작성하여 버전관리를 해야한다.
kubectl rollout history deployment app-deploy
deployment.apps/app-deploy
REVISION CHANGE-CAUSE
1 <none>
2 <none>
# 구현된 deployment 삭제
# deployment > replicaSet > pod 로써 deployment가 최상위계층
# deployment 삭제시 아래 모든 것들이 삭제됨
kubectl delete deployments.apps app-deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx
annotations:
kubernetes.io/change-cause: version 1.15
spec:
progressDeadlineSeconds: 600
revisionHistoryLimit: 10
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
replicas: 3
selector:
matchLabels:
app: webui
template:
metadata:
labels:
app: webui
spec:
containers:
- name: web
image: nginx:1.15
ports:
- containerPort: 80