Dimensionamento automático de pod vertical no AKS (Serviço de Kubernetes do Azure)

Este artigo fornece uma visão geral do uso do VPA (Dimensionador Automático de Pod Vertical) no AKS (Serviço de Kubernetes do Azure), que se baseia na versão de software livre Kubernetes.

Quando configurado, o VPA define automaticamente solicitações de recursos e limites em contêineres por carga de trabalho com base no uso anterior. O VPA libera CPU e memória para outros pods e ajuda a garantir a utilização efetiva dos clusters do AKS. O Vertical Pod Autoscaler fornece recomendações para o uso de recursos ao longo do tempo. Para gerenciar os aumentos repentinos no uso de recursos, use o Dimensionador Automático Horizontal de Pod, que dimensiona o número de réplicas de pod conforme for necessário.

Benefícios

O Vertical Pod Autoscaler oferece os seguintes benefícios:

  • Analisa e ajusta os recursos de processador e memória para tamanho certo seus aplicativos. A VPA não é responsável apenas pela expansão, mas também redução com base no uso de recursos ao longo do tempo.
  • Um pod com um modo de dimensionamento definido como automático ou recriar será removido se precisar alterar suas solicitações de recursos.
  • Você pode definir restrições de CPU e memória para contêineres individuais especificando uma política de recursos.
  • Garante que os nós tenham recursos corretos para agendamento de pods.
  • Oferece registro configurável de quaisquer ajustes feitos no processador ou nos recursos de memória feitos.
  • Melhora a utilização de recursos do cluster e libera CPU e memória para outros pods.

Limitações e considerações

Considere as seguintes limitações e considerações ao usar o Vertical Pod Autoscaler:

  • O VPA oferece suporte a um máximo de 1.000 pods associados a objetos VerticalPodAutoscaler por cluster.
  • O VPA pode recomendar mais recursos do que os disponíveis no cluster, o que impede que o pod seja atribuído a um nó e executado devido a recursos insuficientes. Você pode superar essa limitação definindo LimitRange como o máximo de recursos disponíveis por namespace, o que garante que os pods não solicitem mais recursos do que o especificado. Você também pode definir recomendações máximas de recursos permitidas por pod em um objeto VerticalPodAutoscaler. O VPA não pode superar completamente um problema de recurso de nó insuficiente. O intervalo de limite é fixo, mas o uso de recursos do nó é alterado dinamicamente.
  • Não recomendamos o uso do VPA com o Horizontal Pod Autoscaler (HPA), que é dimensionado com base nas mesmas métricas de uso de CPU e memória.
  • O Recomendador de VPA armazena apenas até oito dias de dados históricos.
  • O VPA não oferece suporte a cargas de trabalho baseadas em JVM devido à visibilidade limitada do uso real da memória da carga de trabalho.
  • O VPA não oferece suporte à execução de sua própria implementação do VPA junto com ele. Há suporte para ter um recomendador adicional ou personalizado.
  • Não há suporte para contêineres do Windows do AKS.

Visão geral do VPA

O objeto VPA consiste de três componentes:

  • Recomendador: o Recomendador monitora o consumo de recursos atual e passado, incluindo histórico de métricas, eventos OOM (Falta de Memória) e especificações de implantação de VPA, e usa as informações coletadas para fornecer valores recomendados para solicitações/limites de CPU e memória do contêiner.
  • Atualizador: o atualizador monitora pods gerenciados para garantir que suas solicitações de recursos sejam definidas corretamente. Caso contrário, ele remove esses pods para que seus controladores possam recriá-los com as solicitações atualizadas.
  • Controlador de Admissão VPA: o Controlador de Admissão VPA define as solicitações de recursos corretas em novos pods criados ou recriados por seu controlador com base na atividade do Atualizador.

Controladores de admissão do VPA

O Controlador de Admissão VPA é um binário que se registra como um Webhook de Admissão Mutante. Quando um novo pod é criado, o Controlador de Admissão de VPA recebe uma solicitação do servidor de API e avalia se há uma configuração de VPA correspondente ou encontra uma correspondente e usa a recomendação atual para definir solicitações de recursos no pod.

Um trabalho autônomo, overlay-vpa-cert-webhook-check, é executado fora do Controlador de Admissão do VPA. O trabalho overlay-vpa-cert-webhook-check cria e renova os certificados e registra o Controlador de Admissão VPA como um MutatingWebhookConfiguration.

Modos de operação do objeto do VPA

Um recurso do Vertical Pod Autoscaler, mais comumente uma implantação, é inserido para cada controlador que você deseja que tenha requisitos de recursos calculados automaticamente.

Existem quatro modos em que o VPA opera:

  • Auto: o VPA atribui solicitações de recursos durante a criação do pod e atualiza os pods existentes usando o mecanismo de atualização preferencial. Auto, que equivale a Recreate, é o modo padrão. Depois que as atualizações sem reinicialização ou in-loco de solicitações de pod estiverem disponíveis, elas poderão ser usadas como o mecanismo de atualização preferencial pelo modo Auto. Com o modo Auto, o VPA despeja um pod se precisar alterar suas solicitações de recursos. Isso pode fazer com que os pods sejam reiniciados de uma só vez, o que pode causar inconsistências no aplicativo. Você pode limitar as reinicializações e manter a consistência nessa situação usando um PodDisruptionBudget.
  • Recreate: o VPA atribui solicitações de recursos durante a criação do pod e atualiza os pods existentes, removendo-os quando os recursos solicitados diferem significativamente das novas recomendações (respeitando o PodDisruptionBudget, se definido). Você só deve usar esse modo se precisar garantir que os pods sejam reiniciados sempre que a solicitação de recurso for alterada. Caso contrário, recomendamos usar o modo Auto, que aproveita as atualizações sem reinicialização quando disponíveis.
  • Initial: o VPA atribui apenas solicitações de recursos durante a criação do pod. Ele não atualiza os pods existentes. Esse modo é útil para testar e entender o comportamento do VPA sem afetar os pods em execução.
  • Off: o VPA não altera automaticamente os requisitos de recursos dos pods. As recomendações são calculadas e podem ser inspecionadas no objeto do VPA.

Padrão de implantação para desenvolvimento de aplicativos

Se você não estiver familiarizado com o VPA, recomendamos o seguinte padrão de implantação durante o desenvolvimento do aplicativo para identificar suas características exclusivas de utilização de recursos, testar o VPA para verificar se ele está funcionando corretamente e testar junto com outros componentes do Kubernetes para otimizar a utilização de recursos do cluster:

  1. Defina UpdateMode = "Off" em seu cluster de produção e execute o VPA no modo de recomendação para que você possa testar e se familiarizar com o VPA. UpdateMode = "Off" pode evitar a introdução de uma configuração incorreta que pode causar uma interrupção.
  2. Estabeleça a observabilidade primeiro coletando a telemetria de utilização real de recursos durante um determinado período de tempo, o que ajuda você a entender o comportamento e quaisquer sinais de problemas de recursos de contêiner e pod influenciados pelas cargas de trabalho em execução neles.
  3. Familiarize-se com os dados de monitoramento para entender as características de desempenho. Com base nesse insight, defina as solicitações/limites desejados de acordo e, em seguida, na próxima implantação ou atualização.
  4. Defina o valor updateMode como Auto, Recreate ou Initial, dependendo dos seus requisitos.

Próximas etapas

Para saber como configurar o Dimensionador Automático de Pod Vertical no cluster do AKS, consulte Usar o Dimensionador Automático de Pod Vertical no AKS.