Compartir a través de


Habilitación o deshabilitación del aprovisionamiento automático de nodos (NAP) en Azure Kubernetes Service (AKS)

En este artículo se explica cómo habilitar o deshabilitar el aprovisionamiento automático de nodos (NAP) en Azure Kubernetes Service (AKS) mediante la CLI de Azure o las plantillas de Azure Resource Manager (ARM).

Si desea crear un clúster de AKS habilitado para NAP con una red virtual personalizada (VNet) y subredes, consulte Creación de un clúster de aprovisionamiento automático de nodos (NAP) en una red virtual personalizada.

Antes de empezar

Antes de empezar, revise el artículo Información general sobre el aprovisionamiento automático de nodos (NAP) en AKS , que detalla cómo funciona NAP, requisitos previos y limitaciones.

Habilitación del aprovisionamiento automático de nodos (NAP) en un clúster de AKS

En las secciones siguientes se explica cómo habilitar NAP en un clúster de AKS nuevo o existente:

Habilitación de NAP en un nuevo clúster

  • Habilite el aprovisionamiento automático de nodos en un nuevo clúster mediante el comando az aks create con la marca --node-provisioning-mode establecida en Auto. El siguiente comando también configura --network-plugin en azure, --network-plugin-mode en overlay y --network-dataplane en 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. Cree un archivo denominado nap.json y agregue la siguiente configuración de plantilla ARM con el campo properties.nodeProvisioningProfile.mode establecido en Auto, que habilita NAP. (El valor predeterminado es 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 el aprovisionamiento automático de nodos en un nuevo clúster usando el comando az deployment group create con el indicador --template-file establecido en la ruta del archivo de plantilla de ARM.

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

Habilitación de NAP en un clúster existente

  • Habilite el aprovisionamiento automático de nodos en un clúster existente mediante el comando az aks update con la opción --node-provisioning-mode establecida como Auto.

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

Deshabilitación del aprovisionamiento automático de nodos (NAP) en un clúster de AKS

Importante

Solo puede deshabilitar NAP en un clúster si se cumplen las condiciones siguientes:

  • No hay nodos NAP existentes. Puede usar el kubectl get nodes -l karpenter.sh/nodepool comando para comprobar si hay nodos administrados por NAP existentes.
  • Todos los karpenter NodePools existentes tienen su spec.limits.cpu campo establecido en 0. Esta acción impide que se creen nuevos nodos, pero no interrumpe los nodos que se están ejecutando actualmente.
  1. Establezca el campo spec.limits.cpu en 0 para cada NodePool de Karpenter existente. Por ejemplo:

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

    Importante

    Si no desea asegurarse de que todos los pods que se ejecutan anteriormente en un nodo NAP se migran de forma segura a un nodo que no es NAP antes de deshabilitar NAP, puede omitir los pasos 2 y 3 y, en su lugar, usar el kubectl delete node comando para cada nodo administrado por NAP. Sin embargo, no se recomienda omitir estos pasos, ya que puede dejar algunos pods pendientes y no respeta los presupuestos de disrupción de pods (PDB).

    Al usar el kubectl delete node comando , tenga cuidado de eliminar solo los nodos administrados por NAP. Puede identificar los nodos administrados por NAP mediante el kubectl get nodes -l karpenter.sh/nodepool comando .

  2. Agregue la intolerancia karpenter.azure.com/disable:NoSchedule a cada NodePool de Karpenter. Por ejemplo:

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

    Esta acción inicia el proceso de migración de las cargas de trabajo en los nodos administrados por NAP a nodos no NAP, respetando los PDBs y los límites de interrupciones. Los pods migran a nodos que no sean NAP en caso de ajustarse. Si no hay suficiente capacidad de tamaño fijo, algunos nodos administrados por NAP permanecerán.

  3. Ampliar el tamaño fijo existente ManagedClusterAgentPools o crear un nuevo tamaño fijo AgentPools para gestionar la carga de los nodos gestionados por NAP. A medida que estos nodos se agregan al clúster, los nodos administrados por NAP se vacían y el trabajo se migra a nodos de tamaño fijo.

  4. Elimine todos los nodos administrados por NAP mediante el kubectl get nodes -l karpenter.sh/nodepool comando . Si todavía existen nodos administrados por NAP, es probable que el clúster no tenga capacidad de tamaño fijo. En este caso, debe agregar más nodos para que se puedan migrar las cargas de trabajo restantes.

  1. Actualice el modo NAP a Manual usando el comando de la CLI de Azure az aks update con la marca --node-provisioning-mode establecida en Manual.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --node-provisioning-mode Manual
    
  1. Actualice el campo properties.nodeProvisioningProfile.mode a Manual en su plantilla de ARM y vuelva a implementarlo.

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

Pasos siguientes

Para obtener más información sobre el aprovisionamiento automático de nodos en AKS, consulte los siguientes artículos: