Kubernetes/Kubernetes Advanced

📌 [ReplicaSet 심화편 #1] ReplicaSet의 역할과 활용 방법

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

 

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를 사용하면 롤링 업데이트 및 롤백이 가능하여 더 강력한 운영이 가능합니다.

 

728x90