

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# Horizontal Pod Autoscaler를 사용하여 포드 배포 확장
<a name="horizontal-pod-autoscaler"></a>

Kubernetes [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)는 배포, 복제 컨트롤러 또는 복제본 집합에 있는 포드의 수를 해당 리소스의 CPU 사용률에 따라 자동으로 조정합니다. 이를 통해 애플리케이션은 증가된 수요를 충족하기 위해 규모를 확장하거나 리소스가 필요 없을 때 규모를 축소할 수 있어 다른 애플리케이션을 위한 노드를 확보할 수 있습니다. 목표 CPU 사용률(백분율)을 설정하면 Horizontal Pod Autoscaler가 이 목표를 충족하기 위해 애플리케이션을 축소 또는 확장합니다.

Horizontal Pod Autoscaler는 Kubernetes의 표준 API 리소스로서, 지표 소스(예: Kubernetes 지표 서버)를 작업할 Amazon EKS 클러스터에 설치하기만 하면 됩니다. 애플리케이션 규모를 조정하기 위해 Horizontal Pod Autoscaler를 클러스터에 배포하거나 설치할 필요가 없습니다. 자세한 내용은 Kubernetes 설명서의 [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)를 참조하십시오.

이 주제를 통해 Amazon EKS 클러스터용 Horizontal Pod Autoscaler를 준비하고 샘플 애플리케이션에서 작동 중인지 확인하세요.

**참고**  
이 주제는 쿠버네티스 문서의 [HorizontalPodAutoscaler 연습](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)에 기반을 두고 있습니다.
+ 기존 Amazon EKS 클러스터가 있습니다. 그렇지 않은 경우 [Amazon EKS 시작하기](getting-started.md) 섹션을 참조하세요.
+ Kubernetes 지표 서버가 설치되어 있습니다. 자세한 내용은 [Kubernetes 지표 서버를 사용한 리소스 사용량 보기](metrics-server.md) 단원을 참조하십시오.
+ [Amazon EKS 클러스터와 통신하도록 구성된](getting-started-console.md#eks-configure-kubectl) `kubectl` 클라이언트를 사용 중입니다.

## Horizontal Pod Autoscaler 테스트 애플리케이션 실행
<a name="hpa-sample-app"></a>

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

**참고**  
이 예시는 쿠버네티스 문서의 [HorizontalPodAutoscaler 연습](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)에 기반을 두고 있습니다.

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

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

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

1. `php-apache` 배포를 위해 Horizontal Pod Autoscaler 리소스를 생성합니다.

   ```
   kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
   ```

   이 명령을 통해 최소 1개에서 최대 10개의 포드로 배포에 대해 50퍼센트의 CPU 사용률을 달성하려는 자동 조정기가 생성됩니다. 평균 CPU 로드가 50퍼센트 이하인 경우 오토스케일러는 배포 시 포드 수를 최소 1개로 줄이려고 합니다. 로드가 50%보다 큰 경우 자동 조정기는 배포 시 포드 수를 최대 10개로 늘이려고 합니다. 자세한 내용은 쿠버네티스 문서의 [HorizontalPodAutoscaler는 어떻게 작동하는가?](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#how-does-a-horizontalpodautoscaler-work)를 참조하세요.

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

   ```
   kubectl get hpa
   ```

   예제 출력은 다음과 같습니다.

   ```
   NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
   php-apache   Deployment/php-apache   0%/50%    1         10        1          51s
   ```

   보시다시피 서버에 아직 로드가 없으므로 현재 CPU 로드가 `0%`입니다. 포드 수가 이미 가장 낮은 경계(1)에 있으므로 크기를 조정할 수 없습니다.

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"
   ```

1. 배포 확장을 보려면 이전 단계를 실행한 터미널과는 별도의 터미널에서 다음 명령을 주기적으로 실행합니다.

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

1. 로드를 중지합니다. 로드를 생성 중인 터미널 창에서 `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](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)를 참조하십시오.

1. 샘플 애플리케이션에 대한 실험이 끝났으면 `php-apache` 리소스를 삭제하세요.

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