Horizontal Pod Autoscaler를 사용하여 포드 배포 확장
Kubernetes Horizontal Pod Autoscaler
Horizontal Pod Autoscaler는 Kubernetes의 표준 API 리소스로서, 지표 소스(예: Kubernetes 지표 서버)를 작업할 Amazon EKS 클러스터에 설치하기만 하면 됩니다. 애플리케이션 규모를 조정하기 위해 Horizontal Pod Autoscaler를 클러스터에 배포하거나 설치할 필요가 없습니다. 자세한 내용은 Kubernetes 설명서의 Horizontal Pod Autoscaler
이 주제를 통해 Amazon EKS 클러스터용 Horizontal Pod Autoscaler를 준비하고 샘플 애플리케이션에서 작동 중인지 확인하세요.
참고
이 주제는 Kubernetes 설명서의 Horizontal 포드 오토스케일러 연습
-
기존 Amazon EKS 클러스터가 있습니다. 그렇지 않은 경우 Amazon EKS 시작하기 섹션을 참조하세요.
-
Kubernetes 지표 서버가 설치되어 있습니다. 자세한 내용은 KubernetesMetrics 서버를 사용한 리소스 사용량 보기 단원을 참조하십시오.
-
Amazon EKS 클러스터와 통신하도록 구성된
kubectl
클라이언트를 사용 중입니다.
Horizontal Pod Autoscaler 테스트 애플리케이션 실행
이 섹션에서는 샘플 애플리케이션을 실행하여 Horizontal Pod Autoscaler가 작동 중인지 확인합니다.
참고
이 예제는 Kubernetes 설명서의 Horizontal 포드 오토스케일러 연습
-
다음 명령을 사용하여 간단한 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
이 명령을 통해 최소 1개의 Pod에서 최대 10개의 Pods로 배포에 대해 50퍼센트의 CPU 사용률을 달성하려는 자동 스케일러가 생성됩니다. 평균 CPU 로드가 50퍼센트 이하인 경우 자동 스케일러는 배포 시 Pods의 수를 최소 1개로 줄이려고 합니다. 로드가 50퍼센트보다 큰 경우 자동 스케일러는 배포 시 Pods의 수를 최대 10개로 늘이려고 합니다. 자세한 내용은 Kubernetes 설명서의 HorizontalPodAutoscaler의 작동 방식
을 참조하세요. -
자동 조정기의 세부 정보를 볼 수 있는 다음 명령을 사용하여 자동 조정기를 설명하십시오.
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