

 **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.

# Ajuste os recursos do pod com o Vertical Pod Autoscaler
<a name="vertical-pod-autoscaler"></a>

O [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) do Kubernetes ajusta automaticamente as reservas de CPU e de memória para os pods, ajudando a "dimensionar corretamente" as aplicações. Esse ajuste pode melhorar a utilização de recursos do cluster e liberar CPU e memória para outros pods. Este tópico ajuda você a implantar o Vertical Pod Autoscaler no cluster e verificar se ele está funcionando.
+ 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).
+ O OpenSSL `1.1.1` ou posterior instalado no seu dispositivo.

## Implantar o Vertical Pod Autoscaler
<a name="vpa-deploy"></a>

Nesta seção, você implantará o Vertical Pod Autoscaler em seu cluster.

1. Abra uma janela do terminal e navegue até o diretório onde você deseja fazer download do código-fonte do Vertical Pod Autoscaler.

1. Clone o repositório [kubernetes/autoscaler](https://github.com/kubernetes/autoscaler) do GitHub.

   ```
   git clone https://github.com/kubernetes/autoscaler.git
   ```

1. Mude para o diretório `vertical-pod-autoscaler`.

   ```
   cd autoscaler/vertical-pod-autoscaler/
   ```

1. (Opcional) Se você já tiver implantado outra versão do Vertical Pod Autoscaler, remova-a com o comando a seguir.

   ```
   ./hack/vpa-down.sh
   ```

1. Se os nós não tiverem acesso à Internet para o registro do contêiner `registry.k8s.io`, você precisará extrair as seguintes imagens e enviá-las para seu próprio repositório privado. Para obter mais informações sobre como extrair as imagens e enviá-las para seu próprio repositório privado, consulte [Copiar uma imagem de contêiner de um repositório para outro](copy-image-to-repository.md).

   ```
   registry.k8s.io/autoscaling/vpa-admission-controller:0.10.0
   registry.k8s.io/autoscaling/vpa-recommender:0.10.0
   registry.k8s.io/autoscaling/vpa-updater:0.10.0
   ```

   Se você estiver enviando as imagens para um repositório privado do Amazon ECR, substitua `registry.k8s.io` nos manifestos pelo seu registro. Substitua *111122223333* pelo ID da sua conta. Substitua *region-code* pela região da AWS em que seu cluster se encontra. Para usar os comandos a seguir, você precisa ter nomeado seu repositório com o mesmo nome do repositório no manifesto. Se você nomeou o seu repositório como algo diferente, será necessário alterá-lo também.

   ```
   sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/admission-controller-deployment.yaml
   sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/recommender-deployment.yaml
   sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/updater-deployment.yaml
   ```

1. Implante o Vertical Pod Autoscaler no cluster com o comando a seguir.

   ```
   ./hack/vpa-up.sh
   ```

1. Verifique se os pods do Vertical Pod Autoscaler foram criados com êxito.

   ```
   kubectl get pods -n kube-system
   ```

   Veja um exemplo de saída abaixo.

   ```
   NAME                                        READY   STATUS    RESTARTS   AGE
   [...]
   metrics-server-8459fc497-kfj8w              1/1     Running   0          83m
   vpa-admission-controller-68c748777d-ppspd   1/1     Running   0          7s
   vpa-recommender-6fc8c67d85-gljpl            1/1     Running   0          8s
   vpa-updater-786b96955c-bgp9d                1/1     Running   0          8s
   ```

## Testar a instalação do Vertical Pod Autoscaler
<a name="vpa-sample-app"></a>

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

1. Implante o exemplo `hamster.yaml` do Vertical Pod Autoscaler com o comando a seguir.

   ```
   kubectl apply -f examples/hamster.yaml
   ```

1. Obtenha os pods da aplicação de exemplo do `hamster`.

   ```
   kubectl get pods -l app=hamster
   ```

   Veja um exemplo de saída abaixo.

   ```
   hamster-c7d89d6db-rglf5   1/1     Running   0          48s
   hamster-c7d89d6db-znvz5   1/1     Running   0          48s
   ```

1. Descreva um dos pods para visualizar sua reserva de `cpu` e `memory`. Substitua *c7d89d6db-rglf5* por um dos IDs retornados na saída da etapa anterior.

   ```
   kubectl describe pod hamster-c7d89d6db-rglf5
   ```

   Veja um exemplo de saída abaixo.

   ```
   [...]
   Containers:
     hamster:
       Container ID:  docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24
       Image:         registry.k8s.io/ubuntu-slim:0.1
       Image ID:      docker-pullable://registry.k8s.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1
       Port:          <none>
       Host Port:     <none>
       Command:
         /bin/sh
       Args:
         -c
         while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
       State:          Running
         Started:      Fri, 27 Sep 2019 10:35:16 -0700
       Ready:          True
       Restart Count:  0
       Requests:
         cpu:        100m
         memory:     50Mi
   [...]
   ```

   Você pode ver que o pod original reserva 100 milicpu de CPU e 50 mebibytes de memória. Para esta aplicação de exemplo, 100 milicpu é menos do que o pod precisa para ser executado, portanto, ele está restrito à CPU. Ele também reserva muito menos memória do que precisa. A implantação `vpa-recommender` do Vertical Pod Autoscaler analisa os pods do hamster para ver se os requisitos de CPU e memória são apropriados. Se ajustes forem necessários, o `vpa-updater` reiniciará os pods com valores atualizados.

1. Aguarde até que o `vpa-updater` inicie um novo pod do hamster. Isso deve levar um ou dois minutos. Você pode monitorar os pods com o comando a seguir.
**nota**  
Se você não tiver certeza de que um novo pod foi iniciado, compare os nomes dos pod com a lista anterior. Quando o novo pod for iniciado, você verá um novo nome de pod.

   ```
   kubectl get --watch Pods -l app=hamster
   ```

1. Quando um novo pod do hamster for iniciado, descreva-o e visualize as reservas atualizadas de CPU e memória.

   ```
   kubectl describe pod hamster-c7d89d6db-jxgfv
   ```

   Veja um exemplo de saída abaixo.

   ```
   [...]
   Containers:
     hamster:
       Container ID:  docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db
       Image:         registry.k8s.io/ubuntu-slim:0.1
       Image ID:      docker-pullable://registry.k8s.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1
       Port:          <none>
       Host Port:     <none>
       Command:
         /bin/sh
       Args:
         -c
         while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
       State:          Running
         Started:      Fri, 27 Sep 2019 10:37:08 -0700
       Ready:          True
       Restart Count:  0
       Requests:
         cpu:        587m
         memory:     262144k
   [...]
   ```

   Na saída anterior, você pode ver que a reserva de `cpu` e aumentou para 587 milicpu, que é mais de cinco vezes o valor original. A `memory` aumentou para 262.144 Kilobytes, que é cerca de 250 mebibytes, ou cinco vezes o valor original. Esse pod estava com poucos recursos, e o Vertical Pod Autoscaler corrigiu a estimativa com um valor muito mais apropriado.

1. Descreva o recurso `hamster-vpa` para visualizar a nova recomendação.

   ```
   kubectl describe vpa/hamster-vpa
   ```

   Veja um exemplo de saída abaixo.

   ```
   Name:         hamster-vpa
   Namespace:    default
   Labels:       <none>
   Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                   {"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d...
   API Version:  autoscaling.k8s.io/v1beta2
   Kind:         VerticalPodAutoscaler
   Metadata:
     Creation Timestamp:  2019-09-27T18:22:51Z
     Generation:          23
     Resource Version:    14411
     Self Link:           /apis/autoscaling.k8s.io/v1beta2/namespaces/default/verticalpodautoscalers/hamster-vpa
     UID:                 d0d85fb9-e153-11e9-ae53-0205785d75b0
   Spec:
     Target Ref:
       API Version:  apps/v1
       Kind:         Deployment
       Name:         hamster
   Status:
     Conditions:
       Last Transition Time:  2019-09-27T18:23:28Z
       Status:                True
       Type:                  RecommendationProvided
     Recommendation:
       Container Recommendations:
         Container Name:  hamster
         Lower Bound:
           Cpu:     550m
           Memory:  262144k
         Target:
           Cpu:     587m
           Memory:  262144k
         Uncapped Target:
           Cpu:     587m
           Memory:  262144k
         Upper Bound:
           Cpu:     21147m
           Memory:  387863636
   Events:          <none>
   ```

1. Depois de experimentar com a aplicação de exemplo, exclua-a com os comandos a seguir.

   ```
   kubectl delete -f examples/hamster.yaml
   ```