Condividi tramite


Abilitare o disabilitare il provisioning automatico dei nodi (NAP) in servizio Azure Kubernetes (AKS)

Questo articolo illustra come abilitare o disabilitare il provisioning automatico dei nodi nel servizio Azure Kubernetes usando l'interfaccia della riga di comando di Azure o i modelli di Azure Resource Manager (ARM).

Per creare un cluster del servizio Azure Kubernetes (AKS) abilitato per il provisioning automatico dei nodi (NAP) con una rete virtuale personalizzata (VNet) e subnet, vedere Creare un cluster di provisioning automatico dei nodi (NAP) in una rete virtuale personalizzata.

Prima di iniziare

Prima di iniziare, rivedere l'articolo Panoramica del provisioning automatico dei nodi (NAP) in servizio Azure Kubernetes (AKS), che illustra come funziona il provisioning automatico dei nodi (NAP), i prerequisiti e le limitazioni.

Abilitare il provisioning automatico dei nodi (NAP) in un cluster di servizio Azure Kubernetes

Le sezioni seguenti illustrano come abilitare NAP su un nuovo o esistente cluster AKS:

Abilitare NAP su un nuovo cluster

  • Abilitare il provisioning automatico dei nodi (NAP) in un nuovo cluster usando il comando az aks create con il flag --node-provisioning-mode impostato su Auto. Il comando seguente imposta anche --network-plugin su azure, --network-plugin-mode su overlay e --network-dataplane su 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. Creare un file denominato nap.json e aggiungere la seguente configurazione del modello ARM con il campo properties.nodeProvisioningProfile.mode impostato su Auto, che abilita NAP. L'impostazione predefinita è 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. Abilitare il provisioning automatico dei nodi (NAP) in un nuovo cluster utilizzando il comando az deployment group create con il flag --template-file impostato sul percorso del file del modello di Resource Manager.

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

Abilitare il provisioning automatico dei nodi (NAP) in un cluster esistente

  • Abilitare il provisioning automatico del nodo in un cluster esistente usando il az aks update comando e impostare il flag --node-provisioning-mode a Auto.

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

Disabilitare il provisioning automatico dei nodi (NAP) in un cluster del servizio Azure Kubernetes

Importante

È possibile disabilitare NAP in un cluster solo se vengono soddisfatte le condizioni seguenti.

  • Non sono presenti nodi NAP. È possibile usare il comando kubectl get nodes -l karpenter.sh/nodepool per verificare la presenza di nodi gestiti da NAP esistenti.
  • Tutti i karpenter NodePools esistenti hanno il campo spec.limits.cpu impostato su 0. Questa azione impedisce la creazione di nuovi nodi, ma non interrompe i nodi attualmente in esecuzione.
  1. Impostare il spec.limits.cpu campo su 0 per ogni karpenter NodePoolesistente. Per esempio:

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

    Importante

    Se non si vuole assicurarsi che ogni pod in esecuzione in precedenza in un nodo NAP venga migrato in modo sicuro a un nodo non-NAP prima di disabilitare NAP, è possibile ignorare i passaggi 2 e 3 e usare invece il comando kubectl delete node per ogni nodo gestito da NAP. Tuttavia, non è consigliabile ignorare questi passaggi, perché ciò potrebbe lasciare alcuni pod in sospeso e non rispettare i budget di interruzione dei pod (PDB).

    Quando si utilizza il comando kubectl delete node, fare attenzione a eliminare solo i nodi gestiti da NAP. È possibile identificare i nodi gestiti da NAP usando il comando kubectl get nodes -l karpenter.sh/nodepool.

  2. Aggiungere il karpenter.azure.com/disable:NoSchedule taint a ogni Karpenter NodePool. Per esempio:

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

    Questa azione avvia il processo di migrazione dei carichi di lavoro dai nodi gestiti da NAP a nodi non-NAP, rispettando i PDB e i limiti di interruzione. I pod vengono migrati a nodi non NAP, se adatti. Se la capacità a dimensione fissa non è sufficiente, alcuni nodi gestiti da NAP rimangono.

  3. Aumentare le dimensioni ManagedClusterAgentPools fisse esistenti o creare nuove dimensioni AgentPools fisse per gestire il carico dai nodi gestiti da NAP. Man mano che questi nodi vengono aggiunti al cluster, i nodi gestiti da Nap vengono svuotati e il lavoro viene migrato ai nodi a dimensione fissa.

  4. Eliminare tutti i nodi gestiti da NAP usando il comando kubectl get nodes -l karpenter.sh/nodepool. Se i nodi gestiti da NAP (Protezione accesso alla rete) sono ancora presenti, il cluster probabilmente non dispone di capacità a dimensionamento fisso. In questo caso, è necessario aggiungere altri nodi in modo che sia possibile eseguire la migrazione dei carichi di lavoro rimanenti.

  1. Aggiornare la modalità NAP a Manual usando il comando di interfaccia della riga di comando di Azure az aks update con il flag --node-provisioning-mode impostato su Manual.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --node-provisioning-mode Manual
    
  1. Aggiornare il properties.nodeProvisioningProfile.mode campo nel modello ARM a Manual e ripubblicarlo.

    {
      "$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"
            }
          }
        }
      ]
    }
    

Passaggi successivi

Per altre informazioni sul provisioning automatico dei nodi in AKS (Azure Kubernetes Service), vedere gli articoli seguenti: