Compartilhar via


Habilitar ou desabilitar o NAP (provisionamento automático de nós) no AKS (Serviço de Kubernetes do Azure)

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

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

Antes de começar

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

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

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

Habilitar o NAP em um novo cluster

  • Habilite o provisionamento automático de nós em um novo cluster usando o comando az aks create com o sinalizador --node-provisioning-mode 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 nomeado nap.json e adicione a seguinte configuração de modelo do ARM com o properties.nodeProvisioningProfile.mode campo definido como Auto, o 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 novo cluster usando o comando az deployment group create com o sinalizador --template-file definido como o caminho do arquivo de modelo do ARM.

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

Habilitar o NAP em um cluster existente

  • Habilite o provisionamento automático de nós em um cluster existente usando o comando az aks update com o sinalizador --node-provisioning-mode definido como Auto.

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

Desabilitar o provisionamento automático de nós (NAP) em um cluster do AKS

Importante

Você só poderá desabilitar o NAP em um cluster se as seguintes condições forem atendidas:

  • Não há 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 existentes NodePools 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 como 0 para cada NodePool Karpenter existente. Por exemplo:

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

    Importante

    Se você não quiser garantir que cada pod executado anteriormente em um nó NAP seja migrado com segurança para um nó não NAP antes de desabilitar o NAP, ignore as etapas 2 e 3 e, em vez disso, use o kubectl delete node comando para cada nó gerenciado por NAP. No entanto, não recomendamos pular estas etapas, pois isso pode deixar alguns pods pendentes e não respeitar os Orçamentos de Disrupção de Pod (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 o taint karpenter.azure.com/disable:NoSchedule a cada NodePool do Karpenter. Por exemplo:

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

    Essa 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 os PDBs e os limites de interrupção. Os pods migram para nós não NAP se puderem se ajustar. Se não houver capacidade de tamanho fixo suficiente, alguns nós gerenciados pelo NAP permanecerão.

  3. Escale verticalmente as ManagedClusterAgentPools de tamanho fixo existentes ou crie AgentPools de tamanho fixo para absorver a carga dos nós gerenciados pelo NAP. À medida que esses nós são adicionados ao cluster, os nós gerenciados pelo NAP são esvaziados, e o trabalho é migrado aos nós de tamanho fixo.

  4. Exclua todos os nós gerenciados por NAP usando o kubectl get nodes -l karpenter.sh/nodepool comando. Se nodos gerenciados por NAP ainda existirem, o cluster provavelmente não tem 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 da CLI do Azure az aks update com o sinalizador --node-provisioning-mode definido 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 reimplante-o.

    {
      "$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óximas etapas

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