Kubernetes 쿠버네티스 - Deployment(update, rollback)

salgu·2023년 3월 6일
0

kubernetes

목록 보기
7/16
post-thumbnail

Deployment 란


Deployment는 Pod 배포 자동화를 위한 오브젝트(ReplicaSet + 배포 전략)
  • 새로운 Pod를 Roll Out/Roll Back할 때 ReplicaSet 생성을 대신해줌
  • 다양한 배포 전략을 제공하고 이전 Pod에서 새로운 Pod로 전환 속도를 제어할 수 있음



배포 전략


Recreate

이전 Pod를 모두 종료하고 새로운 Pod의 replicas만큼 생성

  • 새로운 버전을 배포하기 전에 이전 버전이 즉시 종료됨

RollingUpdate

새로운 Pod 생성과 이전 Pod 종료가 동시에 일어나는 방식

  • Down time 최소화 (무중단 배포)



RollingUpdate 속도 제어 옵션


maxUnavailable

RollingUpdate를 수행하는 동안 유지하고자 하는 최소 Pod의 비율을 지정할 수 있음

replicas: 10, maxUnvailable: 30%

  • 위의 상황이라면 이전 버전의 Pod의 replicas 수를 최대 30%까지 즉시 Scale Down 할 수 있음, 즉 7개를 즉시 종료할 수 있음
  • 새로운 버전의 Pod 생성과 이전 버전의 Pod 종료를 동시에 진행하면서 replicas의 수가 70%가 Running 상태로 유지함

maxSurge

RollingUpdate를 수행하는 동안 허용할 수 있는 최대 Pod의 비율을 지정할 수 있음

replicas: 10, maxSurge: 30%

  • 위의 상황이라면 새로운 버전의 Pod의 replicas 수를 최대 30%까지 즉시 Scale Up 할 수 있음, 즉 3개를 즉시 생성할 수 있음
  • 새로운 버전의 Pod 생성과 이전 버전의 Pod를 종료하면서 총 Pod의 수가 replicas 수의 130%를 넘지 않도록 유지함

Manifest

spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 2



배포 Rolling update


이미지 바꾸는 명령어

kubectl set image deployment {Deployment 명} {업데이트할 container 명}={업데이트할 Image}

Deployment의 Pod Template 이미지를 변경하는 방법

  • Deployment가 새로운 ReplicaSet을 생성함

실제 동작 과정

replicas가 3인 상태이고 maxSurge: 1, maxUnavailable: 2 버전 업을 실행


1. 세개의 api Pod가 Running


2. 2개가 Terminating이 되고 3개의 새로운 Pod가 생성이 됨


3. 기존 버전의 api 1개 + 새로운 버전 api 3개가 Running이 됨
(replicas: 3 + maxSurge: 1)


4. 기존 버전의 api 1개 남아있던것 마저 종료됨


5. 중단없이 api Pod 3개가 교체됨



배포 Roll-Back


Revision을 이용해 Deployment의 Rollback이 가능함

방법

1. Deployment Roll-out 기록 확인

kubectl rollout history deployment/{Deployment 명}

2. 해당 revision의 세부 정보 확인

kubectl rollout history deployment/{Deployment 명} --revision={조회할 revision}

3. Roll-Back

kubectl rollout undo deployment/{Deployment 명}

직전 버전으로 롤백

kubectl rollout undo deployment/{Deployment 명} --to-revision={revision}

특정 버전으로 롤백 하려면 --to-revision 옵션을 이용해 원하는 버전을 명시해줌.

kubectl annotate deployment/{Deployment 명} kubernetes.io/change-cause="some cause"

배포 주석 남기는 방법





reference:

profile
https://github.com/leeeesanggyu, leeeesanggyu@gmail.com

0개의 댓글