Kubernetes/Kubernetes Advanced

📌 [ReplicaSet 심화편 #2] ReplicaSet의 동작 원리와 트러블슈팅

ygtoken 2025. 3. 12. 12:25
728x90

 

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에 의해 관리되지 않음 - selectortemplate의 레이블 불일치 - 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을 직접 관리할 필요 없이 더 쉽게 운영할 수 있습니다.

728x90