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을 적용하면 얻을 수 있는 장점은 다음과 같습니다:
가용성 확보: Pod가 죽으면 ReplicaSet이 새로운 Pod를 즉시 생성.
확장성 강화: replicas 값만 조정하면 트래픽 증가에 대응 가능.
일관성 유지: 동일한 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까지 확장하면 실제 운영 환경에 적합.
댓글 ( 0)
댓글 남기기