- 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가 라운드로빈 방식 등으로 트래픽을 분산시킨다.