안녕하세요! 오늘은 쿠버네티스(Kubernetes) 운영의 핵심이자, 서비스의 안정성을 책임지는 **ReplicaSet(레플리카셋)**과 Replicas(레플리카) 설정에 대해 깊이 있게 알아보겠습니다. 특히 이론뿐만 아니라 실제 Pod가 삭제되었을 때 어떻게 복구되는지 테스트 결과까지 함께 정리해 보겠습니다.
이전 시간에 학습한 [Kubernetes] 어플리케이션의 생명주기와 관리: 프로브(Probes)와 레이블(Labels) 바로가기
1. ReplicaSet이란 무엇인가?
ReplicaSet은 쿠버네티스의 컨트롤러 객체 중 하나로, 실행 중인 Pod의 개수를 일정하게 유지하는 역할을 합니다.
쉽게 비유하자면, ReplicaSet은 "편의점 점주"와 같습니다. 점주는 매대에 항상 삼각김밥이 3개(Replicas) 진열되어 있도록 확인합니다. 누군가 삼각김밥을 사 가면(Pod 종료), 즉시 새 제품을 채워 넣어 항상 3개를 유지하죠.
ReplicaSet의 핵심 목적
- 고가용성(High Availability): 하나 이상의 Pod가 다운되더라도 서비스가 중단되지 않도록 합니다.
- 스케일링(Scaling): 트래픽 증가 시 Pod의 개수를 늘려 부하를 분산합니다.

2. ReplicaSet 구성 예시 (YAML)
실제 환경에서 사용할 수 있는 ReplicaSet 정의 파일 예시입니다. nginx 이미지를 기반으로 3개의 복제본을 유지하는 설정입니다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-web-rs
spec:
# 1. 원하는 Pod의 개수 (Replicas)
replicas: 3
# 2. 어떤 라벨의 Pod를 관리할지 선택 (Selector)
selector:
matchLabels:
tier: frontend
# 3. 신규 Pod 생성 시 참고할 템플릿 (Template)
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: nginx-container
image: nginx:stable-alpine
3. [실습] 자가 치유(Self-Healing) 테스트 및 결과
ReplicaSet이 정말로 Pod의 개수를 유지하는지 직접 테스트해 본 결과입니다.
① ReplicaSet 생성
먼저 위 YAML 파일을 적용합니다.
$ kubectl apply -f my-web-rs.yaml
replicaset.apps/my-web-rs created
② 생성 확인 (Initial State)
3개의 Pod가 정상적으로 실행 중임을 확인할 수 있습니다.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-web-rs-abc12 1/1 Running 0 10s
my-web-rs-def34 1/1 Running 0 10s
my-web-rs-ghi56 1/1 Running 0 10s
③ 임의로 Pod 삭제 (Test)
장애 상황을 가정하여 Pod 하나를 강제로 삭제해 보겠습니다.
$ kubectl delete pod my-web-rs-abc12
pod "my-web-rs-abc12" deleted
④ 테스트 결과 확인 (Recovery)
삭제 직후 다시 Pod 목록을 조회하면, 기존 Pod는 사라졌지만 즉시 새로운 Pod(my-web-rs-xyz78)가 생성된 것을 볼 수 있습니다.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-web-rs-def34 1/1 Running 0 45s
my-web-rs-ghi56 1/1 Running 0 45s
my-web-rs-xyz78 1/1 Running 0 2s # 새롭게 생성됨!
결과 분석: ReplicaSet은 replicas: 3 설정을 만족시키기 위해 삭제된 Pod를 감지하자마자 새로운 Pod를 스케줄링했습니다. 이것이 쿠버네티스의 '선언적 명령' 기반의 자가 치유 능력입니다.
4. ReplicaSet vs Deployment
공부를 하다 보면 Deployment와 혼동될 수 있습니다. 결론부터 말씀드리면, 실무에서는 ReplicaSet을 직접 정의하기보다 Deployment를 사용합니다.
- ReplicaSet: Pod의 개수 유지에만 집중합니다.
- Deployment: ReplicaSet을 관리하며, **롤링 업데이트(Rolling Update)**나 롤백(Rollback) 같은 배포 전략을 지원합니다.
Deployment를 생성하면 내부적으로 자동으로 ReplicaSet이 생성되므로, 운영 시에는 상위 객체인 Deployment를 다루는 것이 표준입니다.
5. 스케일링(Scaling) 결과 확인
트래픽이 몰려 복제본을 5개로 늘려야 하는 상황이라면 다음 명령어를 사용합니다.
$ kubectl scale rs my-web-rs --replicas=5
replicaset.apps/my-web-rs scaled
$ kubectl get rs my-web-rs
NAME DESIRED CURRENT READY AGE
my-web-rs 5 5 5 2m
DESIRED(원하는 상태)와 CURRENT(현재 상태)가 모두 5로 일치하게 변하는 과정을 확인할 수 있습니다.
마치며
ReplicaSet은 쿠버네티스의 "안정성"을 지탱하는 가장 기초적인 컨트롤러입니다. 비록 실무에서는 Deployment에 가려져 직접 작성할 일이 적을 수 있지만, 그 내부 동작 원리를 아는 것은 트러블슈팅에 매우 큰 도움이 됩니다.
다음 포스팅에서는 이 ReplicaSet을 효율적으로 업데이트하는 Deployment 전략에 대해 심도 있게 다뤄보겠습니다!
도움이 되셨다면 공감과 댓글 부탁드립니다!
궁금한 점은 언제든 남겨주세요. :)
'DevOps > Kubernetes' 카테고리의 다른 글
| [Kubernetes] ReplicaSet과 Deployment, 대체 뭐가 다른 걸까? (차이점 명확히 알기) (1) | 2026.03.11 |
|---|---|
| [Kubernetes] Pod의 생명주기(Lifecycle)와 리스타트 정책(Restart Policy) 완벽 이해 (0) | 2026.03.09 |
| [Kubernetes] 쿠버네티스 Deployment 완벽 정리: 중단 없는 서비스 배포의 핵심 (0) | 2026.03.06 |
| [Kubernetes] 어플리케이션의 생명주기와 관리: 프로브(Probes)와 레이블(Labels) (0) | 2026.03.03 |
| Ubuntu 기반 Kubernetes kubeadm 설치 가이드 (containerd + Cilium) (0) | 2026.02.18 |
댓글