Partilhar via


Habilite o dimensionamento de complementos com custo otimizado em seu cluster do Serviço Kubernetes do Azure (AKS) (Visualização)

Este artigo fornece uma visão geral do dimensionamento de complementos com custo otimizado no Serviço Kubernetes do Azure (AKS). Com o dimensionamento de complementos com custo otimizado, você pode gerenciar complementos que exigem CPU e memória personalizadas substituindo as configurações padrão ou habilitando o dimensionamento automático. Esse recurso garante que os recursos não sejam excessivamente alocados para pods adicionais, melhorando a economia de custos e a eficiência do cluster.

Visão geral

A habilitação do dimensionamento de complementos com custo otimizado instala o complemento Vertical Pod Autoscaler (VPA), permitindo que os complementos suportados sejam dimensionados automaticamente com base no uso.

Esse recurso também permite que você personalize as solicitações e limites padrão de CPU/memória do recurso em Implantações e DaemonSets, a CPU/memória máxima e mínima permitida e o modo de atualização VPA dentro de recursos personalizados VPA. Para obter mais informações, consulte Personalizar a configuração de recursos para complementos AKS.

Complementos AKS suportados

Os seguintes complementos gerenciados pelo AKS suportam o recurso de dimensionamento de complementos com custo otimizado:

Suplemento Comportamento de habilitação Nome do recurso personalizado do VPA Comando para verificar o recurso personalizado VPA
CoreDNS Ativado por padrão em novos clusters AKS. coredns kubectl get vpa coredns --namespace kube-system
Identidade da carga de trabalho Complemento opcional que requer ativação manual. azure-wi-webhook-controller-manager kubectl get vpa azure-wi-webhook-controller-manager --namespace kube-system
Integridade da imagem Complemento opcional que requer ativação manual. ratify kubectl get vpa ratify --namespace gatekeeper-system
Observabilidade de Rede (Retina) Complemento opcional que requer ativação manual. retina-agent e retina-operator kubectl get vpa retina-agent --namespace kube-system e kubectl get vpa retina-operator --namespace kube-system

Modos VPA suportados para dimensionamento de módulos adicionais com custo otimizado

Atualmente, o VPA suporta os seguintes modos de dimensionamento de complementos com custo otimizado:

  • Desativado: o VPA fornece dados de recomendação de recursos, mas não os aplica ao pod de destino.
  • Inicial (modo padrão): O VPA aplica automaticamente as recomendações de CPU e memória ao pod de destino quando ele é reiniciado, mas não inicia a reinicialização em si.
  • Auto: O VPA atualiza automaticamente as solicitações de CPU e memória para pods com base em recomendações.

Observação

Ao habilitar o dimensionamento de complementos para otimização de custo, considere as seguintes informações:

  • Se você excluir o recurso personalizado Deployment, DaemonSet ou VPA, as alterações serão revertidas para a configuração inicial do complemento AKS.
  • O recurso de dimensionamento de complementos com custo otimizado permite que o complemento VPA dimensione automaticamente os complementos AKS suportados. Ele não funciona com VPA auto-hospedado.
  • AKS reinicia os pods de add-ons ao ativar o dimensionamento de add-ons para otimização de custos. CoreDNS é atualmente a única exceção para evitar possíveis interrupções durante a reinicialização. Para obter mais informações, consulte CoreDNS autoscaling behavior.

Advertência

Certifique-se de ter recursos de computação suficientes no pool de nós do sistema para seus complementos ao habilitar o dimensionamento de complementos com custo otimizado. O AKS recomenda ativar o autodimensionador de cluster ou o provisionamento automático de nós para garantir o dimensionamento correto de seus recursos de computação automaticamente. Monitore pods de complemento pendentes ao usar o recurso de dimensionamento de complementos com custo otimizado. O VPA pode recomendar solicitações de recursos que excedam a capacidade disponível dos nós, potencialmente levando aos pods não agendáveis. Você pode controlar esse comportamento personalizando valores min/max para solicitações e limites de addons suportados.

Pré-requisitos

Importante

Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

Instalar a extensão da CLI do aks-preview Azure

  1. Instale a aks-preview extensão usando o az extension add comando.

    az extension add --name aks-preview
    
  2. Atualize para a versão mais recente da extensão usando o az extension update comando.

    az extension update --name aks-preview
    

Registrar o recurso de visualização de dimensionamento de complementos com custo otimizado

  1. Registe o recurso de visualização de dimensionamento de complemento otimizado em termos de custo usando o comando az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "AKS-AddonAutoscalingPreview"
    

    Leva alguns minutos para que o status apareça como Registrado.

  2. Verifique o status do registro usando o az feature show comando.

    az feature show --namespace "Microsoft.ContainerService" --name "AKS-AddonAutoscalingPreview"
    
  3. Quando o estado aparecer como Registrado, reexecute o registo do provedor Microsoft.ContainerService com o comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Habilite o dimensionamento de complementos com custo otimizado em um cluster AKS

Ao ativar o complemento, o cluster AKS instala automaticamente o complemento VPA. Os complementos AKS que suportam o recurso de dimensionamento de complementos com custo otimizado têm comportamento de ativação diferente.

Observação

Se você estiver usando Bicep, modelos ARM ou Terraform, defina VerticalPodAutoscaler como "True" e AddonAutoscaling como "enabled".

Ative o escalonamento de complementos com custo otimizado em um novo cluster

  • Ative o dimensionamento de add-ons otimizado para custos em um novo cluster AKS usando o comando az aks create com a opção --enable-optimized-addon-scaling.

    az aks create --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --enable-optimized-addon-scaling
    

Habilitar o dimensionamento de complementos com custo otimizado em um cluster existente

  • Habilite o dimensionamento de complementos com custo otimizado em um cluster AKS existente usando o az aks update comando com o --enable-optimized-addon-scaling sinalizador.

    az aks update --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --enable-optimized-addon-scaling
    

Desativar o dimensionamento de complementos com custo otimizado em um cluster AKS

  • Desative o dimensionamento de complementos com otimização de custos em um cluster AKS usando o comando az aks update com a flag --disable-optimized-addon-scaling.

    az aks update --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --disable-optimized-addon-scaling
    

Observação

A desativação da funcionalidade de escalonamento de complemento com custo otimizado não desativa o complemento VPA por padrão. Para desativar o VPA, consulte Desativar VPA em um cluster AKS.

Personalizar a configuração de recursos padrão

Com o recurso de dimensionamento de complementos otimizado em termos de custo ativado em seu cluster, você pode personalizar as configurações padrão de CPU/memória para os recursos do complemento, bem como a configuração VPA padrão para complementos AKS suportados. Para obter mais informações, consulte Personalizar a configuração de recursos para complementos AKS.

Observação

Com o modo Inicial , o VPA aplica as solicitações de CPU e memória recomendadas somente quando um pod é criado ou atualizado. Se quiser que as recomendações entrem em vigor imediatamente, por favor, atualize os pods manualmente. Antes de aplicar manualmente os valores recomendados, verifique se o modo de atualização do VPA está definido como Inicial ou Automático no recurso personalizado do VPA.

  1. Verifique o status do pod e a utilização da CPU/memória para verificar se o pod está sendo executado conforme o esperado.

    O exemplo a seguir usa o kubectl get pod comando para verificar o status de um pod CoreDNS:

    kubectl get pod <coredns-pod-name> --namespace kube-system -o yaml
    

    A saída a seguir mostra um exemplo de status de um pod CoreDNS:

    apiVersion: v1
    kind: Pod
    metadata:
      name: <coredns-pod-name>
      namespace: kube-system
    spec:
      ...
      containers:
      - name: coredns
        resources:
          limits:
            cpu: "3"
            memory: "500Mi"
          requests:
            cpu: "100m"
            memory: "70Mi"
    
  2. Obtenha o valor recomendado do VPA usando o kubectl get vpa comando.

    kubectl get vpa coredns --namespace kube-system
    

    A saída a seguir mostra um exemplo do valor recomendado de VPA para um pod CoreDNS:

    NAME      MODE      CPU   MEM        PROVIDED   AGE
    coredns   Initial   11m   23574998   True       44m
    
  3. Se você quiser usar os valores recomendados pelo VPA, exclua manualmente o pod usando o kubectl delete pod comando para reiniciar o pod com os valores recomendados pelo VPA.

    kubectl delete pod <coredns-pod-name> --namespace kube-system
    
  4. Depois que o pod for reiniciado, verifique o status do pod e as atualizações de CPU/memória usando o kubectl get pod comando.

    kubectl get pod <coredns-pod-name> --namespace kube-system -o yaml
    

    A saída a seguir mostra um exemplo de status de um pod CoreDNS após a aplicação dos valores recomendados pelo VPA:

    apiVersion: v1
    kind: Pod
    metadata:
      name: <coredns-pod-name>
      namespace: kube-system
    spec:
      ...
      containers:
      - name: coredns
        resources:
          limits:
            cpu: "330m"
            memory: "168392842"
          requests:
            cpu: "11m"
            memory: "23574998"
    

Solução de problemas

Com o recurso de dimensionamento de complementos de custo otimizado habilitado em seu cluster, você pode personalizar as configurações padrão de CPU e memória para recursos de complementos, bem como modificar a configuração padrão de VPA para complementos gerenciados AKS suportados

Se seus pods de complemento habilitados para dimensionamento automático estiverem em um estado pendente ou se você não vir nenhuma recomendação de VPA para complementos habilitados para dimensionamento automático, siga estas etapas para solucionar o problema.

Verifique o estado do suplemento do VPA gerido pelo AKS

  1. Verifique se todos os componentes do sistema VPA estão em execução usando o kubectl get pods comando.

    kubectl get pods --namespace kube-system | grep vpa
    

    A saída deve mostrar três pods (vpa-admission-controller, vpa-recommender e vpa-updater) em execução no kube-system namespace, semelhante ao exemplo a seguir:

    vpa-admission-controller   2/2     2            2           4m11s
    vpa-recommender            1/1     1            1           4m11s
    vpa-updater                1/1     1            1           4m11s
    
  2. Para cada um dos três pods VPA, verifique os logs para ver se há erros usando o comando kubectl logs. Certifique-se de substituir <pod-name> pelos nomes dos VPA pods.

    kubectl logs <pod-name> --namespace kube-system | grep -e '^E[0-9]\{4\}'
    
  3. Confirme se a definição de recurso personalizada (CRD) foi criada usando o kubectl get comando.

    kubectl get customresourcedefinition | grep verticalpodautoscalers
    

Verifique o estado do pod e a utilização da CPU/memória

  1. Verifique o status do pod usando o kubectl get pod comando.

    kubectl get pod <pod-name> --namespace=kube-system
    
  2. Se o pod tiver um status de Pending, verifique a propriedade status do pod para determinar o motivo pelo qual o pod não está em execução.

    kubectl describe pod <pod-name> --namespace kube-system -o yaml
    

    A saída a seguir mostra um exemplo de status de um pod com um status de Pending:

    apiVersion: v1
    kind: Pod
    ...
    status:
      conditions:
      - lastProbeTime: null
        lastTransitionTime: "2023-05-03T17:05:26Z"
        message: '0/1 nodes are available: 1 Insufficient cpu, 1 Insufficient memory.
          preemption: 0/1 nodes are available: 1 Insufficient cpu, 1 Insufficient memory..'
        reason: Unschedulable
        status: "False"
        type: PodScheduled
      phase: Pending
      qosClass: Guaranteed
    
  3. Se a saída revelar que o pod está Pending devido a insuficiência de CPU ou memória, considere tomar as seguintes ações:

    • Adicione mais nós de modo a que os pods possam ser agendados em nós com menor utilização de recursos.
    • Desative o VPA para o pod de complemento de destino alterando o modo de atualização para Desativado e, em seguida, atualize manualmente as solicitações/limites para os valores de recursos disponíveis no nó. Tenha cuidado ao definir limites de recursos para valores extremamente baixos, pois isso pode resultar em o pod sofrer interrupções devido à OOM ou em limitação da CPU se tentar usar mais recursos do que os disponíveis no nó.

Próximos passos