Partilhar via


Ativar ou desativar Node Auto-Provisioning (NAP) no Azure Kubernetes Service (AKS)

Este artigo explica como habilitar ou desabilitar o provisionamento automático de nó (NAP) no Serviço Kubernetes do Azure (AKS) usando os modelos CLI do Azure ou Azure Resource Manager (ARM).

Se quiser criar um cluster AKS habilitado para NAP com uma rede virtual personalizada (VNet) e subredes, consulte Criar um cluster NAP (provisionamento automático) de nó em uma rede virtual personalizada.

Antes de começar

Antes de começar, revise o artigo Visão geral do provisionamento automático de nó (NAP) no AKS , que detalha como a NAP funciona, pré-requisitos e limitações.

Habilitar o provisionamento automático de nós (NAP) num cluster AKS

As seções a seguir explicam como habilitar a NAP em um cluster AKS novo ou existente:

Observação

Você pode habilitar as métricas do plano de controle para ver os logs e as operações do provisionamento automático do nó com o complemento Azure Monitor managed service for Prometheus.

Habilitar NAP em um novo cluster

  • Ative o provisionamento automático de nó num novo cluster usando o az aks create comando, com o --node-provisioning-mode flag definido como Auto. O comando a seguir também define --network-plugin como azure, --network-plugin-mode como overlay, e --network-dataplane como cilium.

    az aks create \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --node-provisioning-mode Auto \
        --network-plugin azure \
        --network-plugin-mode overlay \
        --network-dataplane cilium \
        --generate-ssh-keys
    
  1. Crie um arquivo chamado nap.json e adicione a seguinte configuração de modelo ARM com o campo properties.nodeProvisioningProfile.mode definido como Auto, que habilita o NAP. (A configuração padrão é Manual.)

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "metadata": {},
      "parameters": {},
      "resources": [
        {
          "type": "Microsoft.ContainerService/managedClusters",
          "apiVersion": "2025-05-01",
          "sku": {
            "name": "Base",
            "tier": "Standard"
          },
          "name": "napcluster",
          "location": "uksouth",
          "identity": {
            "type": "SystemAssigned"
          },
          "properties": {
            "networkProfile": {
                "networkPlugin": "azure",
                "networkPluginMode": "overlay",
                "networkPolicy": "cilium",
                "networkDataplane":"cilium",
                "loadBalancerSku": "Standard"
            },
            "dnsPrefix": "napcluster",
            "agentPoolProfiles": [
              {
                "name": "agentpool",
                "count": 3,
                "vmSize": "standard_d2s_v3",
                "osType": "Linux",
                "mode": "System"
              }
            ],
            "nodeProvisioningProfile": {
              "mode": "Auto"
            }
          }
        }
      ]
    }
    
  2. Habilite o provisionamento automático de nós em um cluster novo usando o az deployment group create comando com o --template-file flag definido para o caminho do ficheiro do modelo ARM.

    az deployment group create --resource-group $RESOURCE_GROUP --template-file ./nap.json
    

Habilitar NAP em um cluster existente

  • Ativa o provisionamento automático de nó num cluster existente, utilizando o az aks update comando com o indicador --node-provisioning-mode definido como Auto.

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --node-provisioning-mode Auto
    

Desativar o aprovisionamento automático de nós (NAP) num cluster AKS

Importante

Você só pode desabilitar a NAP em um cluster se as seguintes condições forem atendidas:

  • Não existem nós NAP existentes. Você pode usar o kubectl get nodes -l karpenter.sh/nodepool comando para verificar se há nós gerenciados por NAP existentes.
  • Todos os Karpenter NodePools existentes têm seu spec.limits.cpu campo definido como 0. Essa ação impede que novos nós sejam criados, mas não interrompe os nós em execução no momento.
  1. Defina o campo spec.limits.cpu para 0 para cada Karpenter existente NodePool. Por exemplo:

    apiVersion: karpenter.sh/v1
    kind: NodePool
    metadata:
      name: default
    spec:
      limits:
        cpu: 0
    

    Importante

    Se você não quiser garantir que todos os pods executados anteriormente em um nó NAP sejam migrados com segurança para um nó não-NAP antes de desabilitar o NAP, você pode ignorar as etapas 2 e 3 e, em vez disso, usar o kubectl delete node comando para cada nó gerenciado por NAP. No entanto, não recomendamos pular essas etapas, pois isso pode deixar alguns pods pendentes e não respeita os Orçamentos de Interrupção de Pods (PDBs).

    Ao usar o kubectl delete node comando, tenha cuidado para excluir apenas nós gerenciados por NAP. Você pode identificar nós gerenciados por NAP usando o kubectl get nodes -l karpenter.sh/nodepool comando.

  2. Adicione a karpenter.azure.com/disable:NoSchedule mancha a cada Karpenter NodePool. Por exemplo:

    apiVersion: karpenter.sh/v1
    kind: NodePool
    metadata:
      name: default
    spec:
      template:
        spec:
          ...
          taints:
            - key: karpenter.azure.com/disable
              effect: NoSchedule
    

    Esta ação inicia o processo de migração das cargas de trabalho nos nós gerenciados pelo NAP para nós não-NAP, respeitando PDBs e limites de interrupção. Os pods migram para nós não-NAP, se puderem se encaixar. Se não houver capacidade de tamanho fixo suficiente, alguns nós geridos por NAP permanecerão.

  3. Ampliar o tamanho fixo existente ManagedClusterAgentPools ou criar um novo tamanho fixo AgentPools para absorver a carga dos nós geridos pela NAP. À medida que esses nós são adicionados ao cluster, os nós geridos pela NAP são liberados, e o trabalho é transferido para os nós de tamanho fixo.

  4. Exclua todos os nós gerenciados pela NAP usando o kubectl get nodes -l karpenter.sh/nodepool comando. Se os nós gerenciados pela NAP ainda existirem, o cluster provavelmente não terá capacidade de tamanho fixo. Nesse caso, você deve adicionar mais nós para que as cargas de trabalho restantes possam ser migradas.

  1. Atualize o modo NAP para Manual usando o comando do Azure CLI az aks update com a flag --node-provisioning-mode definida como Manual.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --node-provisioning-mode Manual
    
  1. Atualize o campo properties.nodeProvisioningProfile.mode para Manual no seu modelo ARM e volte a implementá-lo.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "metadata": {},
      "parameters": {},
      "resources": [
        {
          "type": "Microsoft.ContainerService/managedClusters",
          "apiVersion": "2025-05-01",
          "sku": {
            "name": "Base",
            "tier": "Standard"
          },
          "name": "napcluster",
          "location": "uksouth",
          "identity": {
            "type": "SystemAssigned"
          },
          "properties": {
            "networkProfile": {
                "networkPlugin": "azure",
                "networkPluginMode": "overlay",
                "networkPolicy": "cilium",
                "networkDataplane":"cilium",
                "loadBalancerSku": "Standard"
            },
            "dnsPrefix": "napcluster",
            "agentPoolProfiles": [
              {
                "name": "agentpool",
                "count": 3,
                "vmSize": "standard_d2s_v3",
                "osType": "Linux",
                "mode": "System"
              }
            ],
            "nodeProvisioningProfile": {
              "mode": "Manual"
            }
          }
        }
      ]
    }
    

Próximos passos

Para obter mais informações sobre o provisionamento automático de nós no AKS, consulte os seguintes artigos: