Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

전공공부

Rollout Update 본문

Study/K8S

Rollout Update

monitor 2023. 3. 27. 23:59
Deployment Strategy

- K8S의 배포 전략은 구 버전의 Pod 하나를 제거하고 새로운 버전의 Pod를 하나씩 생성하므로써 무중단 배포를 가능하게 한다.

 

- 기본 배포 전략

잠깐 강의 중에 나온 것

기존의 pod 이미지 수정시 pod-defination.yaml을 수정하여 kubectl apply -f <pod설정된 yaml 파일> 을 실행하는 방법 말고 kubectl set image <kind>/<pod-name> \ nginx=nginx:1.9.1 이런식으로 새로운 배포가 가능하다고 한다.

하지만, 위와 같이 변경하면 pod-defination.yaml 파일이 올라간 Pod와 달라져서 추후 확장성에 문제가 있을 듯 하다.

 

Strategy - Recreate vs Rolling Update

- Recreate 전략의 ReplicaSet의 경우 한 번에 다시 배포된다.

 

- Rolling Update의 경우 기존의 Pod ReplicaSet은 서서히 축소되고 다시 올라온 버전의 ReplicaSet이 서서히 올라오는 차이가 존재합니다. 그래서 배포를 진행하고 나면 ReplicaSet의 0 Pod의 것이 존재함

 

추후, Rollback을 하게 된다면 기존의 ReplicaSet이 다시 사용 될 수 있음

 

kubectl rollout undo deployment/myapp-deployment 실행 시 기존의 Rollout된 데이터를 다시 deprecated 하고 rollback을 진행하면서 전에 사용되었던 ReplicaSet이 다시 올라감

 

--revision , --record , rollback

$ kubectl create deployment nginx --image=nginx:1.16 #실행

deployment.apps/nginx created



$ kubectl rollout status deployment nginx #rollout 상태 확인

Waiting for deployment "nginx" rollout to finish: 0 of 1 updated replicas are available... #replicaSet으로 하나가 배포되는중 확인

deployment "nginx" successfully rolled out



$ kubectl rollout history deployment nginx #rollout history 확인

deployment.extensions/nginx

REVISION CHANGE-CAUSE

1     <none>

 

--revision flag 활용

 

$ kubectl rollout history deployment nginx --revision=1 #rollout 시 history 내역을 남길 수 있습니다.

deployment.extensions/nginx with revision #1

 

Pod Template:

 Labels:    app=nginx    pod-template-hash=6454457cdb

 Containers:  nginx:  Image:   nginx:1.16

  Port:    <none>

  Host Port: <none>

  Environment:    <none>

  Mounts:   <none>

 Volumes:   <none>

 

--record flag 활용

 

change 된 이유를 알릴 수 있습니다.

 

$ kubectl set image deployment nginx nginx=nginx:1.17 --record #해당 명령어로 image 업데이트

deployment.extensions/nginx image updated



$ kubectl rollout history deployment nginx

deployment.extensions/nginx



REVISION CHANGE-CAUSE

1     <none>

2     kubectl set image deployment nginx nginx=nginx:1.17 --record=true

 

 

nginx:1.17 -> nginx latest 버전으로 재배포

 

$ kubectl edit deployments. nginx --record

deployment.extensions/nginx edited

 

$ kubectl rollout history deployment nginx #rollout history 확인

REVISION CHANGE-CAUSE

1     <none>

2     kubectl set image deployment nginx nginx=nginx:1.17 --record=true

3     kubectl edit deployments. nginx --record=true


$ kubectl rollout history deployment nginx --revision=3

deployment.extensions/nginx with revision #3

 

Pod Template: Labels:    app=nginx

    pod-template-hash=df6487dc Annotations: kubernetes.io/change-cause: kubectl edit deployments. nginx --record=true

 

 Containers:

  nginx:

  Image:   nginx:latest

  Port:    <none>

  Host Port: <none>

  Environment:    <none>

  Mounts:   <none>

 Volumes:   <none>

 

 

 

 

Undo Change - Rollback

 

$ kubectl rollout history deployment nginx

deployment.apps/nginx

REVISION CHANGE-CAUSE

1 <none>

3 kubectl edit deployments.apps nginx --record=true

4 kubectl set image deployment nginx nginx=nginx:1.17 --record=true

 
 

$ kubectl rollout history deployment nginx --revision=3 #rollout history 3번으로 rollback 하였다.

deployment.apps/nginx with revision #3

Pod Template:

Labels: app=nginx

pod-template-hash=787f54657b

Annotations: kubernetes.io/change-cause: kubectl edit deployments.apps nginx --record=true

Containers:

nginx:

Image: nginx:latest

Port: <none>

Host Port: <none>

Environment: <none>

Mounts: <none>

Volumes:

 

$ kubectl describe deployments. nginx | grep -i image:

Image: nginx:1.17

 

 

$ kubectl rollout undo deployment nginx --to-revision=1# 이런식으로도 rollback이 가능하다.

#처음 배포했던 history 1로 간다.

 

바로 이전 버전으로 rollback하기

 

kubectl rollout undo deployment/<deployment name>

'Study > K8S' 카테고리의 다른 글

Services  (0) 2023.04.01
Jobs & Cronjob  (1) 2023.03.28
Labels, Selectors  (0) 2023.03.27
Logging  (0) 2023.03.26
Readiness & Liveness Probe  (0) 2023.03.26