개발 창고/Server

Kubernetes 리소스 - Deployment 완벽 이해하기

로이제로 2025. 8. 1. 22:00
반응형

목차

  • Deployment란 무엇인가?
  • ReplicaSet과 Deployment의 차이
  • Deployment의 주요 기능
  • YAML 예제와 구성 요소 설명
  • Deployment 생성 및 배포 실습
  • Rolling Update와 Rollback
  • 자주 묻는 질문(FAQ)
  • 핵심 요약

Deployment란 무엇인가?

Deployment는 Kubernetes에서 가장 널리 사용되는 리소스입니다.
간단히 말하면, 애플리케이션의 배포, 확장, 업데이트, 복구를 손쉽게 관리할 수 있도록 도와주는 고급 리소스입니다.

ReplicaSet을 내부적으로 생성·관리하며, 다음과 같은 이유로 더 많이 사용됩니다.

  • 선언형 배포
  • 자동 롤링 업데이트
  • 버전 관리 및 롤백 기능

ReplicaSet과 Deployment의 차이

항목 ReplicaSet Deployment
목적 고정된 수의 Pod 유지 Pod 배포 및 업데이트 관리
롤링 업데이트 직접 불가능 자동 처리 가능
버전 롤백 없음 이전 버전으로 복원 가능
주 사용처 실험적 혹은 세부 제어 필요 시 일반적인 서비스 배포

Deployment는 실제로도 대부분의 서비스 운영 환경에서 사용됩니다.


Deployment의 주요 기능

  • Pod 수 관리: ReplicaSet과 동일하게 replicas 수 조절 가능
  • 자동 업데이트: 새로운 이미지로 교체할 때 무중단 배포
  • 롤백 지원: 문제가 생겼을 때 이전 상태로 쉽게 복구 가능
  • 이중 관리: 여러 버전의 ReplicaSet을 자동으로 관리

Deployment YAML 예제

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

주요 필드 설명

  • replicas: 실행할 Pod 수
  • selector: 관리 대상 Pod의 라벨 지정
  • template: 실제 Pod 템플릿 (컨테이너 설정 등)

Deployment 생성 및 관리 명령어

생성

kubectl apply -f deployment.yaml

상태 확인

kubectl get deployments
kubectl get rs
kubectl get pods

롤링 업데이트 (Rolling Update)

Deployment의 가장 큰 장점 중 하나는 무중단 업데이트입니다.

이미지 업데이트 예시

kubectl set image deployment/nginx-deployment nginx=nginx:1.22

업데이트는 단계적으로 이루어지며, 서비스는 중단되지 않습니다.


롤백 (Rollback)

업데이트 중 문제가 발생했다면, 이전 상태로 쉽게 복원할 수 있습니다.

가장 최근 버전으로 롤백

kubectl rollout undo deployment/nginx-deployment

버전 히스토리 확인

kubectl rollout history deployment/nginx-deployment

자주 묻는 질문 (FAQ)

Q1. Deployment는 ReplicaSet을 어떻게 관리하나요?
Deployment는 내부적으로 ReplicaSet을 생성하고, 업데이트 시 새로운 ReplicaSet을 만들어 점진적으로 교체합니다.

Q2. Pod가 모두 업데이트되기까지 시간이 오래 걸리면 어떻게 하나요?
maxUnavailable, maxSurge 설정을 조정하여 배포 속도를 조절할 수 있습니다.

Q3. 어떤 경우에 Deployment 대신 StatefulSet을 써야 하나요?
Pod에 고유한 ID, 네트워크 이름, 스토리지가 필요한 경우에는 StatefulSet이 더 적합합니다.


핵심 요약

개념 설명
Deployment Kubernetes에서 가장 많이 쓰이는 배포 리소스
Rolling Update 새로운 버전으로 무중단 교체 가능
Rollback 문제가 생겼을 때 이전 상태로 복원
ReplicaSet Deployment 내부에서 자동으로 생성 및 관리됨

마무리

Deployment는 Kubernetes에서 실제 운영을 위한 표준 배포 방식입니다.
안정적인 업데이트, 빠른 롤백, 확장성까지 갖춘 강력한 리소스죠.


반응형