본문 바로가기
K8S

Rolling Update를 위한 Deployment

by ohrohi 2025. 2. 7.
반응형
  • 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