[k8s] Deployment 배포 전략, update, rollback

Woong·6일 전
0

Docker, k8s

목록 보기
9/9

배포 전략

  • Recreate: 기존 pod 들을 모두 종료하고 새로운 버전의 pod 을 생성
    • -> 애플리케이션에 downtime 이 발생한다
  • Rolling Update: pod 를 순차적으로 내리고 올리는 것을 반복 (default)
    • downtime 이 발생하지 않는다.

Rolling Update

  • pod 들을 부분적으로 내리고 새 버전 pod 를 올린다
  • strategy: RollingUpdate
  • 동시에 업데이트되는 Pod의 수나 비율을 maxUnavailable, maxSurge 로 제어
    • maxSurge: replica 수 대비 추가될 수 있는 Pod 수 or 비율 (기본값 25%)
    • maxUnavailagle: replica 수 대비 종료될 수 있는 구 버전 pod 수 or 비율. default 25%
      • ex) maxUnavailable: 0 이면 새 버전 pod 가 모두 올라온 후 구버전 pod 가 종료
      • maxSurge 가 0이면 maxUnavilable 은 0 설정 불가 (pod 띄우지도 종료하지도 못하니까)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 4
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app:1.1.0

Recreate

  • 모든 pod 를 내리고 새 버전의 pod 생성
    • strategy type: Recreate 선언
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 4
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app:1.1.0

update, rollback

  • yaml 파일의 image 에 버전을 직접 명시
    spec:
      containers:
      - name: my-app-container
        image: my-app:1.2.0

kubectl apply -f my-deployment-definition.yml

  • kubectl 명령어로 앱 이미지 업데이트
    • 명령어를 통해 파일 구성 자체가 변경

kubectl set image deployment/my-deployment my-app-container=my-app:1.2.0

배포 진행상황 모니터링

  • deployments 확인

kubectl get deployments

  • kubectl rollout status : 실시간 배포 상황 모니터링

kubectl rollout status deployment/my-deployment

  • history: Deployment revision 이력 확인

kubectl rollout history deployment/my-deployment
kubectl rollout history deployment/my-deployment --revision=2

rollback

  • rollout undo 를 통해 롤백
  • 특정 revision 지정 가능
    kubectl rollout undo deployment/my-deployment

kubectl rollout undo deployment/my-deployment --to-revision=<REVISION_NUMBER>

reference

0개의 댓글

관련 채용 정보