728x90
Rolling Update : 점진적 업데이트
Kubernetes Deployment는 기본적으로 Rolling Update 전략을 사용하여 실행 중인 애플리케이션을 서비스 중단 없이 업데이트합니다.
Rolling Update 특징
- 기존 Pod를 하나씩 대체하며 새로운 Pod를 배포합니다.
- 애플리케이션의 가용성을 유지하며 트래픽을 처리할 수 있습니다.
- 업데이트 중 에러가 발생하면 업데이트를 중단하고 이전 상태로 복구할 수 있습니다.
Rolling Update 적용
- yaml 파일을 직접 수정하여 변경하는 방법
- 기존 yaml 파일 정보 확인
# vi nginx-update.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-yaml-test
labels:
app: nginx
annotations:
kubernetes.io/change-cause: v.1.15
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15
ports:
- containerPort: 80
- 1.15 버전에서 1.14 버전으로 버전 변경하기 + 적용하기
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-yaml-test
labels:
app: nginx
annotations:
kubernetes.io/change-cause: v.1.14
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
# k apply -f nginx-update.yaml
deployment.apps/nginx-yaml-test configured
- 파드 정상적으로 실행되는 것 확인
# k get po
nginx-yaml-test-56496f7bdd-7gj9z 1/1 Running 0 57s
nginx-yaml-test-56496f7bdd-mlclz 1/1 Running 0 57s
nginx-yaml-test-56496f7bdd-qbjnh 1/1 Running 0 57s
- 파드 정보 확인(describe)
# k describe po nginx-yaml-test-847cd7fd69-nhxfj
```
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 60s default-scheduler Successfully assigned default/nginx-yaml-test-847cd7fd69-nhxfj to kubenode214
Normal Pulled 59s kubelet Container image "nginx:1.15" already present on machine
Normal Created 59s kubelet Created container nginx
Normal Started 59s kubelet Started container nginx
Rolling Update 적용
- 기존 Deployment 생성: 아래 YAML 파일로 초기 Deployment를 생성했습니다.
# vi deployt-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3 # Pod 개수
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14 # 초기 이미지
ports:
- containerPort: 80
# kubectl apply -f deploy-nginx.yaml
# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-847cd7fd69-9mnn6 1/1 Running 0 31s
nginx-deployment-847cd7fd69-mc5fp 1/1 Running 0 31s
nginx-deployment-847cd7fd69-pr4fn 1/1 Running 0 31s
- 이미지 업데이트: 다음 명령으로 NGINX 버전을 1.15로 업데이트했습니다.
# kubectl set image deployment nginx-deployment nginx=nginx:1.15
- Rolling Update 확인 : 업데이트 진행 중 새로운 Pod가 생성되고 기존 Pod가 하나씩 삭제되는 과정을 관찰했습니다.
# kubectl get pods --watch
NAME READY STATUS RESTARTS AGE
deploy-nginx-554856776f-4nsm9 1/1 Running 0 24m
deploy-nginx-554856776f-d4k4w 1/1 Running 0 26m
deploy-nginx-554856776f-frbh4 1/1 Running 0 27m
deploy-nginx-554856776f-pv29v 1/1 Running 0 24m
nginx-deployment-847cd7fd69-9mnn6 1/1 Running 0 6m58s
nginx-deployment-847cd7fd69-mc5fp 1/1 Running 0 6m58s
nginx-deployment-847cd7fd69-pr4fn 1/1 Running 0 6m58s
webserver 1/1 Running 0 4h2m
Rollback : 업데이트 복구
Rolling Update 중 문제가 발생하거나 이전 버전으로 복구가 필요할 경우 Kubernetes의 Rollback 기능을 사용할 수 있습니다.
- 업데이트 내역 확인 : Deployment의 변경 이력을 확인합니다.
# kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
1 v.1.15
2 v.1.15
- Rollback 실행 : 이전 버전으로 복구합니다.
# kubectl rollout undo deployment nginx-deployment
deployment.apps/nginx-deployment rolled back
- Rollback 확인 : 이전 버전으로 복구되었는지 확인합니다.
# kubectl get pods
Rollback 옵션 : 특정 Revision으로 롤백하기
- 명령어 문법
- deployment_name : 롤백하려는 Deployment 이름
- revision_number : 롤백하고자하는 특정 Revision 번호
# kubectl rollout undo deployment <deployment_name> --to-revision=<revision_number>
- Deployment 변경 이력 확인
# kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
2 v.1.15
3 v.1.15
- 특정 Revision으로 롤백
# kubectl rollout undo deployment nginx-deployment --to-revision=2
deployment.apps/nginx-deployment rolled back
- 롤백 결과 확인(롤백 후 Deployment와 관련된 Pod 상태를 확인)
# kubectl get pods
NAME READY STATUS RESTARTS AGE
deploy-nginx-554856776f-4nsm9 1/1 Running 0 75m
deploy-nginx-554856776f-d4k4w 1/1 Running 0 77m
deploy-nginx-554856776f-frbh4 1/1 Running 0 78m
deploy-nginx-554856776f-pv29v 1/1 Running 0 75m
nginx-deployment-847cd7fd69-pr4fn 1/1 Running 0 58m
nginx-deployment-854bc88786-nfkq2 0/1 ContainerCreating 0 17s
nginx-deployment-854bc88786-r64pj 1/1 Running 0 36s
nginx-deployment-854bc88786-s524d 1/1 Running 0 37s
webserver 1/1 Running 0 4h53m
- Deployment의 현재 설정이 롤백된 Revision의 내용과 일치하는지 확인
# kubectl describe deployment nginx-deployment
```
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 58m deployment-controller Scaled up replica set nginx-deployment-847cd7fd69 to 3
Normal ScalingReplicaSet 7m43s deployment-controller Scaled up replica set nginx-deployment-854bc88786 to 1
Normal ScalingReplicaSet 7m26s deployment-controller Scaled down replica set nginx-deployment-854bc88786 to 0 from 1
Normal ScalingReplicaSet 77s deployment-controller Scaled up replica set nginx-deployment-854bc88786 to 1 from 0
Normal ScalingReplicaSet 76s deployment-controller Scaled down replica set nginx-deployment-847cd7fd69 to 2 from 3
Normal ScalingReplicaSet 76s deployment-controller Scaled up replica set nginx-deployment-854bc88786 to 2 from 1
Normal ScalingReplicaSet 57s deployment-controller Scaled down replica set nginx-deployment-847cd7fd69 to 1 from 2
Normal ScalingReplicaSet 57s deployment-controller Scaled up replica set nginx-deployment-854bc88786 to 3 from 2
Normal ScalingReplicaSet 38s deployment-controller Scaled down replica set nginx-deployment-847cd7fd69 to 0 from 1
- 변경된 이력 확인
# kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
3 v.1.15
4 v.1.15
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] CoreDNS: Kubernetes 네트워킹의 핵심을 파헤치다 (0) | 2025.02.08 |
---|---|
[Kubernetes] 쿠버네티스 서비스 및 로드 밸런싱 이해 (1) | 2025.02.07 |
[Kubernetes] Kubernetes Pod 및 Docker Container 최소 권한 관리 (0) | 2025.02.05 |
[Kubernetes] Kubernetes Deployment replicas 설정 이해 및 실습 (0) | 2025.02.04 |
[Kubernetes] 로드밸런싱을 위해 Control-plane 증설 이후 작업 (0) | 2025.02.03 |