개발 창고/Server

Kubernetes 레플리카셋(ReplicaSet) 완벽 이해하기

Royzero 2025. 8. 2. 22:00
반응형

개요

쿠버네티스를 공부하다 보면 Pod만으로는 부족하다는 것을 곧 깨닫게 됩니다. 특히 애플리케이션이 갑자기 죽었을 때 자동으로 다시 띄워주면 좋겠다고 생각하게 되죠. 이 문제를 해결해주는 리소스가 바로 ReplicaSet입니다.


1. ReplicaSet이란?

ReplicaSet은 말 그대로 Pod의 복제본(Replica)을 지정한 개수만큼 유지하는 역할을 합니다.
만약 3개의 Pod을 유지하도록 설정했다면, 어떤 Pod이 죽더라도 자동으로 다시 생성하여 항상 3개가 살아있도록 보장해줍니다.

중요 개념: ReplicaSet은 Pod을 직접 관리합니다. Pod을 정확히 몇 개 유지할지 지정할 수 있고, 이를 통해 서비스의 안정성과 고가용성을 확보합니다.


2. 왜 필요한가?

다음 상황을 생각해봅시다.

예시:

  1. 사용자가 많은 웹 서비스를 운영 중입니다.
  2. Pod이 1개뿐이라면, 이 Pod이 죽는 순간 서비스는 중단됩니다.
  3. 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 같은 고급 개념을 더 쉽게 받아들일 수 있습니다.

반응형