본문 바로가기
문서 목차
QKS · Workloads

Deployments

Deployment 는 상태 비저장(stateless) 애플리케이션을 위한 Kubernetes 워크로드 오브젝트입니다. 원하는 수의 Pod 복제본이 항상 실행되도록 관리하며, 이미지 업데이트 시 서비스 중단 없이 롤링 업데이트를 진행하고 문제가 생기면 이전 버전으로 롤백할 수 있습니다.

QUANTUM C&S

개요

Deployment는 상태 비저장(stateless) 애플리케이션을 위한 Kubernetes 워크로드 오브젝트입니다. 원하는 수의 Pod 복제본이 항상 실행되도록 관리하며, 이미지 업데이트 시 서비스 중단 없이 롤링 업데이트를 진행하고 문제가 생기면 이전 버전으로 롤백할 수 있습니다.


QKS 콘솔에서 Deployment 확인

  1. 왼쪽 메뉴에서 Workloads > Deployments를 선택합니다.
  2. 네임스페이스를 선택하면 Deployment 목록이 표시됩니다.

목록에서 확인할 수 있는 정보:

  • 이름: Deployment 이름
  • 준비 상태: 준비된 파드 수 / 전체 파드 수 (예: 3/3)
  • 이미지: 컨테이너 이미지 및 태그
  • 생성 시간

Deployment 상세 정보

Deployment 이름을 클릭하면 다음 정보를 확인할 수 있습니다:

  • 현재 실행 중인 Pod 목록 및 상태
  • 컨테이너 이미지 및 태그
  • 환경 변수 및 볼륨 설정
  • 리소스 요청량/제한량 (CPU, 메모리)
  • 롤아웃 히스토리 (이전 버전으로 롤백 가능)

kubectl로 관리

기본 조회

# Deployment 목록
kubectl get deployments -n <namespace>

# 상세 정보
kubectl describe deployment <name> -n <namespace>

# 실시간 상태 모니터링
kubectl get deployment <name> -n <namespace> -w

이미지 업데이트 (롤링 업데이트)

kubectl set image deployment/<name> <container>=<image>:<tag> -n <namespace>

# 롤아웃 상태 확인
kubectl rollout status deployment/<name> -n <namespace>

롤백

# 이전 버전으로 롤백
kubectl rollout undo deployment/<name> -n <namespace>

# 특정 리비전으로 롤백
kubectl rollout undo deployment/<name> --to-revision=<revision-number> -n <namespace>

# 롤아웃 히스토리 확인
kubectl rollout history deployment/<name> -n <namespace>

스케일 조정

kubectl scale deployment/<name> --replicas=<count> -n <namespace>

Deployment YAML 예시

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: my-registry/my-app:v1.0.0
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: "250m"
              memory: "256Mi"
            limits:
              cpu: "500m"
              memory: "512Mi"
          env:
            - name: ENV
              value: "production"

롤링 업데이트 전략

Deployment는 기본적으로 롤링 업데이트 방식을 사용합니다. 업데이트 중 최대 몇 개의 파드를 동시에 교체할지 strategy 필드로 제어할 수 있습니다.

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1   # 업데이트 중 사용 불가 파드 최대 수
      maxSurge: 1         # 동시에 추가 생성할 수 있는 파드 최대 수

리소스 요청/제한 권장사항

항목 설명
requests.cpu 파드가 보장받는 최소 CPU. 스케줄링 시 기준이 됩니다.
requests.memory 파드가 보장받는 최소 메모리.
limits.cpu 파드가 사용할 수 있는 최대 CPU.
limits.memory 파드가 사용할 수 있는 최대 메모리. 초과 시 OOMKilled됩니다.

requests 없이 배포하면 노드의 실제 가용 리소스를 알 수 없어 스케줄링 문제가 발생할 수 있습니다. 반드시 requests를 설정하는 것을 권장합니다.