Published on

8단계: ReplicaSet과 Auto Scaling

ReplicaSet이란?

  • 지정된 개수만큼 동일한 Pod 복제본을 유지하는 리소스
  • 일반적으로 Deployment 내부에서 자동 생성
  • Pod가 죽거나 삭제되면 자동으로 재생성됨
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: nginx
          image: nginx

수평 Pod 자동 확장(HPA: Horizontal Pod Autoscaler)

  • 리소스 사용량(cpu, memory 등)을 기반으로 자동 스케일 조절
kubectl autoscale deployment myapp --cpu-percent=50 --min=1 --max=5
  • 메트릭 API 설치 확인 필요 (minikube에서는 자동 설치됨)
kubectl get hpa

부하 발생 테스트 (stress 명령어 사용)

kubectl run -i --tty load-generator --image=busybox /bin/sh
# 아래 명령 반복
while true; do wget -q -O- http://myapp; done
  • HPA가 자동으로 Pod를 증가시키는지 확인
  • kubectl get hpa 로 확인

요약

  • ReplicaSet은 지정된 개수의 Pod를 유지 관리하며, Deployment 내부에서 사용된다.
  • HPA는 CPU 사용량 등 리소스 기반으로 자동으로 Pod 수를 조절한다.
  • 실시간 트래픽 증가 대응에 매우 유용한 기능이다.

심화학습

Q1: ReplicaSet과 Deployment는 어떤 관계일까?

A: Deployment는 ReplicaSet을 생성 및 관리하고, ReplicaSet은 실제 Pod 복제본을 생성한다. Deployment는 롤링 업데이트 등 추가 기능을 제공한다.

Q2: HPA가 작동하려면 클러스터에 어떤 전제 조건이 필요할까?

A: metrics-server가 클러스터에 설치되어 있어야 한다. 이 서버가 Pod의 리소스 사용량을 측정하여 HPA가 확장 조건을 판단할 수 있게 한다.

Q3: Pod이 수평 확장되면 로드밸런싱은 어떤 식으로 처리되는가?

A: Kubernetes Service는 새로 생성된 Pod를 자동으로 엔드포인트에 추가하며, 내부적으로 kube-proxy가 라운드로빈 방식 등으로 트래픽을 분산시킨다.