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

Supervisión del aprovisionamiento automático de nodos

Recuperación de registros y estado de Karpenter

Puede recuperar registros y actualizaciones de estado de Karpenter para ayudar a diagnosticar y depurar eventos relacionados con NAP. AKS administra el aprovisionamiento automático de nodos en su nombre y lo ejecuta en el plano de control administrado. Puede habilitar los registros del plano de control para inspeccionar los registros y las operaciones de Karpenter resultantes del aprovisionamiento automático de nodos. Para más información sobre los registros del plano de control, consulte la documentación de registros del plano de control de AKS.

  1. Configure una regla para que los registros de recursos inserten registros de aprovisionamiento automático de nodos en Log Analytics mediante las instrucciones que se indican aquí. Asegúrese de activar la casilla correspondiente a node-auto-provisioning al seleccionar las opciones para Registros.

  2. Seleccione la sección Registro del clúster.

  3. Escriba la consulta de ejemplo siguiente en Log Analytics:

    AKSControlPlane
    | where Category == "karpenter-events"
    
  4. Visualización de eventos de aprovisionamiento automático de nodos en la CLI:

    kubectl get events --field-selector source=karpenter-events
    

Métricas de aprovisionamiento automático de nodos

Puede habilitar las métricas del plano de control (versión preliminar) para ver métricas y operaciones específicas de Karpenter desde el aprovisionamiento automático de nodos con el servicio administrado de Azure Monitor para el complemento Prometheus.

Pasos siguientes

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