Nodejs

 

NestJS 마이크로서비스와 Kubernetes ReplicaSet 실습 튜토리얼

 

마이크로서비스 아키텍처에서 안정성확장성은 필수 조건입니다. NestJS 같은 서버 애플리케이션을 운영 환경에 배포할 때, 단순히 컨테이너를 띄우는 것만으로는 부족합니다.

장애가 발생했을 때 자동으로 복구하고, 필요한 만큼 확장할 수 있어야 하죠. 이를 위한 Kubernetes의 핵심 기능 중 하나가 바로 ReplicaSet입니다.

 

이번 글에서는 Kubernetes ReplicaSet을 직접 만들어보고, NestJS 마이크로서비스 운영 환경에 어떻게 적용할 수 있는지 살펴봅니다.

 

 

1. Pod와 ReplicaSet 개념 이해하기

  • Pod: Kubernetes에서 실행되는 가장 작은 단위. NestJS API 서버나 인증 서버 같은 컨테이너가 Pod 안에서 동작합니다.

  • ReplicaSet: 동일한 Pod를 여러 개 복제하고, 원하는 개수를 항상 유지하도록 관리하는 리소스.

비유하자면, Pod는 "집"이고 ReplicaSet은 "집이 몇 채 있어야 하는지 관리하는 관리인"입니다.

 

 

 

2. ReplicaSet 매니페스트 작성하기

ReplicaSet은 YAML 파일을 통해 정의합니다. 아래는 이번 실습에서 사용할 replicaset.yml 예시입니다.

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-replicaset
  labels:
    app: nginx-app
    type: back-end

spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx-app
        type: back-end
    spec:
      containers:
        - name: nginx-container
          image: nginx
          ports:
            - containerPort: 80
  selector:
    matchLabels:
      app: nginx-app
      type: back-end

 여기서 중요한 부분은 replicas: 3 입니다. 즉, 동일한 nginx Pod를 3개 유지하라는 뜻입니다.

 

 

3. ReplicaSet 적용하기

터미널에서 ReplicaSet을 적용해 보겠습니다.

kubectl apply -f replicaset.yml

출력 결과:

replicaset.apps/nginx-replicaset created

이제 ReplicaSet이 생성되어 nginx Pod가 3개 실행됩니다.

 

 

4. 실행 결과 확인하기

ReplicaSet의 상세 상태를 확인해 보겠습니다.

kubectl describe replicaset nginx-replicaset

출력 요약:

Name:         nginx-replicaset
Namespace:    default
Replicas:     3 current / 3 desired
Pods Status:  3 Running / 0 Failed
Containers:
   nginx-container:
    Image:  nginx
    Port:   80/TCP
Events:
  Created pod: nginx-replicaset-fk5gq
  Created pod: nginx-replicaset-wtv9k
  Created pod: nginx-replicaset-kgvc7

 ReplicaSet이 자동으로 3개의 Pod를 생성하고, 모두 Running 상태임을 확인할 수 있습니다.

 

 

5. ReplicaSet의 관리 기능

실습 중 눈여겨볼 부분은 기존 Pod와의 충돌 처리입니다.

예를 들어, kubectl apply -f 1_pod/로 Pod를 하나 직접 생성했다가 ReplicaSet을 적용하면:

Normal  SuccessfulDelete  Deleted pod: nginx-app

 ReplicaSet이 "내가 관리하지 않는 Pod는 필요 없어"라며 삭제하고, 자신이 관리하는 Pod만 유지합니다.

 

 

6. ReplicaSet 삭제하기

kubectl delete -f replicaset.yml

결과:

replicaset.apps "nginx-replicaset" deleted

확인:

kubectl get pod
No resources found in default namespace.

 ReplicaSet이 삭제되면, 관리하던 Pod들도 자동으로 삭제됩니다.

 

 

7. NestJS 마이크로서비스와 ReplicaSet

NestJS 마이크로서비스에서 ReplicaSet을 적용하면 얻을 수 있는 장점은 다음과 같습니다:

  1. 가용성 확보: Pod가 죽으면 ReplicaSet이 새로운 Pod를 즉시 생성.

  2. 확장성 강화: replicas 값만 조정하면 트래픽 증가에 대응 가능.

  3. 일관성 유지: 동일한 NestJS 서버 Pod가 항상 동일한 환경에서 실행됨.

예를 들어:

  • Auth 서비스 → 최소 2개 Pod 유지 (인증 서버 다운 방지)

  • Notification 서비스 → 트래픽에 따라 3~10개 Pod 자동 확장 (HPA와 결합)

 

 

8. 응용 포인트

  • HPA(Horizontal Pod Autoscaler) 결합: CPU 사용량 기반으로 Pod 수 자동 조정

  • Deployment와 함께 사용: ReplicaSet 단독이 아니라 Deployment로 관리하면 롤링 업데이트, 버전 관리도 가능

  • 실전 운영: NestJS의 각 서비스별 최소 복제본 수를 설정해 안정성 확보

 

 

 

✅전체 요약

  • Pod는 실행 단위, ReplicaSet은 관리 단위.

  • ReplicaSet은 Pod 개수를 보장하고, 죽은 Pod를 자동 복구.

  • NestJS 마이크로서비스 운영에서 안정성과 확장성을 책임지는 핵심 요소.

  • Deployment + HPA까지 확장하면 실제 운영 환경에 적합.

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

환락이 극도에 달했을 때 사람은 어쩐지 일종의 애수를 느끼는 것이다. 천하를 평정하고 득의만만하여 뱃놀이를 할 때에 한(漢) 나라 무제(武帝)가 감개해서 '젊음이 얼마나 오래 갈 것인가 늙으면 어이하리' 하고 읊은 노래함. -고시원

댓글 ( 0)

댓글 남기기

작성