1.3.2 Horizontal Pod Autoscaler
CPU 또는 메모리 기반의 Horizontal Pod Autoscaler를 사용하기 위해서는 먼저 Metrics Server의 설치가 필요합니다. Metrics Server가 설치가 되어 있는지 확인합니다.
kubectl -n kube-system get deployment/metrics-server
샘플 애플리케이션을 배포합니다.
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
배포 파일
- 500m cpu limit: 최대 500 밀리코어까지 사용할 수 있게 지정. 0.5 코어
- 200m cpu request: 기본 200 밀리코어까지 사용할 수 있게 지정, 0.2 코어로 해당 자원은 보장받습니다.
... spec: containers: - name: php-apache image: registry.k8s.io/hpa-example ports: - containerPort: 80 resources: limits: cpu: 500m requests: cpu: 200m ...
HPA 설정
Pod의 CPU 상태에 따라 최소 1개에서 최대 10개로 replica를 만들도록 HPA를 설정합니다.
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
HPA 설정을 조회합니다.
현재는 CPU 부하가 없는 상태로 Pod 1입니다.
$ kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 66s
부하를 발생합니다.
부하 발생용 Pod를 만듭니다.
kubectl run -it --rm load-generator --image=busybox /bin/sh
Pod 안에서 다음명령을 실행하여 부하를 발생시킵니다.
while true; do wget -q -O- http://php-apache; done
실행결과
$ kubectl run -it --rm load-generator --image=busybox /bin/sh If you don't see a command prompt, try pressing enter. / # / # while true; do wget -q -O- http://php-apache; done OK!OK!OK!OK!OK!OK!OK!OK!...
새 터미널을 열어서 다시 HPA 설정을 다시 조회합니다. 부하로 인해 Pod가 7개까지 늘어 난 것을 볼 수 있습니다.
$ kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 50%/50% 1 10 7 8m25s $ kubectl top pod NAME CPU(cores) MEMORY(bytes) load-generator 17m 0Mi php-apache-7495ff8f5b-cngzz 147m 11Mi php-apache-7495ff8f5b-g6hsr 105m 11Mi php-apache-7495ff8f5b-h4wn6 72m 11Mi php-apache-7495ff8f5b-jw9mq 76m 11Mi php-apache-7495ff8f5b-kcbgw 147m 11Mi php-apache-7495ff8f5b-vpcrj 150m 11Mi php-apache-7495ff8f5b-wsf8c 73m 11Mi
부하를 발생한 터미널로 돌아가 부하를 중지합니다. Ctrl+C 눌러 중지하고, exit 명령으로 컨테이너 밖으로 나옵니다.
현재 HPA 상태를 조회해 봅니다. 부하발생기의 종료로 현재 평균 CPU는 0이지만, 여전히 Pod는 7개 그대로인 상태입니다.
$ kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 7 34m
기본 설정이라면, 5분이 지난후 다시 조회해 보면, Pod가 1개로 줄어든 것을 볼 수 있습니다.
$ kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 40m
HPA 관련 추가적인 설정과 기본 다운스케일 안정화 윈도우 설정값 등은 공식 문서를 참고합니다.
- Horizontal Pod Autoscaling > Example: change downscale stabilization window
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.