전공공부
Rollout Update 본문
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 |