쿠버네티스 Deployment

Chori·2025년 11월 16일
post-thumbnail

초보를 위한 쿠버네티스 안내서를 수강하며 정리한 내용입니다.

개념

  • Deployment는 쿠버네티스에서 가장 널리 사용되는 오브젝트, ReplicaSet을 이용하여 Pod를 업데이트하고 이력을 관리하여 롤백하거나 특정 버전으로 돌아갈 수 있음

Deployment 만들기

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deploy
spec:
  replicas: 4
  selector:
    matchLabels:
      app: echo
      tier: app
  template:
    metadata:
      labels:
        app: echo
        tier: app
    spec:
      containers:
        - name: echo
          image: ghrc.io/subicura/echo:v1
  • 기존 설정에서 이미지 태그만 변경하고 다시 적용
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deploy
spec:
  replicas: 4
  selector:
    matchLabels:
      app: echo
      tier: app
  template:
    metadata:
      labels:
        app: echo
        tier: app
    spec:
      containers:
        - name: echo
          image: ghrc.io/subicura/echo:v2 # v1 -> v2
# 새로운 이미지로 업데이트
kubectl apply -f echo-deployment-v2.yaml

# 리소스 확인
kubectl get po, rs, deploy
  • Deployment는 새로운 이미지로 업데이트하기 위해 ReplicaSet을 이용, 버전을 업데이트하면 새로운 ReplicaSet을 생성하고 해당 ReplicaSet이 새로운 버전의 Pod를 생성
  • 새로운 ReplicaSet에서 Pod를 0개에서 1개로 조정하고 정상적으로 Pod가 동작하면 기존 ReplicaSet에서 Pod를 하나 줄임
  • 최종적으로 새로운 ReplicaSet에서 원하는 개수의 Pod가 모두 정상적으로 동작하면 기존 ReplicaSet의 Pod는 0개로 조정되며 업데이트가 완료됨

버전 관리

  • Deployment는 변경된 상태를 기록
# 히스토리 확인
kubectl rollout history deploy/echo-deploy

# revision 1 히스토리 상세 확인
kubectl rollout history deploy/echo-deploy --revision=1

# 바로 전으로 롤백
kubectl rollout undo deploy/echo-deploy

# 특정 버전으로 롤백
kubectl rollout undo deploy/echo-deploy --to-revision=2

배포 전략 설정

  • Deployment에는 다양한 배포 전략이 있음
  • 롤링 업데이트 방식을 사용할 때 동시에 업데이트하는 Pod의 개수를 다음과 같이 변경할 수 있음
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deploy
spec:
  replicas: 4
  selector:
    matchLabels:
      app: echo
      tier: app
  minReadySeconds: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 3
      maxUnavailable: 3
  template:
    metadata:
      labels:
        app: echo
        tier: app
    spec:
      containers:
        - name: echo
          image: ghrc.io/subicura/echo:v2 # v1 -> v2
profile
전부인 것처럼, 전부가 아닌 것처럼

0개의 댓글