Kubernetes/Kubernetes Advanced

📌 [Deployment 심화편 #1] Deployment의 역할과 실무 활용 방법

ygtoken 2025. 3. 13. 10:08
728x90

 

1️⃣ 개요

 

쿠버네티스에서 Deployment(디플로이먼트)애플리케이션을 선언적으로 배포하고 관리하는 주요 리소스입니다.

Deployment를 활용하면 Pod 개수를 자동으로 조정하고, 버전 업데이트롤백(Rollback) 등의 기능을 쉽게 사용할 수 있습니다.

 

이번 글에서는 Deployment의 핵심 개념과 활용하는 방법을 정리하겠습니다. 🚀

 


2️⃣ Deployment란?

 

✅ Deployment의 주요 기능

 

기능 설명
Pod 개수 유지 지정한 개수만큼 Pod가 항상 실행되도록 보장
버전 업데이트 새로운 애플리케이션 버전을 배포 가능
롤백 지원 문제가 발생하면 이전 버전으로 쉽게 복구 가능
Rolling Update 지원 기존 Pod를 점진적으로 교체하여 무중단 배포 가능

Deployment는 내부적으로 ReplicaSet을 생성하여 Pod를 관리합니다.

 


3️⃣ Deployment와 ReplicaSet의 차이

 

Deployment와 ReplicaSet은 모두 Pod 개수를 관리하지만, Deployment는 추가적인 기능을 제공합니다.

 

📌 Deployment vs ReplicaSet 비교

 

특징 ReplicaSet Deployment
Pod 개수 유지 ✅ 가능 ✅ 가능
버전 관리 ❌ 불가능 ✅ 가능
롤백 지원 ❌ 불가능 ✅ 가능
Rolling Update 지원 ❌ 불가능 ✅ 가능

운영 환경에서는 대부분 Deployment를 사용하여 애플리케이션을 배포합니다.

 


4️⃣ Deployment 기본 설정과 생성 방법

 

✅ 1. Deployment 생성 예제

 

아래는 3개의 Pod를 실행하는 Deployment 설정 파일입니다.

 

📌 Deployment YAML 예제 (Nginx 배포)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: nginx

 

📌 Deployment 적용 방법

kubectl apply -f deployment.yaml

 

📌 배포된 Deployment 확인

kubectl get deployments

 

📌 Deployment가 생성한 ReplicaSet 확인

kubectl get rs

Deployment는 내부적으로 ReplicaSet을 생성하여 Pod 개수를 유지합니다.

 


5️⃣ Deployment 실전 활용 방법

 

🚀 1. Pod 개수 변경 (Scale Up/Down)

트래픽 증가 또는 감소에 따라 Pod 개수를 조절할 수 있습니다.

 

📌 Pod 개수 5개로 조정

kubectl scale deployment my-deployment --replicas=5

 

📌 현재 실행 중인 Pod 개수 확인

kubectl get pods

Pod 개수를 동적으로 변경하여 서비스 운영을 최적화할 수 있습니다.

 


🚀 2. Deployment 업데이트 (Rolling Update 적용)

Deployment를 수정하면 기존 Pod를 점진적으로 새로운 버전으로 교체(Rolling Update) 합니다.

 

📌 Deployment YAML 수정 (nginx:latest → nginx:1.23)

spec:
  template:
    spec:
      containers:
        - name: my-container
          image: nginx:1.23  # 새로운 버전

 

📌 Deployment 업데이트 적용

kubectl apply -f deployment.yaml

 

📌 Rolling Update 진행 상황 확인

kubectl rollout status deployment my-deployment

Rolling Update를 활용하면 무중단 배포가 가능합니다.

 


🚀 3. Deployment 롤백 (Rollback 기능 활용)

Deployment 업데이트 중 문제가 발생하면 이전 버전으로 롤백할 수 있습니다.

 

📌 현재 배포된 버전 기록 확인

kubectl rollout history deployment my-deployment

 

📌 이전 버전으로 롤백 실행

kubectl rollout undo deployment my-deployment

롤백 기능을 활용하면 안정적인 배포 운영이 가능합니다.

 


6️⃣ Deployment 사용 시 주의해야 할 점

 

✅ 1. ReplicaSet을 직접 관리하지 않아야 함

Deployment는 내부적으로 ReplicaSet을 생성하여 관리합니다.

kubectl delete replicaset 명령어로 직접 삭제하면 문제가 발생할 수 있음

 

📌 현재 Deployment가 관리하는 ReplicaSet 확인

kubectl get rs

Deployment를 사용할 때는 ReplicaSet을 직접 수정하지 않고, Deployment를 통해 관리해야 합니다.

 


✅ 2. 적절한 maxUnavailable 및 maxSurge 설정

Rolling Update 시 최대 몇 개의 Pod를 동시에 교체할 것인지 설정해야 합니다.

maxUnavailable: 배포 중 한 번에 몇 개의 Pod를 비활성화할 것인지 설정

maxSurge: 한 번에 몇 개의 새로운 Pod를 추가할 것인지 설정

 

📌 Rolling Update 최적화 설정 예제

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1  # 동시에 1개만 종료
      maxSurge: 2         # 동시에 2개까지 추가 배포 가능

이 설정을 활용하면 배포 속도를 조절할 수 있습니다.

 


🔥 7️⃣ 결론

 

Deployment는 애플리케이션을 선언적으로 배포하고 관리하는 주요 리소스

Pod 개수를 유지하며, 새로운 버전 배포 및 롤백을 쉽게 수행할 수 있음

Deployment는 내부적으로 ReplicaSet을 생성하여 Pod 개수를 관리

Rolling Update를 활용하면 무중단 배포 가능, 문제가 발생하면 롤백 기능 제공

운영 환경에서는 maxUnavailable 및 maxSurge 값을 조정하여 최적화해야 함

728x90