Usando o Kubernetes Vertical Pod Autoscaler

Descubra como usar o Kubernetes Vertical Pod Autoscaler para ajustar automaticamente as solicitações e os limites de recursos para contêineres em execução em pods em um cluster que você criou usando o Kubernetes Engine (OKE).

Observação

Você não pode usar o Kubernetes Vertical Pod Autoscaler com pools de nós virtuais.
Você pode usar o Kubernetes Vertical Pod Autoscaler para ajustar automaticamente as solicitações e os limites de recursos dos contêineres executados nos pods de uma implantação. O Vertical Pod Autoscaler pode melhorar a utilização de recursos do cluster:
  • Definindo solicitações automaticamente com base no uso para garantir que o valor de recurso apropriado esteja disponível para cada pod.
  • Mantendo proporções entre limites e solicitações que foram especificadas nas configurações iniciais dos contêineres.
  • Reduzindo pods que estão solicitando recursos em excesso, com base no uso ao longo do tempo.
  • Ampliando pods que estão solicitando recursos insuficientes, com base no uso ao longo do tempo.

O Vertical Pod Autoscaler tem três componentes:

  • Recomendador: Monitora o consumo de recursos atual e passado e fornece valores recomendados de solicitação de CPU e memória para um contêiner.
  • Atualizador: Verifica se há pods com recursos incorretos e os exclui, para que os pods possam ser recriados com os valores de solicitação atualizados.
  • Plug-in de Admissão: Define as solicitações corretas de recursos em novos pods (ou seja, pods recém-criados ou recriados pelo controlador deles devido a alterações feitas pelo Atualizador).

Para obter mais informações, consulte Vertical Pod Autoscaler e Gerenciando Recursos para Contêineres na documentação do Kubernetes.

Configure o Vertical Pod Autoscaler usando o objeto de definição de recurso personalizado VerticalPodAutoscaler. O objeto VerticalPodAutoscaler permite especificar os pods a serem verticalmente dimensionados de forma automática e quais recomendações de recursos aplicar (se houver). Para obter mais informações, consulte VerticalPodAutoscaler e Objeto de Definição de Recurso Personalizado na documentação do Kubernetes.

O Vertical Pod Autoscaler exige a instalação de uma origem de métricas, como o Kubernetes Metrics Server, no cluster. Para obter mais informações, consulte Implantando o Kubernetes Metrics Server em um Cluster.

Substituindo Faixas de Limites

O Vertical Pod Autoscaler tenta fazer recomendações dentro dos valores mínimo e máximo especificados por uma faixa de limites, se uma tiver sido definida. No entanto, se a faixa de limites aplicável estiver em conflito com os valores especificados na seção resourcePolicy do manifesto VerticalPodAutoscaler, o Vertical Pod Autoscaler dará prioridade à política de recursos e fará as recomendações corretamente (mesmo que os valores fiquem fora da faixa de limites). Para obter mais informações, consulte Faixas de Limites e Faixa de Limites de Substituição da Política de Recursos na documentação do Kubernetes.

Criando Recomendações sem Aplicá-las

Você pode usar o Vertical Pod Autoscaler para criar e aplicar recomendações ou simplesmente para criar recomendações (sem atualizar os pods). Para simplesmente criar recomendações sem aplicá-las, defina updateMode: "Off" na seção updatePolicy do manifesto VerticalPodAutoscaler.

Quando os pods são criados, o Vertical Pod Autoscaler analisa as necessidades de CPU e memória dos contêineres e registra essas recomendações no campo Status. O Vertical Pod Autoscaler não executa qualquer ação para atualizar as solicitações de recursos para os contêineres em execução.

Excluindo Contêineres Específicos

Você pode usar o Vertical Pod Autoscaler para criar e aplicar recomendações a todos os contêineres de um pod ou pode excluir seletivamente contêineres específicos. Para desativar recomendações para um contêiner específico, na seção resourcePolicy do manifesto VerticalPodAutoscaler, especifique um containerName e defina mode: "Off" na seção containerPolicies.

Observações sobre o Vertical Pod Autoscaler

Observe o seguinte:

  • No momento, é recomendável não usar o Vertical Pod Autoscaler com o Horizontal Pod Autoscaler nas métricas de utilização de CPU ou memória. No entanto, observe que você pode usar o Vertical Pod Autoscaler com o Horizontal Pod Autoscaler em métricas personalizadas e externas. Consulte Suporte para métricas personalizadas na documentação do Kubernetes.
  • As recomendações do Vertical Pod Autoscaler podem exceder os recursos disponíveis (por exemplo, tamanho do nó, tamanho disponível, cota disponível). Observe que a aplicação das recomendações pode fazer com que os pods entrem em um status pendente.
  • Sempre que o Vertical Pod Autoscaler atualiza recursos do pod, o pod é recriado, o que faz com que todos os contêineres em execução sejam reiniciados. Observe que o pod pode ser recriado em outro nó.
  • Você pode usar o Kubernetes Vertical Pod Autoscaler com pools de nós gerenciados, mas não com pools de nós virtuais.

Como Trabalhar com o Vertical Pod Autoscaler

As instruções a seguir orientam você na implantação do Vertical Pod Autoscaler em um cluster. Elas descrevem como:

  • Verificar se o Kubernetes Metrics Server foi instalado em um cluster.
  • Baixe e implante o Vertical Pod Autoscaler.
  • Implantar um aplicativo de amostra.
  • Exibir a operação de dimensionamento em ação.
  • Exibir a recomendação.
  • Limpar, removendo o aplicativo de amostra e o Vertical Pod Autoscaler.

Etapa 1: Verificar a Instalação do Kubernetes Metrics Server

  1. Se você ainda não tiver feito isso, siga as etapas para configurar o arquivo de configuração kubeconfig do cluster e (se necessário) defina a variável de ambiente KUBECONFIG para apontar para o arquivo. Observe que você deve configurar seu próprio arquivo kubeconfig. Não é possível acessar um cluster usando um arquivo kubeconfig que outro usuário tenha configurado. Consulte Configurando o Acesso ao Cluster.
  2. Confirme se o Kubernetes Metrics Server foi implantado com sucesso no cluster e se está disponível digitando:

    kubectl -n kube-system get deployment/metrics-server

    Se o comando retornar um erro `Not Found`, implante o Kubernetes Metrics Server no cluster antes de continuar. Consulte Implantando o Kubernetes Metrics Server em um Cluster.

Etapa 2: Fazer Download e Implantar o Vertical Pod Autoscaler

  1. Faça download do código de origem do Vertical Pod Autoscaler no GitHub. Por exemplo, informando:
    git clone -b vpa-release-0.8 https://github.com/kubernetes/autoscaler.git
  2. Altere para o diretório vertical-pod-autoscaler:

    cd autoscaler/vertical-pod-autoscaler
  3. Se você implantou anteriormente o Vertical Pod Autoscaler, exclua-o digitando:
    ./hack/vpa-down.sh
  4. Implante o Vertical Pod Autoscaler digitando:

    ./hack/vpa-up.sh
  5. Verifique se os pods do Vertical Pod Autoscaler foram criados com sucesso digitando:

    kubectl get pods -n kube-system

    A saída do comando anterior mostra os pods:

    vpa-admission-controller-59d9965cfb-bzs8l 1/1 Running 0 6m34s
    vpa-recommender-5bcb58569-mqdds 1/1 Running 0 6m43s
    vpa-updater-5979cbf757-scw2d 1/1 Running 0 6m46s

    Observe que você provavelmente verá nomes e números diferentes.

Etapa 3: Implantar o Aplicativo de Amostra

  1. Implante o aplicativo hamster de amostra para criar uma implantação e um Vertical Pod Autoscaler correspondente, digitando:
    kubectl apply -f examples/hamster.yaml

    A saída do comando anterior confirma a implantação e a criação:

    verticalpodautoscaler.autoscaling.k8s.io/hamster-vpa created
    deployment.apps/hamster created

    A implantação do aplicativo hamster cria uma implantação com dois pods e um Vertical Pod Autoscaler apontando para a implantação.

  2. Verifique se os pods do hamster foram criados com sucesso digitando:
    kubectl get pods -l app=hamster

    A saída do comando acima confirma a criação:

    NAME                     READY STATUS  RESTARTS AGE
    hamster-7cbfd64f57-mqqnk 1/1   Running 0        54s
    hamster-7cbfd64f57-rq6wv 1/1   Running 0        55s

    Observe que você provavelmente verá nomes diferentes para os pods do hamster.

  3. Exiba as reservas de CPU e memória usando o comando kubectl describe pod e um dos nomes de pods do hamster retornados na etapa anterior. Por exemplo:
    kubectl describe pod hamster-7cbfd64f57-rq6wv

    Observe que o comando anterior é apenas um exemplo. Use um dos nomes de pods do hamster que foram retornados quando você executou o comando kubectl get pods -l app=hamster na etapa anterior.

    Na seção de solicitações da saída, você pode ver as reservas atuais de CPU e memória do pod. Por exemplo:

    Requests:
          cpu:        100m
          memory:     50Mi

    O Vertical Pod Autoscaler (especificamente, o Recomendador) analisa os pods e observa o comportamento deles para determinar se essas reservas de CPU e memória são apropriadas. Observe que você poderá ver diferentes reservas de CPU e memória.

    As reservas não são suficientes porque o aplicativo hamster de amostra está deliberadamente com falta de recursos. Cada pod executa um único contêiner que:

    • solicita 100 milinúcleos, mas tenta utilizar mais de 500 milinúcleos
    • reserva muito menos memória do que precisa para ser executado

Etapa 4: Exibir a Operação de Dimensionamento

Tendo analisado os pods originais no aplicativo hamster de amostra e determinado que as reservas de CPU e memória são inadequadas, o Vertical Pod Autoscaler (especificamente o Atualizador) inicia novamente os pods com valores diferentes, conforme proposto pelo Recomendador. Observe que o Vertical Pod Autoscaler não modifica o modelo na implantação, mas atualiza as solicitações reais dos pods.

  1. Monitore os pods no aplicativo hamster de amostra e aguarde o Atualizador iniciar um novo pod do hamster com um novo nome, digitando:
    kubectl get --watch pods -l app=hamster
  2. Quando você vir que um novo pod do hamster foi iniciado, exiba as reservas de CPU e memória usando o comando kubectl describe pod e o nome do pod. Por exemplo:
    kubectl describe pod hamster-7cbfd64f57-wmg4

    Na seção de solicitações da saída, você pode ver as reservas de CPU e memória do novo pod:

        Requests:
          cpu:        587m
          memory:     262144k

    No exemplo acima, observe que a reserva de CPU aumentou para 587 milinúcleos e a reserva de memória aumentou para 262,144 Kilobytes. O pod original estava com falta de recursos e o Vertical Pod Autoscaler corrigiu as reservas originais com valores mais apropriados. Observe que você poderá ver diferentes reservas de CPU e memória.

Etapa 5: Exibir a Recomendação

Exiba as recomendações feitas pelo Vertical Pod Autoscaler (especificamente, pelo Recomendador) digitando:

kubectl describe vpa/hamster-vpa

A saída do comando anterior mostra as recomendações:

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/v1
Kind:         VerticalPodAutoscaler
Metadata:
  Creation Timestamp:  2020-09-22T18:08:09Z
  Generation:          27
  Resource Version:    19466955
  Self Link:           /apis/autoscaling.k8s.io/v1/namespaces/default/verticalpodautoscalers/hamster-vpa
  UID:                 689cee90-6fed-404d-adf9-b6fa8c1da660
Spec:
  Resource Policy:
    Container Policies:
      Container Name:  *
      Controlled Resources:
        cpu
        memory
      Max Allowed:
        Cpu:     1
        Memory:  500Mi
      Min Allowed:
        Cpu:     100m
        Memory:  50Mi
  Target Ref:
    API Version:  apps/v1
    Kind:         Deployment
    Name:         hamster
  Update Policy:
    Update Mode:  Auto
Status:
  Conditions:
    Last Transition Time:  2020-09-22T18:10:10Z
    Status:                True
    Type:                  RecommendationProvided
  Recommendation:
    Container Recommendations:
      Container Name:  hamster
      Lower Bound:
        Cpu:     519m
        Memory:  262144k
      Target:
        Cpu:     587m
        Memory:  262144k
      Uncapped Target:
        Cpu:     587m
        Memory:  262144k
      Upper Bound:
        Cpu:     1
        Memory:  500Mi
Events:          <none>

Observe que talvez você veja recomendações diferentes.

Etapa 6: Limpar

  1. Remova o aplicativo de amostra digitando:
    kubectl delete -f examples/hamster.yaml
  2. No diretório vertical-pod-autoscaler, exclua a implantação do Vertical Pod Autoscaler digitando:

    ./hack/vpa-down.sh