안녕하세요! 오늘은 쿠버네티스에서 가장 많이 사용되는 리소스이자, CKAD 시험에서도 비중이 매우 높은 Deployment(디플로이먼트)에 대해 깊이 있게 파헤쳐 보겠습니다. 파드(Pod)를 하나하나 수동으로 관리하는 시대는 끝났습니다. 우리가 원하는 상태를 정의만 하면 쿠버네티스가 알아서 맞춰주는 '선언적 배포'의 마법을 15분 만에 마스터해 봅시다!

📑 목차
- 개요: 명령적(Imperative) vs 선언적(Declarative) 배포
- Deployment의 구조: Replicas와 Pod Template
- 업데이트 전략: RollingUpdate vs Recreate
- 버전 관리의 핵심: Rollout과 Rollback
- CKAD 실전 팁: 명령어 한 줄로 배포하기
- Hands-on: 실전 연습 문제
0. 개요: 왜 Deployment인가? 🤔
쿠버네티스에서 배포 방식은 크게 두 가지로 나뉩니다.
- 명령적 배포 (Imperative): "파드 3개 만들어!", "이미지 업데이트해!"처럼 단계별 명령을 직접 내리는 방식입니다. 직관적이지만 관리가 어렵습니다.
- 선언적 배포 (Declarative): "내가 원하는 최종 상태는 'Nginx 이미지 버전 1.21'을 사용하는 '파드 3개'야."라고 명세서(YAML)를 제출하는 방식입니다. 쿠버네티스는 이 최종 상태(Desired State)를 유지하기 위해 끊임없이 감시하고 스스로 복구합니다.
이 선언적 배포를 실현해 주는 핵심 컨트롤러가 바로 Deployment입니다.
1. Deployment의 구조: 무엇을, 몇 개나? 🏗️
Deployment YAML 파일을 보면 크게 세 부분으로 나뉩니다.
- Replicas: 유지해야 할 파드의 개수입니다.
- Selector: Deployment가 어떤 파드들을 관리할지 결정하는 '이름표(Label)' 찾기 규칙입니다.
- Template: 실제 생성될 파드의 모양(이미지, 포트, 환경변수 등)을 정의합니다.
💡 핵심 YAML 구조
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3 # 파드 개수 유지
selector:
matchLabels:
app: my-web # 이 라벨을 가진 파드를 관리함
template:
metadata:
labels:
app: my-web # 생성될 파드에 붙을 라벨
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
2. 업데이트 전략: 서비스 중단 없는 배포 🔄
Deployment의 가장 큰 장점은 서비스를 중단하지 않고 애플리케이션을 업데이트할 수 있다는 점입니다.
1) RollingUpdate (기본값)
기존 파드를 하나씩 죽이면서 새로운 버전의 파드를 하나씩 생성합니다. 사용자 입장에서는 서비스 중단을 거의 느끼지 못합니다.
- maxSurge: 업데이트 중 의도한 개수보다 얼마나 더 많은 파드를 생성할 수 있는지 설정합니다.
- maxUnavailable: 업데이트 중 사용할 수 없는 파드의 최대 개수를 설정합니다.
2) Recreate
기존 파드를 모두 한꺼번에 죽인 뒤, 새로운 버전의 파드를 생성합니다. 일시적인 서비스 중단(Downtime)이 발생하지만, 구버전과 신버전이 공존하면 안 되는 환경에서 사용합니다.
3. 버전 관리의 핵심: Rollout과 Rollback ⏪
배포가 잘못되었다면? 당황하지 마세요. Deployment는 배포 이력을 기록하고 있어 언제든 과거로 돌아갈 수 있습니다.
- 배포 상태 확인: kubectl rollout status deployment/my-deploy
- 배포 이력 확인: kubectl rollout history deployment/my-deploy
- 이전 버전으로 복구: kubectl rollout undo deployment/my-deploy
- 특정 버전(revision 2)으로 복구: kubectl rollout undo deployment/my-deploy --to-revision=2
4. CKAD 실전 팁: 속도가 곧 합격이다! ⏱️
시험장에서는 YAML을 처음부터 타이핑할 시간이 없습니다. 명령어를 최대한 활용하세요.
1) 명령어로 Deployment 빠르게 생성하기
# nginx 이미지를 사용하는 배포 생성 (파드 3개)
kubectl create deployment my-web --image=nginx:1.21 --replicas=3
2) 이미지 업데이트하기 (시험 단골 문제!)
kubectl set image deployment/my-web nginx=nginx:1.22
3) 스케일링 (파드 개수 늘리기/줄이기)
kubectl scale deployment/my-web --replicas=5
5. Hands-on: 실전 연습 문제 🛠️
시나리오:
- app-deploy라는 이름의 Deployment를 생성하세요. (이미지: httpd:2.4.48, 복제본: 2개)
- 이미지를 httpd:2.4.49로 업데이트하고 배포 과정을 모니터링하세요.
- 업데이트에 문제가 생겼다고 가정하고, 즉시 이전 버전(2.4.48)으로 롤백하세요.
[풀이 가이드]
# 1. 생성
kubectl create deployment app-deploy --image=httpd:2.4.48 --replicas=2
# 2. 업데이트 및 확인
kubectl set image deployment/app-deploy httpd=httpd:2.4.49
kubectl rollout status deployment/app-deploy
# 3. 롤백
kubectl rollout undo deployment/app-deploy
마무리하며 🏁
Deployment는 단순히 파드를 여러 개 띄우는 도구가 아닙니다. "최종 상태를 선언하고, 쿠버네티스가 그 상태를 유지하도록 믿고 맡기는 것", 이것이 바로 쿠버네티스다운 운영의 핵심입니다.
오늘 배운 업데이트 전략과 롤백 기능을 잘 익혀두시면 실무에서의 안정적인 배포는 물론, CKAD 합격 증서도 한 걸음 더 가까워질 것입니다! 🌟
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| [CKAD] DaemonSet: 노드 레벨 인프라 에이전트의 보장된 배포 및 관리 (0) | 2026.02.06 |
|---|---|
| [CKAD] 쿠버네티스 워크로드를 지배하는 4대 파드 컨트롤러 총정리 (0) | 2026.02.06 |
| [CKAD] 내 데이터는 소중하니까! 영구 볼륨(PV/PVC)과 임시 볼륨(emptyDir) 완벽 정리 (0) | 2026.02.05 |
| [CKAD] 한 번만 실행되는 Job부터 주기적인 CronJob까지 배치 작업 마스터하기! (0) | 2026.02.05 |
| 쿠버네티스 작업의 시작! Context 전환과 Namespace 관리 꿀팁 🚀 (0) | 2026.02.04 |