1️⃣ 개요
쿠버네티스에서 **ReplicaSet(RS)**는 Pod의 개수를 일정하게 유지하는 역할을 합니다.
ReplicaSet을 활용하면 특정 수의 Pod가 항상 실행되도록 보장할 수 있으며, Pod가 예기치 않게 종료되더라도 자동으로 복구할 수 있습니다.
Deployment와 함께 사용되는 경우가 많지만, ReplicaSet 자체만으로도 특정 워크로드를 관리하는 데 사용할 수 있습니다.
이번 글에서는 ReplicaSet의 핵심 개념과 활용하는 방법을 정리하겠습니다.
2️⃣ ReplicaSet의 역할과 기본 개념
ReplicaSet은 특정 개수의 Pod를 유지하는 컨트롤러입니다.
ReplicaSet을 사용하면 특정 Pod 개수를 보장하고, Pod가 사라지거나 종료되었을 때 자동으로 새로운 Pod를 생성할 수 있습니다.
✅ ReplicaSet의 주요 기능
기능 | 설명 |
Pod 개수 유지 | 지정한 개수만큼 Pod가 항상 실행되도록 보장 |
Pod 장애 복구 | Pod가 비정상 종료될 경우 자동으로 새로운 Pod 생성 |
레이블 셀렉터 활용 | 특정 레이블을 가진 Pod를 관리 |
📌 ReplicaSet의 주요 설정 요소
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3 # 원하는 Pod 개수
selector:
matchLabels:
app: my-app # 관리할 Pod의 레이블
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-app:v1
✅ replicas: 유지할 Pod 개수 지정
✅ selector: 관리할 Pod를 식별하는 레이블 설정
✅ template: Pod의 템플릿(어떤 Pod를 생성할지 지정)
3️⃣ ReplicaSet과 Deployment의 차이
ReplicaSet은 단독으로 사용할 수도 있지만, 보통 Deployment의 내부에서 관리됩니다.
Deployment는 새로운 버전의 Pod를 배포할 때 활용되며, ReplicaSet을 내부적으로 생성하여 Pod 개수를 관리합니다.
📌 ReplicaSet vs Deployment 비교
특징 | ReplicaSet | Deployment |
Pod 개수 유지 | ✅ 가능 | ✅ 가능 |
배포(Deployment) 관리 | ❌ 직접 관리 불가 | ✅ 새로운 버전 배포 가능 |
롤백 지원 | ❌ 불가능 | ✅ 가능 |
Rolling Update 지원 | ❌ 불가능 | ✅ 가능 |
✅ 운영 환경에서는 Deployment를 사용하는 것이 일반적이며, ReplicaSet을 직접 정의하는 경우는 거의 없습니다.
✅ 하지만, 특정 환경에서 ReplicaSet을 활용하여 직접 Pod 개수를 조정할 수도 있습니다.
4️⃣ ReplicaSet을 활용한 실무 시나리오
🚀 [사용 사례 1] ReplicaSet을 사용하여 특정 개수의 Pod 유지
• 목표: 3개의 Pod가 항상 실행되도록 보장
• 실행 방법: ReplicaSet을 사용하여 Pod 개수를 유지
📌 설정 예제: 3개의 Pod를 유지하는 ReplicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
✅ Pod가 삭제되면 자동으로 새로운 Pod가 생성됩니다.
🚀 [사용 사례 2] ReplicaSet을 수동으로 조정하여 Pod 개수 변경
• 목표: 특정 이벤트가 발생하면 Pod 개수를 변경
• 실행 방법: kubectl scale 명령어를 사용하여 ReplicaSet의 Pod 개수를 변경
📌 Pod 개수 변경 (5개로 확장)
kubectl scale replicaset my-replicaset --replicas=5
📌 현재 ReplicaSet 상태 확인
kubectl get replicaset
✅ Pod 개수를 유동적으로 조정해야 할 때 kubectl scale을 활용할 수 있습니다.
🚀 [사용 사례 3] ReplicaSet을 직접 삭제하면 어떤 일이 일어날까?
• 목표: ReplicaSet을 삭제했을 때 Pod가 유지되는지 확인
• 실행 방법: kubectl delete replicaset 명령어로 ReplicaSet 삭제
📌 ReplicaSet 삭제
kubectl delete replicaset my-replicaset
📌 Pod 상태 확인
kubectl get pod
✅ ReplicaSet을 삭제하면 해당 ReplicaSet이 관리하는 Pod도 함께 삭제됩니다.
✅ 하지만, Pod를 유지하려면 kubectl delete replicaset my-replicaset --cascade=orphan 옵션을 사용할 수 있습니다.
5️⃣ ReplicaSet 사용 시 주의해야 할 점
✅ 1. ReplicaSet의 selector와 template이 일치해야 함
ReplicaSet은 selector로 Pod를 식별하는데, 이 값이 잘못되면 ReplicaSet이 기존 Pod를 관리하지 못하는 문제가 발생할 수 있습니다.
📌 올바른 설정 예제
selector:
matchLabels:
app: my-app # template에 설정된 레이블과 일치해야 함
✅ 2. ReplicaSet 대신 Deployment를 사용하는 것이 일반적
ReplicaSet은 단독으로 사용하기보다는 Deployment 내부에서 활용되는 경우가 많습니다.
Deployment를 사용하면 Rolling Update, 롤백 기능을 추가로 제공하기 때문에 운영 환경에서 더 적합합니다.
📌 Deployment 내부에서 ReplicaSet을 관리하는 예제
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
✅ Deployment를 사용하면 ReplicaSet을 직접 관리하지 않고도 Pod 개수를 유지할 수 있습니다.
🔥 6️⃣ 결론
✔ ReplicaSet은 특정 개수의 Pod를 유지하는 역할을 하며, Pod가 삭제되더라도 자동으로 복구됩니다.
✔ 하지만 운영 환경에서는 Deployment를 사용하는 것이 일반적이며, Deployment 내부에서 ReplicaSet이 관리됩니다.
✔ kubectl scale 명령어를 사용하여 ReplicaSet의 Pod 개수를 조정할 수 있습니다.
✔ ReplicaSet을 삭제하면 해당 Pod도 함께 삭제되므로 주의해야 합니다.
✔ Deployment를 사용하면 롤링 업데이트 및 롤백이 가능하여 더 강력한 운영이 가능합니다.
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [ReplicaSet 심화편 #3] ReplicaSet과 HorizontalPodAutoscaler(HPA)를 활용한 자동 확장 (0) | 2025.03.12 |
---|---|
📌 [ReplicaSet 심화편 #2] ReplicaSet의 동작 원리와 트러블슈팅 (0) | 2025.03.12 |
📌 [Pod 심화편 #6] Pod 트러블슈팅: 자주 발생하는 문제들 (0) | 2025.03.12 |
📌 [Pod 심화편 #5] Pod의 로그 및 모니터링 최적화 (0) | 2025.03.12 |
📌 [Pod 심화편 #4] Pod의 장애 복구 및 자동 재시작 전략 (0) | 2025.03.12 |