[Object] Deployment - strategy

메모장·2024년 9월 4일

kubernetes

목록 보기
4/6

deployment 오브젝트 내 template 안의 내용이 조금이라도 변경 사항이 있으면 업데이트 진행

1. Recreate

strategy:
  type: Recreate
  • 기존 pod 전부 삭제하는 동시에 새로운 pod를 생성
  • 새 pod의 기동 시간에 따라 서비스 중단 시간이 발생함. (기존 pod 삭제 -> 새 pod 기동 완료까지)

2. RollingUpdate

strategy:
  type: RollingUpdate
  rollingUpdate: 
    maxUnavailable: 50%
    maxSurge: 50%
  • 새 pod를 50% 갯수 생성, 기동 후 기존 pod 50% 삭제. 그리고 다시 나머지 50% 새 pod를 생성, 기동 후 나머지 50% pod 삭제.
  • 그만큼 노드의 여유 자원이 필요
    • maxUnavailable: 업데이트 중에 사용 할 수 없는 최대 pod 수
    • maxSurge: 업데이트 중에 생성할 수 있는 최대 추가 pod 수
    • 위 두 값은 % 혹은 pod 갯수로 지정할 수 있음 (maxUnavailable: 1)

3. RollingUpdate 예시

replicaset: 2

maxUnavailable: 0%
maxSurge: 100%
  • pod 2개가 동시에 생성
  • 새로운 pod 1개가 기동이 완료되면 기존 pod 하나는 삭제
  • 또 다른 새 pod가 기동이 완료되면 나머지 기존 pod 하나 삭제
  • 즉, 서비스 상태인 pod는 100%인 2개로 유지

4.Rollback

deployment의 기존 이미지를 새로운 이미지로 변경

kubectl set image deployment.v1.app/nginx-deploy nginx=nginx1.16.1

이미지 변경 확인

kubectl describe deploy nginx-deploy

Name:                   nginx-deploy
Namespace:              default
CreationTimestamp:      Tue, 13 Aug 2024 10:19:28 +0900
Labels:                 app=nginx
Annotations:            deployment.kubernetes.io/revision: 2
Selector:               app=nginx
Replicas:               2 desired | 2 updated | 3 total | 2 available | 1 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:         nginx:1.16.1
    Port:          80/TCP
    Host Port:     0/TCP
    Environment:   <none>
    Mounts:        <none>
  Volumes:         <none>
  Node-Selectors:  <none>
  Tolerations:     <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    ReplicaSetUpdated
OldReplicaSets:  nginx-deploy-7f89d7585d (1/1 replicas created)
NewReplicaSet:   nginx-deploy-595dff4fdb (2/2 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  11m   deployment-controller  Scaled up replica set nginx-deploy-7f89d7585d to 2
  Normal  ScalingReplicaSet  11s   deployment-controller  Scaled up replica set nginx-deploy-595dff4fdb to 1
  Normal  ScalingReplicaSet  0s    deployment-controller  Scaled down replica set nginx-deploy-7f89d7585d to 1 from 2
  Normal  ScalingReplicaSet  0s    deployment-controller  Scaled up replica set nginx-deploy-595dff4fdb to 2 from 1

roll out 상태 확인

$ kubectl rollout status deployment/nginx-deploy

deployment "nginx-deploy" successfully rolled out

특정 버전으로 Roll Back

배포된 버전 확인

$ kubectl rollout history deployment/nginx-deploy

deployment.apps/nginx-deploy
REVISION  CHANGE-CAUSE
1         <none>
3         <none>
4         <none>

REVISION 3으로 RollBack

$ kubectl rollout undo deployment/nginx-deploy --to-revision=3

REVISION 3이 nginx 이미지 1.999 이기 때문에 배포 실패

$ kubectl rollout status deployment/nginx-deploy

Waiting for deployment "nginx-deploy" rollout to finish: 1 out of 2 new replicas have been updated...

다시 RollBack

$ kubectl rollout undo deployment/nginx-deploy

deployment.apps/nginx-deploy rolled back
$ kubectl rollout status deployment/nginx-deploy

deployment "nginx-deploy" successfully rolled out

배포 주석 추가 (현재 REVISION에서만 추가 가능)

kubectl annotate deployment/nginx-deploy kubernetes.io/change-cause="Updated image to nginx:1.16.1"
$ kubectl rollout history deployment/nginx-deploy

deployment.apps/nginx-deploy
REVISION  CHANGE-CAUSE
1         <none>
5         <none>
6         Updated image to nginx:1.16.1
profile
어수선한 메모장

0개의 댓글