

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Escalar implantações de pods com o Horizontal Pod Autoscaler
<a name="horizontal-pod-autoscaler"></a>

O [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) do Kubernetes escala automaticamente o número de pods em uma implantação, um controlador de replicação ou um conjunto de réplicas com base na utilização da CPU desse recurso. Isso pode ajudar a expandir as aplicações para atender ao aumento da demanda ou a reduzi-las quando os recursos não forem necessários, liberando os nós para outras aplicações. Quando você define uma porcentagem de utilização de CPU, o Horizontal Pod Autoscaler reduz ou expande a aplicação para tentar atingir essa meta.

O Horizontal Pod Autoscaler é um recurso da API padrão no Kubernetes que simplesmente requer que uma origem de métrica (como o servidor de métricas do Kubernetes) esteja instalada no cluster do Amazon EKS para funcionar. Você não precisa implantar ou instalar o Horizontal Pod Autoscaler no cluster para começar a escalar as aplicações. Para obter mais informações, consulte [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) na documentação do Kubernetes.

Use este tópico para preparar o Horizontal Pod Autoscaler para o cluster do Amazon EKS e verificar se ele está funcionando com uma aplicação de exemplo.

**nota**  
Este tópico se baseia em [Horizontal Pod autoscaler walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/) na documentação do Kubernetes.
+ Você tem um cluster existente do Amazon EKS. Caso contrário, consulte [Começar a usar o Amazon EKS](getting-started.md).
+ Você tem o servidor de métricas do Kubernetes instalado. Para ter mais informações, consulte [Visualizar o uso de recursos com o servidor de métricas do Kubernetes](metrics-server.md).
+ Você estiver usando um cliente do `kubectl` que está [configurado para se comunicar com o cluster do Amazon EKS](getting-started-console.md#eks-configure-kubectl).

## Execute uma aplicação de teste do Horizontal Pod Autoscaler
<a name="hpa-sample-app"></a>

Nesta seção, você implanta uma aplicação de exemplo para verificar se o Horizontal Pod Autoscaler está funcionando.

**nota**  
Este exemplo é baseado em [Horizontal Pod autoscaler walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/) na documentação do Kubernetes.

1. Implante uma aplicação simples de servidor Web do Apache, com o comando a seguir.

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

   Este pod de servidor web do Apache recebe um limite de CPU de 500 milicpu e está distribuindo na porta 80.

1. Crie um recurso Horizontal Pod Autoscaler para a implantação do `php-apache`.

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

   Esse comando cria um autoscaler que visa 50% de utilização de CPU para a implantação, com um mínimo de um pod e um máximo de dez pods. Quando a carga média da CPU for inferior a 50%, o autoscaler tentará reduzir o número de pods na implantação para um mínimo de um. Quando a carga for maior que 50%, o autoscaler tentará aumentar o número de pods na implantação, até um máximo de dez. Para obter mais informações, consulte [How does the Horizontal Pod Autoscaler work?](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#how-does-a-horizontalpodautoscaler-work) na documentação do Kubernetes.

1. Descreva o autoscaler com o seguinte comando para visualizar seus detalhes.

   ```
   kubectl get hpa
   ```

   Veja um exemplo de saída abaixo.

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

   Como você pode ver, a carga atual da CPU é `0%`, pois ainda não há nenhuma carga no servidor. A contagem de pod já está no limite mais baixo (um), portanto, não pode ter a escala reduzida horizontalmente.

1.  Crie uma carga para o servidor web executando um contêiner.

   ```
   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. Para observar a expansão da implantação, execute periodicamente o seguinte comando em um terminal separado do terminal em que você executou a etapa anterior.

   ```
   kubectl get hpa php-apache
   ```

   Veja um exemplo de saída abaixo.

   ```
   NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
   php-apache   Deployment/php-apache   250%/50%   1         10        5          4m44s
   ```

   A contagem de réplicas pode levar mais de um minuto para aumentar. Enquanto a porcentagem real da CPU for maior do que a porcentagem de meta, a contagem de réplicas aumentará, até 10. Neste caso, é `250%`, então o número de `REPLICAS` continua a aumentar.
**nota**  
Poderá demorar alguns minutos para você ver a contagem de réplicas atingir seu máximo. Se apenas 6 réplicas, por exemplo, forem necessárias para que a carga da CPU permaneça em 50% ou menos, a carga não escalará além de 6 réplicas.

1. Pare a carga. Na janela do terminal em que você está gerando a carga, interrompa a carga mantendo pressionadas as teclas `Ctrl+C`. Você pode observar a escala de réplicas voltar para 1 executando o comando a seguir novamente no terminal em que está observando a redução da escala na horizontal.

   ```
   kubectl get hpa
   ```

   Veja um exemplo de saída abaixo.

   ```
   NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
   php-apache   Deployment/php-apache   0%/50%    1         10        1          25m
   ```
**nota**  
O período de tempo padrão para reduzir a escala na vertical é de cinco minutos, portanto, levará algum tempo para você ver a contagem de réplicas chegar a 1 novamente, até mesmo quando a percentagem de CPU atual for 0%. O período de tempo é modificável. Para obter mais informações, consulte [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) na documentação do Kubernetes.

1. Ao concluir os testes da aplicação de exemplo, exclua os recursos do `php-apache`.

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