Povolení nebo zakázání automatického zřizování uzlů (NAP) v Azure Kubernetes Service (AKS)

Tento článek vysvětluje, jak povolit nebo zakázat automatické zřizování uzlů (NAP) v Azure Kubernetes Service (AKS) pomocí šablon Azure CLI nebo Azure Resource Manager (ARM).

Pokud chcete vytvořit cluster AKS s podporou architektury NAP s vlastní virtuální sítí a podsítěmi, přečtěte si téma Vytvoření clusteru architektury NAP (Auto-Provisioning) uzlu ve vlastní virtuální síti.

Než začnete

Než začnete, projděte si přehled automatického zřizování uzlů (NAP) v článku AKS , který podrobně popisuje fungování architektury NAP, požadavky a omezení.

Povolte automatické zřizování uzlů (NAP) v clusteru AKS

Následující části vysvětlují, jak povolit architekturu NAP v novém nebo existujícím clusteru AKS:

Poznámka:

Můžete povolit metriky řídicí roviny a zobrazit protokoly a operace z automatického zřizování uzlů pomocí spravované služby Azure Monitor pro doplněk Prometheus.

Povolit NAP na novém clusteru

  • Povolte automatické zřizování uzlů v novém clusteru pomocí příkazu az aks create a nastavením příznaku --node-provisioning-mode na Auto. Následující příkaz také nastaví --network-plugin na azure, --network-plugin-mode na overlaya --network-dataplane na 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. Vytvořte soubor s názvem nap.json a přidejte následující konfiguraci šablony ARM s polem properties.nodeProvisioningProfile.mode nastaveným na hodnotu Auto, která umožňuje NAP. (Výchozí nastavení je 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. Povolte automatické zřizování uzlů v novém clusteru pomocí příkazu az deployment group create a příznaku --template-file nastaveného na cestu k souboru šablony ARM.

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

Povolit NAP na existujícím clusteru

  • Povolte automatické zřizování uzlů v existujícím clusteru pomocí příkazu az aks update s příznakem --node-provisioning-mode nastaveným na Auto.

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

Zakázání automatického provisioningu uzlů (NAP) v AKS clusteru

Důležité

NAP můžete na clusteru zakázat pouze v případě splnění následujících podmínek:

  • Neexistují žádné uzly NAP. Pomocí příkazu můžete kubectl get nodes -l karpenter.sh/nodepool zkontrolovat existující uzly spravované architekturou NAP.
  • Všechny existující Karpenter NodePools mají své spec.limits.cpu pole nastavené na 0. Tato akce zabrání vytvoření nových uzlů, ale nenaruší aktuálně spuštěné uzly.
  1. Nastavte pole spec.limits.cpu na 0 pro každý existující Karpenter NodePool. Například:

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

    Důležité

    Pokud nechcete před zakázáním architektury NAP bezpečně migrovat všechny pody spuštěné na uzlu NAP, můžete přeskočit kroky 2 a 3 a místo toho použít kubectl delete node příkaz pro každý uzel spravovaný architekturou NAP. Nicméně nedoporučujeme tyto kroky přeskočovat, protože by některé pody mohly zůstat v čekajícím stavu a nebudou respektovat rozpočty přerušení podů (PDB).

    Při použití kubectl delete node příkazu dávejte pozor jenom na odstranění uzlů spravovaných architekturou NAP. Uzly spravované architekturou kubectl get nodes -l karpenter.sh/nodepool NAP můžete identifikovat pomocí příkazu.

  2. Přidejte karpenter.azure.com/disable:NoSchedule taint ke každému Karpenteru NodePool. Například:

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

    Tato akce spustí proces migrace úloh na uzlech spravovaných architekturou NAP na uzly bez architektury NAP, které dodržují limity souborů PDB a přerušení. Pody migrují na uzly bez NAP, pokud se tam vejdou. Pokud není dostatek pevně stanovené kapacity, zůstanou některé uzly spravované NAP.

  3. Navyšte kapacitu stávajících pevných velikostí ManagedClusterAgentPools nebo vytvořte novou pevnou velikost AgentPools, která převezme zatížení ze spravovaných uzlů NAP. Při přidání těchto uzlů do clusteru se uzly spravované architekturou NAP vyprázdní a práce se migruje na uzly s pevnou velikostí.

  4. Pomocí příkazu kubectl get nodes -l karpenter.sh/nodepool odstraňte všechny NAP-spravované uzly. Pokud uzly spravované architekturou NAP stále existují, cluster pravděpodobně nemá kapacitu s pevnou velikostí. V takovém případě byste měli přidat další uzly, aby bylo možné migrovat zbývající úlohy.

  1. Aktualizujte režim NAP na Manual pomocí příkazu Azure CLI az aks update s příznakem --node-provisioning-mode nastaveným na Manual.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --node-provisioning-mode Manual
    
  1. Aktualizujte pole properties.nodeProvisioningProfile.mode na Manual ve vaší šabloně ARM a znovu ho nasaďte.

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

Migrace ze samostatně hostovaného open-source nástroje Karpenter na spravované automatické provisionování uzlů (NAP)

Pokud byl Karpenter nainstalován z open source Helm chartu, můžete ve svém clusteru stále povolit NAP. Tyto kroky předpokládají, že je nainstalovaný graf Karpenter Helm.

Důležité

Před zahájením migrace se ujistěte, že používáte latest verzi Karpenteru. NAP vždy běží v nejnovější verzi.

Důležité

Při provádění tohoto procesu migrace dávejte pozor, abyste neodebrali identifikátory CRD Karpenter. Pokud se CRD odstraní, odstraní se i podkladové NodeClaims, což by mohlo narušit vaše úlohy.

  1. Chcete-li zajistit, aby se CRD Karpenter v kroku 2 neodinstalovaly, odeberte štítky a anotace managed-by=Helm.

    kubectl get crds -l app.kubernetes.io/managed-by=Helm -o name | grep karpenter.azure.com | xargs -I{} kubectl patch {} --type=json -p '
    [
      {"op":"remove","path":"/metadata/annotations/meta.helm.sh~1release-name"},
      {"op":"remove","path":"/metadata/annotations/meta.helm.sh~1release-namespace"},
      {"op":"remove","path":"/metadata/labels/app.kubernetes.io~1managed-by"}
    ]'
    
  2. Odinstalujte chart Helm a odeberte nasazení, službu, role a další prostředky používané open source Karpenter. V tuto chvíli Karpenter nereaguje na události škálování, ale stávající uzly nadále fungují.

    helm uninstall karpenter -n kube-system  # If you installed Karpenter into a different namespace than kube-system, specify that here instead of kube-system
    
  3. Povolte NAP ve svém clusteru:

    az aks update --name ${CLUSTER_NAME} --resource-group ${RESOURCE_GROUP} --node-provisioning-mode Auto --node-provisioning-default-pools None
    

    Tento příkaz zakáže výchozí uzly NodePools, protože máte existující UzlyPools a chcete je dál používat. Pokud chcete povolit výchozí fondy automatického zřizování uzlů, můžete z příkazu az aks update vynechat --node-provisioning-default-pools None.

  4. Ověřte, že je migrace dokončena: Když se az aks update z kroku 3 úspěšně dokončí, migrace je hotová. Migraci můžete ověřit také tak, že zkontrolujete poznámky na karpenterových identifikátorech CRD. Měli byste vidět:

        meta.helm.sh/release-name: aks-managed-karpenter-overlay-base
        meta.helm.sh/release-namespace: kube-system
    

    V tomto okamžiku je NAP povolen a automatické škálování by se mělo obnovit.

Automatické zřizování uzlů monitorování

Načtení protokolů a stavu Karpenteru

Z Karpenteru můžete načíst protokoly a aktualizace stavu, které vám pomůžou diagnostikovat a ladit události související s architekturou NAP. AKS spravuje automatické zřizování uzlů vaším jménem a spouští ho ve spravované řídicí rovině. Můžete povolit protokoly řídicí roviny, abyste viděli protokoly a operace Karpenteru z automatického zřizování uzlů. Další informace o protokolech řídicí roviny najdete v dokumentaci k protokolům řídicí roviny AKS.

  1. Nastavte pravidlo pro protokoly prostředků za účelem odesílání protokolů automatického zřizování uzlů do Log Analytics pomocí pokyny uvedenými zde. Nezapomeňte zaškrtnout políčko node-auto-provisioning při výběru možností pro protokoly.

  2. Vyberte oddíl Protokol ve vašem clusteru.

  3. Do Log Analytics zadejte následující příklad dotazu:

    AKSControlPlane
    | where Category == "karpenter-events"
    
  4. Zobrazení událostí automatického zřizování uzlů v CLI:

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

Metriky automatického zřizování uzlů

Můžete povolit metriky řídící roviny (Preview) pro zobrazení konkrétních metrik a operací Karpenteru z automatického zřizování uzlů pomocí přídavku spravované služby Azure Monitor pro Prometheus.

Další kroky

Pro více informací o automatickém zřizování uzlů v AKS si přečtěte následující články: