개요
쿠버네티스를 공부하다 보면 Pod만으로는 부족하다는 것을 곧 깨닫게 됩니다. 특히 애플리케이션이 갑자기 죽었을 때 자동으로 다시 띄워주면 좋겠다고 생각하게 되죠. 이 문제를 해결해주는 리소스가 바로 ReplicaSet입니다.
1. ReplicaSet이란?
ReplicaSet은 말 그대로 Pod의 복제본(Replica)을 지정한 개수만큼 유지하는 역할을 합니다.
만약 3개의 Pod을 유지하도록 설정했다면, 어떤 Pod이 죽더라도 자동으로 다시 생성하여 항상 3개가 살아있도록 보장해줍니다.
중요 개념: ReplicaSet은 Pod을 직접 관리합니다. Pod을 정확히 몇 개 유지할지 지정할 수 있고, 이를 통해 서비스의 안정성과 고가용성을 확보합니다.
2. 왜 필요한가?
다음 상황을 생각해봅시다.
예시:
- 사용자가 많은 웹 서비스를 운영 중입니다.
- Pod이 1개뿐이라면, 이 Pod이 죽는 순간 서비스는 중단됩니다.
- ReplicaSet을 사용해 Pod을 3개로 유지하면, 한두 개가 죽더라도 남은 Pod이 트래픽을 계속 처리할 수 있습니다.
3. 구성 요소 설명
ReplicaSet은 크게 다음과 같은 항목으로 구성됩니다:
항목 | 설명 |
---|---|
replicas | 유지할 Pod의 개수 |
selector | 어떤 Pod을 관리할지 선택하는 조건 |
template | 실제로 생성할 Pod의 정의 (image, port 등) |
4. 예제 YAML
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
해석:
- replicas: 3 → nginx Pod 3개 유지
- matchLabels를 통해 생성된 Pod을 식별
- template 안의 Pod이 3개 생성됨
5. kubectl로 확인하기
kubectl apply -f replicaset.yaml
kubectl get replicaset
kubectl get pods -l app=myapp
get pods
명령으로 실제로 몇 개의 Pod이 생성됐는지 확인할 수 있습니다.- 일부 Pod을 삭제하면, 자동으로 새로운 Pod이 다시 생성됩니다.
6. ReplicaSet과 Pod의 차이점
구분 | Pod | ReplicaSet |
---|---|---|
목적 | 컨테이너 실행 단위 | Pod 수량 유지 및 복제 |
자가 복구 | 불가능 | 가능 |
사용 용도 | 테스트, 단일 실행 | 운영 서비스의 안정성 확보 |
7. 주의사항: Pod 직접 수정은 반영되지 않음
ReplicaSet이 관리하는 Pod을 수동으로 수정하거나 삭제해도, 원래의 template 기준으로 다시 생성됩니다.
즉, 특정 Pod을 고쳐서 쓴다기보단, template을 수정한 뒤 전체 ReplicaSet을 갱신하는 방식이 필요합니다.
8. Deployment와의 차이점
많은 분들이 ReplicaSet과 Deployment를 혼동합니다. 둘의 관계는 다음과 같습니다:
- Deployment는 ReplicaSet을 관리합니다.
- 일반적으로 직접 ReplicaSet을 만들기보다는 Deployment를 사용합니다.
- 하지만 ReplicaSet의 개념을 이해해야 Deployment도 제대로 쓸 수 있습니다.
9. 실습: Pod 하나 삭제해보기
kubectl delete pod <pod-name>
몇 초 뒤에 동일한 Pod이 다시 생기는 것을 확인할 수 있습니다.
이는 ReplicaSet이 지정된 수량을 유지하기 위해 자동으로 새로운 Pod을 생성했기 때문입니다.
10. 자주 묻는 질문 (FAQ)
Q1. ReplicaSet 없이 Pod만 쓰면 안 되나요?
A. 가능은 하지만, Pod이 죽었을 때 다시 생성되지 않습니다. 운영 환경에서는 위험합니다.
Q2. Pod을 늘리고 싶을 땐 어떻게 하나요?
A. replicas
값을 수정한 YAML을 다시 apply
하거나, 아래처럼 kubectl
로 수정할 수 있습니다.
kubectl scale replicaset my-replicaset --replicas=5
Q3. ReplicaSet 대신 Deployment를 써야 하나요?
A. 실제 서비스 운영에서는 Deployment를 주로 사용합니다. 하지만 그 바탕에는 ReplicaSet이 존재합니다.
11. 핵심 요약
항목 | 설명 |
---|---|
역할 | Pod 복제본을 유지하여 고가용성 확보 |
주요 필드 | replicas, selector, template |
사용 이유 | Pod이 죽어도 자동 복구를 위해 |
Deployment와의 관계 | Deployment가 ReplicaSet을 내부적으로 생성하고 관리 |
12. 마무리
ReplicaSet은 쿠버네티스가 제공하는 가장 기본적인 고가용성 보장 메커니즘입니다.
그 자체로는 단순하지만, 이해해두면 이후 배우게 될 Deployment, HPA, Rolling Update 같은 고급 개념을 더 쉽게 받아들일 수 있습니다.
'개발 창고 > Server' 카테고리의 다른 글
Kubernetes DaemonSet 완전 정복: 모든 노드에 Pod를 자동 배포하는 방법 (6) | 2025.08.04 |
---|---|
Kubernetes Deployment 완전정복: Pod 배포와 업데이트 자동화의 핵심 리소스 (2) | 2025.08.03 |
Kubernetes 리소스 - Deployment 완벽 이해하기 (1) | 2025.08.01 |
리소스 - Part1: 레플리카셋(ReplicaSet) (3) | 2025.07.31 |
네트워킹 - Part4: 네트워크 모델 살펴보기 (2) | 2025.07.30 |