Deployment - Updates and Rollback

Yu Sang Min·2025년 6월 4일

CKA

목록 보기
30/110
post-thumbnail

📌 Rollout and Versioning

![]

  • Deployment에 일어난 변화를 추적할 수 있다.
  • 필요하면 이전 버전으로 되돌릴 수 있게 해준다

⌨️ Rollout Command

$ kubectl rollout status deployment/<Deployment 이름>

  • 위 명령어를 통해 rollout status 조회 가능
$ kubetl rollout history deployment/<Deployment 이름>

⚔️ Deployment Strategy

  • 두 가지 유형의 배포 전략이 있다.
    • Recreate : 실행중인 인스턴스를 모두 종료하고 새 버전으로 배포
      • 서비스 중단 발생
    • Rolling Update : 인스턴스 하나씩 다운 후 순차적으로 새 버전 배포
      - 무중단 배포
      배포 전략을 선택하지 않으면 default로 Rolling Update로 진행됨

✅ kubectl apply

# deployment-definition.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp
    type: front-end
spec:
  template:
    metadata:
      name: myapp-pod
      labels:
        app: myapp
        type: front-end
    spec:
      containers:
      - name: nginx-container
        image: nginx
  replicas: 3
  selector:
    matchLabels:
      type: front-end
  • 업데이트: 애플리케이션 버전을 업그레이드 (사용된 Docker container 버전 업데이트)
    • 예를들어, replicas 수를 업데이트 하거나 labels 등을 변경하는 등의 행위
  • Definition 파일 (즉 , yaml 파일) 이 있다면 필드를 수정하고 kubectl apply -f <definition_file_name.yaml> 명령으로 새로운 컨테이너가 배포됨
  • 추가로 kubectl set image deployment/<deployment_name> <container_name>=nginx:1.9.1 명령어로도 애플리케이션 이미지를 업데이트 할 수있다.
    • 하지만 이런식으로 하면 정의 파일의 config가 변경된다.
    • 때문에 같은 정의파일 사용시 주의해야 한다.

🆚 Recreate vs RollingUpdate

  • kubectl describe deployment 명령어로 자세한 구성을 보면 배포전략(Strategy Type) 확인 가능
  • Recreate 방식은 replicas를 0으로 scale down 하고 다시 새 버전을 5개로 scale up
  • RollingUpdate 방식은 하나씩 동시에 교체

♻️ How to Upgrades Rolling Update

  • 자동으로 ReplicaSet를 생성하고 순차적으로 Pod를 하나씩 다운시키고 새버전으로 교체
  • kubectl get replicasets 명령어로 실제 롤링 업데이트시 새 ReplicaSet이 생성됨을 확인할 수있다.

🔙 Rollback

  • 새 버전에 문제가 있는 경우 롤백 필요
  • K8S Deployment는 이전 버전으로 롤백이 가능하다.
$ kubectl rollout undo deployment/<deployment_name>
  • 현재 ReplicaSetpod를 종료하고 예전 버전을 불러온다

⌨️ Summarize Commands

# Create
$ kubectl create -f <deployment-definition.yaml>

# Get
$ kubectl get deployments

# Update
$ kubectl apply -f deployment-definition.yaml 
$ kubectl set image deployment/<deployment_name> <container_name>=nginx:1.9.1

# Status
$ kubectl rollout status deployment/<deployment_name>

# Rollback
$ kubectl rollout history deployment/<deployment_name>
$ kubectl rollout undo deployment/<deployment_name>
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글