1️⃣ 개요
ReplicaSet은 쿠버네티스에서 Pod의 개수를 유지하는 역할을 하는 컨트롤러입니다.
일반적으로 Deployment 내부에서 사용되지만, 단독으로도 활용할 수 있습니다.
실무에서는 ReplicaSet이 Pod를 제대로 관리하지 못하거나, 예상과 다르게 동작하는 경우가 발생할 수 있습니다.
이번 글에서는 ReplicaSet의 동작 원리를 이해하고, 자주 발생하는 문제와 해결 방법을 정리하겠습니다.
2️⃣ ReplicaSet의 동작 원리
ReplicaSet은 선언적 방식으로 Pod 개수를 유지합니다.
사용자가 특정 개수(replicas)를 설정하면, 쿠버네티스 컨트롤러가 현재 실행 중인 Pod 개수를 지속적으로 감시하고, 부족하면 생성하고 초과하면 삭제합니다.
📌 ReplicaSet의 주요 동작 방식
동작 유형 | 설명 | 예시 |
Pod 생성 | 현재 실행 중인 Pod 개수가 설정된 replicas보다 적을 경우 새로운 Pod 생성 | 설정: replicas=3, 현재 Pod: 1개 → 2개 추가 생성 |
Pod 삭제 | 현재 실행 중인 Pod 개수가 설정된 replicas보다 많을 경우 초과된 Pod 삭제 | 설정: replicas=3, 현재 Pod: 5개 → 2개 자동 삭제 |
Pod 장애 감지 | Pod가 비정상 종료되면 자동으로 새로운 Pod 생성 | 특정 Pod가 종료되면 동일한 Pod 자동 생성 |
✅ ReplicaSet은 selector와 template을 기반으로 관리되는 Pod를 결정합니다.
📌 ReplicaSet의 기본 설정
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: my-app # 관리할 Pod 선택
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
✅ replicas: 유지할 Pod 개수를 지정
✅ selector: 관리할 Pod를 선택하는 기준
✅ template: Pod의 템플릿 (새로운 Pod 생성 시 적용)
3️⃣ ReplicaSet이 예상과 다르게 동작하는 주요 원인과 해결 방법
ReplicaSet이 제대로 동작하지 않는 경우, 다음과 같은 원인일 가능성이 높습니다.
📌 ReplicaSet 문제 해결 가이드
문제 유형 | 증상 | 원인 | 해결 방법 |
Pod이 생성되지 않음 | kubectl get pods 실행 시 Pod 개수가 늘어나지 않음 | - 노드 리소스 부족- selector가 올바르게 설정되지 않음 | - kubectl describe node로 노드 상태 확인- kubectl describe replicaset으로 이벤트 확인 |
Pod이 자동으로 삭제됨 | 특정 Pod가 이유 없이 삭제됨 | - replicas 값이 변경됨- 새로운 ReplicaSet이 생성됨 | - kubectl get rs로 기존 ReplicaSet 확인- kubectl edit replicaset으로 설정 확인 |
Pod이 예상보다 많이 생성됨 | kubectl get pods 실행 시 설정된 개수보다 많은 Pod이 실행됨 | - 기존 Pod와 새로운 ReplicaSet이 충돌 | - kubectl get rs -o wide로 모든 ReplicaSet 확인 후 불필요한 것 삭제 |
ReplicaSet이 특정 Pod를 관리하지 않음 | 기존 Pod가 새로운 ReplicaSet에 의해 관리되지 않음 | - selector와 template의 레이블 불일치 | - kubectl describe rs로 레이블 확인 후 수정 |
✅ ReplicaSet이 정상적으로 동작하지 않는 경우, kubectl describe rs를 실행하여 이벤트 및 설정을 확인해야 합니다.
4️⃣ Pod이 생성되지 않을 때 해결 방법
ReplicaSet을 생성했지만 Pod이 생성되지 않는 경우 노드 리소스 부족 또는 레이블 불일치일 가능성이 높습니다.
📌 트러블슈팅 방법
1️⃣ ReplicaSet 이벤트 확인 (kubectl describe rs)
kubectl describe rs my-replicaset
2️⃣ 노드 리소스 상태 확인 (kubectl describe node)
kubectl describe node <node-name>
3️⃣ Pod이 생성되지 않는 경우 selector 확인 (kubectl get pods --show-labels)
kubectl get pods --show-labels
✅ Pod이 생성되지 않는다면, selector가 올바르게 설정되었는지 확인하고, 노드 리소스를 점검해야 합니다.
5️⃣ ReplicaSet이 예상보다 많은 Pod을 생성하는 경우
ReplicaSet이 관리하는 Pod보다 더 많은 Pod이 실행되는 경우, 중복된 ReplicaSet이 생성되었을 가능성이 높습니다.
📌 해결 방법
1️⃣ 현재 실행 중인 모든 ReplicaSet 확인 (kubectl get rs)
kubectl get rs
2️⃣ 중복된 ReplicaSet 삭제 (kubectl delete rs <replicaset-name>)
kubectl delete rs old-replicaset
3️⃣ Pod 개수 확인 (kubectl get pods)
kubectl get pods
✅ 새로운 ReplicaSet이 생성되었는지 확인하고, 필요 없는 ReplicaSet을 삭제해야 합니다.
6️⃣ ReplicaSet이 특정 Pod를 관리하지 않는 경우
ReplicaSet이 특정 Pod를 관리하지 않는다면, selector와 template의 레이블이 일치하지 않는 경우일 수 있습니다.
📌 트러블슈팅 방법
1️⃣ ReplicaSet의 selector 확인 (kubectl describe rs)
kubectl describe rs my-replicaset
2️⃣ 현재 실행 중인 Pod의 레이블 확인 (kubectl get pods --show-labels)
kubectl get pods --show-labels
3️⃣ selector 수정하여 레이블을 맞추기 (kubectl edit rs)
kubectl edit rs my-replicaset
✅ selector와 template의 레이블이 일치해야 ReplicaSet이 Pod를 정상적으로 관리할 수 있습니다.
🔥 7️⃣ 결론
✔ ReplicaSet은 Pod의 개수를 유지하는 역할을 하며, 부족하면 생성하고 초과하면 삭제합니다.
✔ ReplicaSet이 정상적으로 동작하지 않는 경우 kubectl describe rs 명령어를 사용하여 이벤트와 설정을 확인해야 합니다.
✔ Pod이 생성되지 않는 경우 selector와 노드 리소스 상태를 점검해야 합니다.
✔ 중복된 ReplicaSet이 생성되면 필요 없는 ReplicaSet을 삭제해야 합니다.
✔ Deployment를 사용하면 ReplicaSet을 직접 관리할 필요 없이 더 쉽게 운영할 수 있습니다.
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [ReplicaSet 심화편 #4] ReplicaSet과 PodDisruptionBudget(PDB)을 활용한 안정적인 운영 (0) | 2025.03.12 |
---|---|
📌 [ReplicaSet 심화편 #3] ReplicaSet과 HorizontalPodAutoscaler(HPA)를 활용한 자동 확장 (0) | 2025.03.12 |
📌 [ReplicaSet 심화편 #1] ReplicaSet의 역할과 활용 방법 (0) | 2025.03.12 |
📌 [Pod 심화편 #6] Pod 트러블슈팅: 자주 발생하는 문제들 (0) | 2025.03.12 |
📌 [Pod 심화편 #5] Pod의 로그 및 모니터링 최적화 (0) | 2025.03.12 |