Horizontal Pod Autoscaler - Amazon EKS

Horizontal Pod Autoscaler

Kubernetes Horizontal Pod Autoscaler는 배포, 복제 컨트롤러 또는 복제본 집합에 있는 pods의 수를 해당 리소스의 CPU 사용률에 따라 자동으로 조정합니다. 이를 통해 애플리케이션은 증가된 수요를 충족하기 위해 규모를 확장하거나 리소스가 필요 없을 때 규모를 축소할 수 있어 다른 애플리케이션을 위한 노드를 확보할 수 있습니다. 목표 CPU 사용률(백분율)을 설정하면 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 pod 자동 스케일러 연습에 기반을 두고 있습니다.

사전 조건

Horizontal Pod Autoscaler 테스트 애플리케이션 실행

이 섹션에서는 샘플 애플리케이션을 실행하여 Horizontal Pod Autoscaler가 작동 중인지 확인합니다.

참고

이 예제는 Kubernetes 설명서의 Horizontal pod 자동 스케일러 연습에 기반을 두고 있습니다.

Horizontal Pod Autoscaler 설치를 테스트하려면

  1. 다음 명령을 사용하여 간단한 Apache 웹 서버 애플리케이션을 배포합니다.

    kubectl apply -f https://k8s.io/examples/application/php-apache.yaml

    이 Apache 웹 서버 pod에는 500 millicpu CPU 제한이 지정되며 포트 80에서 제공됩니다.

  2. 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 설명서의 Horizontal Pod Autoscaler의 작동 방식을 참조하세요.

  3. 자동 조정기의 세부 정보를 볼 수 있는 다음 명령을 사용하여 자동 조정기를 설명하십시오.

    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)에 있으므로 스케일 인할 수 없습니다.

  4. 컨테이너를 실행하여 웹 서버의 로드를 생성합니다.

    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"
  5. 배포 확장을 보려면 이전 단계를 실행한 터미널과는 별도의 터미널에서 다음 명령을 주기적으로 실행합니다.

    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개 복제본을 초과해서 확장되지 않습니다.

  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를 참조하세요.

  7. 샘플 애플리케이션에 대한 실험이 끝났으면 php-apache 리소스를 삭제하십시오.

    kubectl delete deployment.apps/php-apache service/php-apache horizontalpodautoscaler.autoscaling/php-apache