Horizontal Pod Autoscaler로 Pod 배포 스케일링
Horizontal Pod Autoscaler로 Pod 배포 스케일링
Kubernetes Horizontal Pod Autoscaler는 리소스의 CPU 사용률을 기준으로 배포, 복제 컨트롤러 또는 복제본 세트의 Pod 수를 자동으로 스케일링합니다. 이는 애플리케이션이 증가하는 수요를 충족하도록 확장하거나 리소스가 필요하지 않을 때 축소하여 노드를 다른 애플리케이션에 사용할 수 있게 해줍니다. 대상 CPU 사용률 백분율을 설정하면 Horizontal Pod Autoscaler가 해당 목표를 맞추기 위해 애플리케이션을 확장하거나 축소합니다.
Horizontal Pod Autoscaler는 Kubernetes의 표준 API 리소스로, 동작하려면 메트릭 소스(예: Kubernetes metrics server)가 Amazon EKS 클러스터에 설치되어 있기만 하면 됩니다. 애플리케이션 스케일링을 시작하기 위해 클러스터에 Horizontal Pod Autoscaler를 배포하거나 설치할 필요는 없습니다. 자세한 내용은 Kubernetes 문서의 Horizontal Pod Autoscaler를 참조하세요.
이 주제를 사용해 Amazon EKS 클러스터용 Horizontal Pod Autoscaler를 준비하고 샘플 애플리케이션으로 작동하는지 확인하세요.
참고
이 주제는 Kubernetes 문서의 Horizontal Pod autoscaler walkthrough를 기반으로 합니다.
출처: 문서
본문
사전 요구 사항
- 기존 Amazon EKS 클러스터. 없다면 Amazon EKS 시작하기(Get started with Amazon EKS)를 참조하세요.
- Kubernetes Metrics Server가 설치되어 있습니다. 자세한 내용은 Kubernetes Metrics Server로 리소스 사용률 보기를 참조하세요.
- Amazon EKS 클러스터와 통신하도록 구성된
kubectl클라이언트를 사용하고 있습니다.
Horizontal Pod Autoscaler 테스트 애플리케이션 실행
이 섹션에서는 Horizontal Pod Autoscaler가 작동하는지 확인하기 위해 샘플 애플리케이션을 배포합니다.
참고
이 예시는 Kubernetes 문서의 Horizontal Pod autoscaler walkthrough를 기반으로 합니다.
다음 명령으로 간단한 Apache 웹 서버 애플리케이션을 배포합니다.
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
이 Apache 웹 서버 Pod에는 500 millicpu CPU 제한이 주어지고 포트 80에서 서비스를 제공합니다.
php-apache 배포용 Horizontal Pod Autoscaler 리소스를 만듭니다.
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
이 명령은 배포에 대해 CPU 사용률 50%를 목표로 하고 최소 Pod 1개, 최대 Pod 10개를 가지는 오토스케일러를 만듭니다. 평균 CPU 부하가 50%보다 낮으면 오토스케일러는 배포의 Pod 수를 최소 1개까지 줄이려 합니다. 부하가 50%보다 높으면 오토스케일러는 배포의 Pod 수를 최대 10개까지 늘리려 합니다. 자세한 내용은 Kubernetes 문서의 HorizontalPodAutoscaler는 어떻게 동작하나요?(How does a HorizontalPodAutoscaler work?)를 참조하세요.
다음 명령으로 오토스케일러를 describe하여 세부 정보를 봅니다.
kubectl get hpa
예시 출력은 다음과 같습니다.
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0%/50% 1 10 1 51s
보시다시피 아직 서버에 부하가 없으므로 현재 CPU 부하는 0%입니다. Pod 수는 이미 가장 낮은 경계(1)에 있으므로 더 축소할 수 없습니다.
컨테이너를 실행해 웹 서버에 부하를 만듭니다.
kubectl run -i \
--tty load-generator \
--rm --image=busybox \
--restart=Never \
-- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
배포가 확장되는 것을 보려면 이전 단계를 실행한 터미널과 별도의 터미널에서 다음 명령을 주기적으로 실행합니다.
kubectl get hpa php-apache
예시 출력은 다음과 같습니다.
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 250%/50% 1 10 5 4m44s
복제본 수가 늘어나는 데 1분 넘게 걸릴 수 있습니다. 실제 CPU 백분율이 대상 백분율보다 높은 한 복제본 수는 최대 10까지 증가합니다. 이 경우 250%이므로 REPLICAS 수가 계속 증가합니다.
참고
복제본 수가 최대에 도달하는 데 몇 분이 걸릴 수 있습니다. 예를 들어 CPU 부하를 50% 이하로 유지하는 데 복제본이 6개만 필요하다면 부하가 6개 복제본을 넘어 스케일링되지 않습니다.
부하를 중지합니다. 부하를 생성 중인 터미널 창에서 Ctrl+C 키를 길게 눌러 부하를 중지합니다. 스케일링을 관찰 중인 터미널에서 다음 명령을 다시 실행해 복제본이 1로 축소되는 것을 볼 수 있습니다.
kubectl get hpa
예시 출력은 다음과 같습니다.
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0%/50% 1 10 1 25m
참고
축소의 기본 시간 프레임은 5분이므로 현재 CPU 백분율이 0%여도 복제본 수가 다시 1에 도달하는 데 시간이 걸립니다. 시간 프레임은 수정할 수 있습니다. 자세한 내용은 Kubernetes 문서의 Horizontal Pod Autoscaler를 참조하세요.
샘플 애플리케이션 실험이 끝나면 php-apache 리소스를 삭제합니다.
kubectl delete deployment.apps/php-apache service/php-apache horizontalpodautoscaler.autoscaling/php-apache