---
title: "Kubernetes 디플로이먼트: 롤링 업데이트와 롤백으로 애플리케이션 관리 마스터하기"
description: "Kubernetes 디플로이먼트는 레플리카셋을 관리하는 상위 개념으로, 롤링 업데이트, 롤백, 배포 일시 중지·재개, 스케일링, 블루‑그린·카나리 배포 등 다양한 기능을 제공하여 다운타임 없이 안전하고 효율적으로 애플리케이션을 배포·관리할 수 있다."
date: "2025-10-02"
last_modified: "2026-05-15T08:36:00.000Z"
type: "Post"
tags:
  - "kubernetes"
  - "replicaset"
categories:
  - "🤖 Computer Science"
series:
  - "k8s"
canonical_url: "https://blog.pieroot.xyz/k8s-deploy-rolling"
markdown_url: "https://blog.pieroot.xyz/k8s-deploy-rolling.md"
---

# Kubernetes 디플로이먼트: 롤링 업데이트와 롤백으로 애플리케이션 관리 마스터하기

Kubernetes 디플로이먼트는 레플리카셋을 관리하는 상위 개념으로, 롤링 업데이트, 롤백, 배포 일시 중지·재개, 스케일링, 블루‑그린·카나리 배포 등 다양한 기능을 제공하여 다운타임 없이 안전하고 효율적으로 애플리케이션을 배포·관리할 수 있다.

### **레플리카셋과 디플로이먼트 차이점**

![image](https://blog.pieroot.xyz/api/image-proxy?id=6dea7d05-c550-40b3-a889-d14f3584ea22&kind=s3&pageId=27f067c0-15d0-8092-8dce-e6b505c52768&source=block&blockId=27f067c0-15d0-806b-a7ee-d849f6a7c47b)

실제로는 레플리카셋을 직접 사용하기보다 디플로이먼트(Deployment)를 통해 간접적으로 사용하는 것이 일반적입니다:

- **업데이트 전략**: 디플로이먼트는 롤링 업데이트, 롤백 등 다양한 업데이트 전략을 제공합니다.

- **버전 관리**: 디플로이먼트는 리비전 히스토리를 유지하여 이전 버전으로 쉽게 롤백할 수 있습니다.

- **선언적 업데이트**: 디플로이먼트를 통해 애플리케이션을 선언적으로 업데이트할 수 있습니다.

따라서 실제 프로덕션 환경에서는 디플로이먼트를 사용하는 것이 권장됩니다. 디플로이먼트는 내부적으로 레플리카셋을 생성하고 관리합니다.

![image](https://blog.pieroot.xyz/api/image-proxy?id=33f7ce98-9318-4eb3-91fb-4dd5bebb194c&kind=s3&pageId=27f067c0-15d0-8092-8dce-e6b505c52768&source=block&blockId=2e4067c0-15d0-805e-a811-c506ea6a84f1)

### **디플로이먼트 예제**

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        # node-role.kubernetes.io/master: "true"
        kubernetes.io/hostname: "worker"
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
```

디플로이먼트의 기본 명령어는 레플리카셋과 유사합니다(kubectl apply, get, describe, scale 등).

### **디플로이먼트(Deployment)의 추가 기능**

디플로이먼트는 레플리카셋을 관리하는 상위 개념으로, 여러 강력한 기능을 제공합니다:

#### **1. 롤링 업데이트(Rolling Update)**

롤링 업데이트는 다운타임 없이 애플리케이션을 새 버전으로 업데이트하는 방법입니다:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1        # 원하는 레플리카 수 이상으로 생성할 수 있는 최대 파드 수
      maxUnavailable: 1  # 업데이트 중 사용할 수 없는 최대 파드 수
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19  # 이미지 업데이트
```

롤링 업데이트 실행 명령어:

```bash
# 이미지 업데이트
kubectl set image deployment/nginx-deployment nginx=nginx:1.20 --record

# 또는 YAML 파일을 수정한 후
kubectl apply -f deployment.yaml

# 롤링 업데이트 상태 확인
kubectl rollout status deployment/nginx-deployment
```

#### **2. 롤백(Rollback)**

문제가 발생했을 때 이전 버전으로 쉽게 되돌릴 수 있습니다:

```bash
# 배포 이력 확인
kubectl rollout history deployment/nginx-deployment

# 특정 리비전의 상세 정보 확인
kubectl rollout history deployment/nginx-deployment --revision=2

# 이전 버전으로 롤백
kubectl rollout undo deployment/nginx-deployment

# 특정 버전으로 롤백
kubectl rollout undo deployment/nginx-deployment --to-revision=2
```

#### **3. 배포 일시 중지 및 재개**

배포 과정을 제어할 수 있습니다:

```bash
# 배포 일시 중지
kubectl rollout pause deployment/nginx-deployment

# 변경 사항 적용 (일시 중지 상태에서는 롤링 업데이트가 트리거되지 않음)
kubectl set image deployment/nginx-deployment nginx=nginx:1.21

# 배포 재개
kubectl rollout resume deployment/nginx-deployment
```

#### **4. 디플로이먼트 스케일링**

레플리카셋과 유사하게 스케일링이 가능합니다:

```bash
# 명령어로 스케일링
kubectl scale deployment nginx-deployment --replicas=5

# 자동 스케일링 설정
kubectl autoscale deployment nginx-deployment --min=2 --max=5 --cpu-percent=80
```

#### **5. 블루-그린 및 카나리 배포**

디플로이먼트를 활용한 고급 배포 전략:

- **블루-그린 배포**: 새 버전(그린)을 완전히 배포한 후, 트래픽을 한 번에 전환합니다. 서비스 셀렉터를 변경하여 구현합니다.

- **카나리 배포**: 새 버전을 일부 사용자에게만 먼저 제공하여 테스트합니다. 동일한 서비스 셀렉터를 사용하되 레이블과 가중치를 활용합니다.

#### **6. 디플로이먼트 구성 업데이트**

```bash
# 환경변수 추가
kubectl set env deployment/nginx-deployment NGINX_HOST=example.com

# 리소스 제한 변경
kubectl set resources deployment/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
```

#### **7. 주요 차이점 정리**

![image](https://blog.pieroot.xyz/api/image-proxy?id=c61b6683-3efa-495c-be90-cd36bd0f0cf4&kind=s3&pageId=27f067c0-15d0-8092-8dce-e6b505c52768&source=block&blockId=27f067c0-15d0-8027-98c4-d3edd73ee528)

실제 운영 환경에서는 대부분의 경우 레플리카셋을 직접 사용하기보다 디플로이먼트를 사용하는 것이 권장됩니다. 디플로이먼트는 더 높은 수준의 추상화를 제공하면서 레플리카셋의 모든 기능을 포함하고 있습니다.

### **정리**

이 문서에서는 쿠버네티스 디플로이먼트(Deployment)의 핵심 개념과 기능에 대해 알아보았습니다. 디플로이먼트는 레플리카셋을 관리하는 상위 개념으로, 프로덕션 환경에서 애플리케이션을 안전하고 효율적으로 배포하고 관리할 수 있는 강력한 도구입니다.

### **핵심 정리**

✅ **디플로이먼트**: 레플리카셋을 관리하는 상위 개념으로 선언적 업데이트와 버전 관리 제공

✅ **롤링 업데이트**: 다운타임 없이 애플리케이션을 새 버전으로 점진적 업데이트

✅ **롤백 기능**: 문제 발생 시 이전 버전으로 신속하게 복구 가능

✅ **배포 제어**: 배포 일시 중지 및 재개를 통한 세밀한 배포 관리

✅ **고급 배포 전략**: 블루-그린 배포와 카나리 배포 지원

✅ **자동 스케일링**: HPA를 통한 CPU/메모리 기반 자동 확장

✅ **프로덕션 권장**: 레플리카셋 직접 사용보다 디플로이먼트 사용 권장

디플로이먼트는 쿠버네티스에서 애플리케이션을 배포하고 관리하는 가장 일반적이고 강력한 방법입니다. 롤링 업데이트, 롤백, 버전 관리 등의 기능을 통해 안정적인 서비스 운영이 가능합니다.
