개발 창고/Server

Kubernetes Deployment 완전정복: Pod 배포와 업데이트 자동화의 핵심 리소스

Royzero 2025. 8. 3. 22:00
반응형

Kubernetes Deployment: 무중단 배포를 위한 핵심 리소스

Kubernetes에서 Deployment(디플로이먼트) 는 실제 운영 환경에서 가장 많이 사용되는 Pod 관리 리소스입니다.
단순히 Pod를 실행하는 것에 그치지 않고, 버전 업데이트, 롤백, 스케일링, 자동 복구 기능까지 포괄합니다.

이번 글에서는 다음과 같은 내용을 다룹니다:

  • Deployment란 무엇인가?
  • 왜 ReplicaSet보다 Deployment를 사용해야 하는가?
  • YAML 예시와 명령어 실습
  • 롤링 업데이트와 롤백
  • 실전 운영 팁 및 자주 묻는 질문

1. Deployment란?

Deployment는 내부적으로 ReplicaSet을 생성하고 관리하며, 사용자에게는 상위 레벨의 배포/운영 기능을 제공합니다.

쉽게 말해,

"Deployment는 내 앱이 항상 정해진 수만큼 실행되고, 새로운 버전으로 점진적으로 바뀌도록 보장해주는 설계도"입니다.


2. 왜 ReplicaSet 대신 Deployment를 사용하는가?

비교 항목 ReplicaSet Deployment
사용 목적 Pod 복제 유지 Pod 배포 및 버전 관리
업데이트 기능 없음 롤링 업데이트 지원
롤백 기능 없음 kubectl rollout undo로 가능
운영 추천도 낮음 (비직관적) 높음 (표준 방식)

즉, ReplicaSet은 기초 레벨 제어, Deployment는 실전 배포 전용입니다.


3. Deployment YAML 기본 구조

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: nginx
          image: nginx:1.21
          ports:
            - containerPort: 80

설명:

  • replicas: 실행할 Pod 수
  • selector: 관리 대상 Pod 식별용 라벨
  • template: Pod 사양 (컨테이너, 이미지, 포트 등)

4. Deployment 생성 및 확인

kubectl apply -f deployment.yaml
kubectl get deployments
kubectl get pods

배포 후, 지정된 수의 Pod가 자동으로 생성됩니다. 삭제되어도 다시 생성됩니다.


5. Deployment 업데이트

이미 배포된 컨테이너 이미지 버전을 바꿔보겠습니다:

kubectl set image deployment/my-deployment nginx=nginx:1.23

롤링 업데이트

Deployment는 모든 Pod를 한꺼번에 교체하지 않고, 순차적으로 교체합니다.

이를 롤링 업데이트(Rolling Update) 라고 하며, 무중단 배포가 가능해집니다.


6. 배포 상태 확인

kubectl rollout status deployment/my-deployment

롤백

kubectl rollout undo deployment/my-deployment

실수로 잘못된 버전을 배포해도 쉽게 원상복구할 수 있습니다.


7. 수동 스케일링

kubectl scale deployment/my-deployment --replicas=5

ReplicaSet과 마찬가지로 Deployment도 수평 확장이 가능합니다.


8. 자주 묻는 질문 (FAQ)

Q1. Deployment와 ReplicaSet 둘 다 필요할까요?

아닙니다. Deployment만 정의하면 내부에서 자동으로 ReplicaSet이 생성되어 관리됩니다.

Q2. 롤링 업데이트 중 장애가 생기면 어떻게 하나요?

Deployment는 업데이트 중 문제가 발생하면 자동으로 중단하거나 롤백할 수 있습니다.

Q3. Canary 배포도 가능한가요?

일부 Pod만 먼저 새 버전으로 교체하는 Canary 전략은 별도 설정 및 Istio 등과 연동해 가능합니다.


9. 운영 팁

  • minReadySeconds, strategy.rollingUpdate.maxUnavailable 등의 옵션을 활용하면 배포 안정성을 조정할 수 있습니다.
  • revisionHistoryLimit를 설정하여 이전 버전 개수를 제한하면 리소스 절약에 도움이 됩니다.
  • kubectl rollout history를 통해 버전 히스토리를 확인할 수 있습니다.

10. 요약

항목 설명
목적 Pod 배포, 업데이트, 롤백 등 자동화
업데이트 방식 롤링 업데이트 (무중단)
버전 관리 자동 히스토리 관리 및 롤백 지원
운영 난이도 쉬움, 실무 배포에 필수

반응형