쿠버네티스 입문자들이 가장 헷갈려 하는 것 중 하나가 "둘 다 Pod 개수를 유지해 주는데, 왜 Deployment를 써야 하나요?"라는 질문입니다. 오늘은 ReplicaSet과 Deployment의 관계를 파헤쳐 보겠습니다.
이전 시간에 학습한 [Kubernetes] Pod의 생명주기(Lifecycle)와 리스타트 정책(Restart Policy) 완벽 이해 바로가기
1. ReplicaSet의 역할: "개수 유지"
ReplicaSet의 유일한 목적은 정해진 수의 Pod 복제본이 항상 실행되도록 보장하는 것입니다. Pod가 죽으면 새 Pod를 띄우고, 너무 많으면 줄입니다. 하지만 ReplicaSet은 "버전 관리" 능력이 없습니다.
2. Deployment의 역할: "배포 관리"
Deployment는 ReplicaSet의 상위 개념입니다. Deployment는 내부적으로 ReplicaSet을 생성하여 Pod 개수를 관리하지만, 그 위에 **배포 전략(Rolling Update, Rollback 등)**이라는 강력한 기능을 더했습니다.
3. Hands-on: 업데이트 상황에서의 동작 차이
실제로 이미지를 업데이트할 때 어떤 일이 벌어지는지 확인해 보겠습니다.
Step 1: Deployment 생성
# nginx:1.14.2 버전으로 배포
kubectl create deployment my-deploy --image=nginx:1.14.2 --replicas=3
Step 2: 이미지 업데이트 실행
kubectl set image deployment/my-deploy nginx=nginx:1.16.1
4. 테스트 결과 확인 (Test Results)
가장 중요한 포인트는 ReplicaSet의 변화입니다.
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
my-deploy-75675f5897 0 0 0 2m # 이전 버전 RS (기록용)
my-deploy-54f9ccf4f4 3 3 3 30s # 새 버전 RS (현재 활성)
- ReplicaSet만 사용했다면? 기존 RS의 이미지를 수동으로 바꿔야 하고, 기존 Pod를 직접 지워야 새 버전 Pod가 뜹니다. 이 과정에서 서비스 중단이 발생할 수 있습니다.
- Deployment를 사용했더니? Deployment가 새로운 ReplicaSet을 만들고, 기존 RS의 Pod는 0개로 줄이면서 새 RS의 Pod를 3개로 늘리는 과정을 자동으로 수행했습니다.
5. 비교 요약표
| 기능 | ReplicaSet | Deployment |
| 핵심 목적 | Pod 가용성 보장 (개수 유지) | 무중단 배포 및 버전 관리 |
| 업데이트 방식 | 기존 Pod를 수동으로 삭제 필요 | Rolling Update 지원 (자동) |
| 롤백(Rollback) | 지원하지 않음 | 명령어 한 줄로 이전 RS로 복구 가능 |
| 사용 권장 | 거의 직접 사용하지 않음 | 운영 환경의 표준 |
💡 Insight: 추상화의 힘
쿠버네티스에서 Deployment를 사용하는 이유는 이력(History) 관리 때문입니다.
운영 환경에서 가장 무서운 것은 "업데이트 후 장애"입니다. Deployment는 이전 버전의 ReplicaSet을 삭제하지 않고 0으로 유지함으로써, 장애 시 즉각적으로 이전 상태의 스냅샷으로 되돌릴 수 있는 안전장치를 제공합니다.
결론적으로, **"개수 관리는 ReplicaSet에게 맡기고, 사람이 관리하는 컨트롤 타워는 Deployment로 둔다"**는 것이 쿠버네티스의 설계 철학입니다. 따라서 우리는 실무에서 항상 Deployment를 최우선으로 고려해야 합니다.
도움이 되셨나요? 다음 포스팅에서는 서비스 노출의 핵심인 **Service(ClusterIP, NodePort, LoadBalancer)**에 대해 다뤄보겠습니다! 도움이 되셨다면 구독과 공감 부탁드립니다. :)
'DevOps > Kubernetes' 카테고리의 다른 글
| [k8s] 외부 접속은 왜 Ingress일까? 쿠버네티스 인/아웃바운드 트래픽 총정리 (0) | 2026.03.15 |
|---|---|
| [k8s] 외부 서비스 접근을 위한 Service(ClusterIP, NodePort, LoadBalancer) 알아보기 (1) | 2026.03.13 |
| [Kubernetes] Pod의 생명주기(Lifecycle)와 리스타트 정책(Restart Policy) 완벽 이해 (0) | 2026.03.09 |
| [Kubernetes] 쿠버네티스 Deployment 완벽 정리: 중단 없는 서비스 배포의 핵심 (0) | 2026.03.06 |
| [Kubernetes] Kubernetes ReplicaSet과 Replicas 완벽 이해하기 (0) | 2026.03.04 |
댓글