Ajustar os recursos de pods com o Vertical Pod Autoscaler - Amazon EKS

Ajudar a melhorar esta página

Quer contribuir para este guia do usuário? Role até o final desta página e selecione Editar esta página no GitHub. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.

Ajustar os recursos de pods com o Vertical Pod Autoscaler

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

Pré-requisitos

Implantar o Vertical Pod Autoscaler

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

Como implantar o Vertical Pod Autoscaler
  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.

  2. Clone o repositório kubernetes/autoscaler do GitHub.

    git clone https://github.com/kubernetes/autoscaler.git
  3. Mude para o diretório vertical-pod-autoscaler.

    cd autoscaler/vertical-pod-autoscaler/
  4. (Opcional) Se você já tiver implantado outra versão do Vertical Pod Autoscaler, remova-a com o comando a seguir.

    ./hack/vpa-down.sh
  5. 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.

    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 está o cluster. 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
  6. Implante o Vertical Pod Autoscaler no cluster com o comando a seguir.

    ./hack/vpa-up.sh
  7. 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

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

Como testar a instalação do Vertical Pod Autoscaler
  1. Implante o exemplo hamster.yaml do Vertical Pod Autoscaler com o comando a seguir.

    kubectl apply -f examples/hamster.yaml
  2. 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
  3. Descreva um dos Pods para visualizar a 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 tem restrição de CPU. Ele também reserva muito menos memória do que precisa. A implantação vpa-recommender do Vertical Pod Autoscaler analisa os Pods 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.

  4. Aguarde até que o vpa-updater inicie e um novo Pod hamster. Isso deve levar um ou dois minutos. É possível 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 de 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
  5. Quando um novo Pod 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.

  6. 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>
  7. Depois de experimentar com a aplicação de exemplo, exclua-a com os comandos a seguir.

    kubectl delete -f examples/hamster.yaml