반응형
- Deployment의 역할
- Replicaset을 컨트롤해서 Pod수를 조절
- 목적이 Rolling Update를 위해 만들어짐 & Rolling Back
- Rolling Update란?
- Pod 인스턴스를 점진적으로 새로운 것으로 업데이트하여 Deployment 업데이트가 서비스중단 없이 이루어질 수 있도록 해준다.
- Deployment 정의
Replicaset definition (정의) | Deployment definition |
apiVersion: apps/v1 kind: ReplicaSet metadata: name: rs-nginx spec: replicas: 3 selector: matchLabels: app: webui template: metadata: name: nginx-pod labels: app: webui spec: containers: - name: nginx-container image: nginx:1.14 |
apiVersion: apps/v1 kind: Deployment metadata: name: deploy-nginx spec: replicas: 3 selector: matchLabels: app: webui template: metadata: name: nginx-pod labels: app: webui spec: containers: - name: nginx-container image: nginx:1.14 |
- Deployment Rolling Update & Rolling Back
# Rolling Update
kubectl set image deployment [deploy_name] [container_name]=[new_version_image]
# Rolling Back
kubectl rollout history deployment [deploy_name]
kubectl rollout undo deployment [deploy_name]
# deployment 실행
kubectl create -f deployment-exam1.yaml --record
# 실행 확인
kubectl get deployment,rs,pod,svc
# application rollingupdate
kubectl set image deploy app-deploy web=nginx:1.15 --record
kubectl set image deploy app-deploy web=nginx:1.16 --record
kubectl set image deploy app-deploy web=nginx:1.17 --record
# 업데이트 일시정지
kubectl rollout pasue deploy app-deploy
# 업데이트 재시작
kubectl rollout resume deploy app-deploy
# 업데이트 상태확인
kubectl rollout status deploy app-deploy
# 업데이트 히스토리 확인
kubectl rollout history deployment app-deploy
# 업데이트 롤백 커맨드 (history 기준 한단계 전)
kubectl rollout undo deployment app-deploy
# --to-revision 옵션 = revision값 만큼 history 버전으로 롤백
kubectl rollout undo deployment app-deploy --to-revision=2
Rolling Update중 새로운 버전의 Pod 생성갯수와 Terminating 갯수 조절 |
… rollingUpdate: maxSurge: 25% → replicas 갯수의 25% 만큼 업데이트된 Pod 생성 ex) replicas = 3 —> 50% = 1.5 (반올림한다) == 기존3 + 반올림 2 = 5개 (기존 3, 업데이트 버전Pod 2) replicas = 3 —> 25% = 0.75 (반올림한다) == 기존3 + 반올림 1 = 4개 (기존 3, 업데이트 버전Pod 1) maxUnavailable: 25% → 기존 운영중인 Pod를 제거하는 수를 조절할 수 있다. type: RollingUpdate … |
간단히 yaml 파일로 history 남기는 방법 | history 내용 |
… annotations: kubernetes.io/change-cause: version 1.15 … template: metadata: labels: app: webui spec: containers: - name: web image: nginx:1.20 ports: - containerPort: 80 → annotations 부분과 이미지 버전을 변경할 버전으로 바꾼후 apply 하면 history에도 자동으로 등록된다. |
# kubectl rollout history deployment deploy-nginx deployment.apps/deploy-nginx REVISION CHANGE-CAUSE 2 version 1.15 3 version 1.14 4 version 1.20 |
반응형
'K8S' 카테고리의 다른 글
Statefulset (0) | 2025.02.07 |
---|---|
DaemonSet + RollingUpdate (0) | 2025.02.07 |
ReplicaSet (ReplicationController와 차이점) (0) | 2025.02.07 |
ReplicationController란? (0) | 2025.02.07 |
Pod 환경변수 설정과 실행 패턴 (0) | 2025.02.07 |