Správa fondů uzlů pro cluster ve službě Azure Kubernetes Service (AKS)

Ve službě Azure Kubernetes Service (AKS) jsou uzly stejné konfigurace seskupené do fondů uzlů. Tyto fondy uzlů obsahují základní virtuální počítače, na kterých běží vaše aplikace. Při vytváření clusteru AKS definujete počáteční počet uzlů a jejich velikost (SKU). Vzhledem k tomu, že se požadavky aplikací mění, budete možná muset změnit nastavení ve fondech uzlů. Můžete například potřebovat škálovat počet uzlů ve fondu uzlů nebo upgradovat verzi Kubernetes fondu uzlů.

Tento článek ukazuje, jak spravovat jeden nebo více fondů uzlů v clusteru AKS.

Než začnete

Omezení

Při vytváření a správě clusterů AKS, které podporují více fondů uzlů, platí následující omezení:

  • Viz Kvóty, omezení velikosti virtuálních počítačů a dostupnost oblastí ve službě Azure Kubernetes Service (AKS).
  • Systémové fondy musí obsahovat alespoň jeden uzel a fondy uzlů uživatelů můžou obsahovat nula nebo více uzlů.
  • Po vytvoření nemůžete změnit velikost virtuálního počítače fondu uzlů.
  • Při vytváření více fondů uzlů v době vytváření clusteru musí všechny verze Kubernetes používané fondy uzlů odpovídat sadě verzí pro řídicí rovinu. Po zřízení clusteru pomocí operací fondu uzlů můžete provádět aktualizace.
  • V clusteru nebo fondu uzlů nemůžete současně spouštět operace upgradu a škálování. Pokud se je pokusíte spustit současně, zobrazí se chyba. Každý typ operace musí být u cílového prostředku dokončen před dalším požadavkem na stejný prostředek. Další informace najdete v průvodci odstraňováním potíží.

Upgrade fondu s jedním uzlem

Poznámka:

Verze image operačního systému fondu uzlů je svázaná s verzí Clusteru Kubernetes. Po upgradu clusteru získáte pouze upgrady imagí operačního systému.

V tomto příkladu upgradujeme fond uzlů mynodepool . Vzhledem k tomu, že existují dva fondy uzlů, musíme k upgradu použít az aks nodepool upgrade příkaz.

  1. Pomocí příkazu zkontrolujte všechny dostupné upgrady az aks get-upgrades .

    az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster
    
  2. Pomocí příkazu upgradujte fond az aks nodepool upgrade uzlů mynodepool.

    az aks nodepool upgrade \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --kubernetes-version KUBERNETES_VERSION \
        --no-wait
    
  3. Pomocí příkazu vypíšete stav fondů az aks nodepool list uzlů.

    az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
    

    Následující příklad výstupu ukazuje , že mynodepool je ve stavu upgrade :

    [
      {
        ...
        "count": 3,
        ...
        "name": "mynodepool",
        "orchestratorVersion": "KUBERNETES_VERSION",
        ...
        "provisioningState": "Upgrading",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      },
      {
        ...
        "count": 2,
        ...
        "name": "nodepool1",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Succeeded",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      }
    ]
    

    Upgrade uzlů na zadanou verzi trvá několik minut.

Osvědčeným postupem je upgradovat všechny fondy uzlů v clusteru AKS na stejnou verzi Kubernetes. Výchozím chováním az aks upgrade je upgrade všech fondů uzlů společně s řídicí rovinou, aby bylo dosaženo tohoto zarovnání. Možnost upgradovat jednotlivé fondy uzlů umožňuje provádět postupný upgrade a plánovat pody mezi fondy uzlů, aby se zachovala doba provozu aplikace v rámci výše uvedených omezení.

Upgrade řídicí roviny clusteru s více fondy uzlů

Poznámka:

Kubernetes používá standardní schéma správy verzí sémantické správy verzí . Číslo verze se vyjadřuje jako x.y.z, kde x je hlavní verze, y je podverze a z je verze opravy. Například ve verzi 1.12.6 je hlavní verze 12, 12 je podverze a 6 je verze opravy. Verze Řídicí roviny Kubernetes a počáteční fond uzlů se nastaví během vytváření clusteru. Ostatní fondy uzlů mají při přidání do clusteru nastavenou verzi Kubernetes. Verze Kubernetes se můžou lišit mezi fondy uzlů a mezi fondem uzlů a řídicí rovinou.

Cluster AKS má dva objekty prostředků clusteru s přidruženými verzemi Kubernetes:

  1. Verze Kubernetes řídicí roviny clusteru a
  2. Fond uzlů s verzí Kubernetes

Řídicí rovina se mapuje na jeden nebo více fondů uzlů. Chování operace upgradu závisí na tom, který příkaz Azure CLI použijete.

  • az aks upgrade upgraduje řídicí rovinu a všechny fondy uzlů v clusteru na stejnou verzi Kubernetes.
  • az aks upgrade--control-plane-only s příznakem upgraduje pouze řídicí rovinu clusteru a ponechá všechny fondy uzlů beze změny.
  • az aks nodepool upgrade upgraduje pouze fond cílových uzlů se zadanou verzí Kubernetes.

Ověřovací pravidla pro upgrady

Upgrady Kubernetes pro řídicí rovinu clusteru a fondy uzlů se ověřují pomocí následujících sad pravidel:

  • Pravidla pro platné verze pro upgrade fondů uzlů:

    • Verze fondu uzlů musí mít stejnou hlavní verzi jako řídicí rovina.
    • Podverze fondu uzlů musí být ve dvou podverzi verze řídicí roviny.
    • Verze fondu uzlů nemůže být větší než verze ovládacího prvku major.minor.patch .
  • Pravidla pro odeslání operace upgradu:

    • Řídicí rovinu ani verzi Kubernetes fondu uzlů nejde downgradovat.
    • Pokud není zadaná verze Kubernetes fondu uzlů, chování závisí na klientovi. V šablonách Resource Manageru se deklarace vrátí do existující verze definované pro fond uzlů. Pokud není nic nastavené, použije k návratu verzi řídicí roviny.
    • Nemůžete současně odesílat více operací na jednom zdroji řídicí roviny nebo fondu uzlů. V daném okamžiku můžete upgradovat nebo škálovat řídicí rovinu nebo fond uzlů.

Ruční škálování fondu uzlů

S tím, jak se zatížení aplikace mění, může být potřeba škálovat počet uzlů ve fondu uzlů. Počet uzlů je možné vertikálně navýšit nebo snížit.

  1. Pomocí příkazu škálujte počet uzlů ve fondu az aks node pool scale uzlů.

    az aks nodepool scale \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 5 \
        --no-wait
    
  2. Pomocí příkazu vypíšete stav fondů az aks node pool list uzlů.

    az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
    

    Následující příklad výstupu ukazuje , že fond uzlů je ve stavu škálování s novým počtem pěti uzlů:

    [
      {
        ...
        "count": 5,
        ...
        "name": "mynodepool",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Scaling",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      },
      {
        ...
        "count": 2,
        ...
        "name": "nodepool1",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Succeeded",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      }
    ]
    

    Dokončení operace škálování trvá několik minut.

Automatické škálování konkrétního fondu uzlů pomocí automatického škálování clusteru

AKS nabízí samostatnou funkci pro automatické škálování fondů uzlů pomocí funkce označované jako automatické škálování clusteru. Tuto funkci můžete povolit s jedinečným minimálním a maximálním počtem škálování na fond uzlů.

Další informace najdete v tématu použití automatického škálování clusteru.

Přidružení skupin rezervací kapacity k fondům uzlů

S tím, jak se vaše požadavky na úlohy mění, můžete ke fondům uzlů přidružit existující skupiny rezervací kapacity, abyste zajistili přidělenou kapacitu pro fondy uzlů.

Požadavky na použití skupin rezervací kapacity s AKS

  • Použijte rozhraní příkazového řádku verze 2.56 nebo novější a rozhraní API verze 2023-10-01 nebo vyšší.

  • Skupina rezervací kapacity by už měla existovat a měla by obsahovat minimálně jednu rezervaci kapacity, jinak se fond uzlů přidá do clusteru s upozorněním a nepřidružuje se žádná skupina rezervací kapacity. Další informace najdete v tématu Skupiny rezervací kapacity.

  • Musíte vytvořit spravovanou identitu přiřazenou uživatelem pro skupinu prostředků, která obsahuje skupinu rezervací kapacity (CRG). Spravované identity přiřazené systémem nebudou pro tuto funkci fungovat. V následujícím příkladu nahraďte proměnné prostředí vlastními hodnotami.

    IDENTITY_NAME=myID
    RG_NAME=myResourceGroup
    CLUSTER_NAME=myAKSCluster
    VM_SKU=Standard_D4s_v3
    NODE_COUNT=2
    LOCATION=westus2
    az identity create --name $IDENTITY_NAME --resource-group $RG_NAME  
    IDENTITY_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RG_NAME --query identity.id -o tsv)
    
  • Roli musíte přiřadit Contributor k identitě přiřazené uživatelem, kterou jste vytvořili výše. Další podrobnosti najdete v postupu přiřazení role Azure.

  • Vytvořte nový cluster a přiřaďte nově vytvořenou identitu.

      az aks create --resource-group $RG_NAME --name $CLUSTER_NAME --location $LOCATION \
          --node-vm-size $VM_SKU --node-count $NODE_COUNT \
          --assign-identity $IDENTITY_ID --enable-managed-identity         
    
  • Identitu spravovanou uživatelem můžete také přiřadit k existujícímu spravovanému clusteru pomocí příkazu update.

      az aks update --resource-group $RG_NAME --name $CLUSTER_NAME --location $LOCATION \
              --node-vm-size $VM_SKU --node-count $NODE_COUNT \
              --assign-identity $IDENTITY_ID --enable-managed-identity         
    

Přidružení existující skupiny rezervací kapacity k fondu uzlů

Pomocí příkazu přidružte existující skupinu rezervací kapacity k fondu az aks nodepool add uzlů a zadejte skupinu rezervací kapacity s příznakem --crg-id . Následující příklad předpokládá, že máte CRG s názvem "myCRG".

RG_NAME=myResourceGroup
CLUSTER_NAME=myAKSCluster
NODEPOOL_NAME=myNodepool
CRG_NAME=myCRG
CRG_ID=$(az capacity reservation group show --capacity-reservation-group $CRG_NAME --resource-group $RG_NAME --query id -o tsv)
az aks nodepool add --resource-group $RG_NAME --cluster-name $CLUSTER_NAME --name $NODEPOOL_NAME --crg-id $CRG_ID

Přidružení existující skupiny rezervací kapacity k fondu systémových uzlů

Pokud chcete přidružit existující skupinu rezervací kapacity k fondu systémových uzlů, přidružte cluster k identitě přiřazené uživatelem k vaší skupině CRG a samotné skupině CRG během vytváření clusteru. Použijte příkaz az aks create s příznakem --assign-identity a --crg-id příznakem.

IDENTITY_NAME=myID
RG_NAME=myResourceGroup
CLUSTER_NAME=myAKSCluster
NODEPOOL_NAME=myNodepool
CRG_NAME=myCRG
CRG_ID=$(az capacity reservation group show --capacity-reservation-group $CRG_NAME --resource-group $RG_NAME --query id -o tsv)
IDENTITY_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RG_NAME --query identity.id -o tsv)
az aks create --resource-group $RG_NAME --cluster-name $CLUSTER_NAME --crg-id $CRG_ID --assign-identity $IDENTITY_ID --enable-managed-identity

Poznámka:

Odstranění fondu uzlů implicitně oddružuje fond uzlů od jakékoli přidružené skupiny rezervací kapacity před odstraněním fondu uzlů. Odstranění clusteru implicitně disociuje všechny fondy uzlů v daném clusteru od přidružených skupin rezervací kapacity.

Poznámka:

Existující fond uzlů nelze aktualizovat pomocí skupiny rezervací kapacity. Doporučeným přístupem je přidružit skupinu rezervací kapacity při vytváření fondu uzlů.

Určení velikosti virtuálního počítače pro fond uzlů

Možná budete muset vytvořit fondy uzlů s různými velikostmi a možnostmi virtuálních počítačů. Můžete například vytvořit fond uzlů, který obsahuje uzly s velkým množstvím procesoru nebo paměti nebo fondu uzlů, který poskytuje podporu GPU. V další části použijete tainty a tolerance k tomu, abyste plánovači Kubernetes řekli, jak omezit přístup k podům, které se můžou spouštět na těchto uzlech.

V následujícím příkladu vytvoříme fond uzlů založený na GPU, který používá velikost virtuálního počítače Standard_NC6s_v3 . Tyto virtuální počítače využívají kartu NVIDIA Tesla K80. Informace najdete v tématu Dostupné velikosti pro virtuální počítače s Linuxem v Azure.

  1. Pomocí příkazu vytvořte fond az aks node pool add uzlů. Zadejte název gpunodepool a pomocí --node-vm-size parametru zadejte Standard_NC6 velikost.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunodepool \
        --node-count 1 \
        --node-vm-size Standard_NC6s_v3 \
        --no-wait
    
  2. Pomocí příkazu zkontrolujte stav fondu az aks nodepool list uzlů.

    az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
    

    Následující příklad výstupu ukazuje fond uzlů gpunodepool je Vytváření uzlů se zadaným VmSize:

    [
      {
        ...
        "count": 1,
        ...
        "name": "gpunodepool",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "vmSize": "Standard_NC6s_v3",
        ...
      },
      {
        ...
        "count": 2,
        ...
        "name": "nodepool1",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Succeeded",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      }
    ]
    

    Úspěšné vytvoření fondu gpunode trvá několik minut.

Zadání taintu, popisku nebo značky pro fond uzlů

Při vytváření fondu uzlů můžete k němu přidat tainty, popisky nebo značky. Když přidáte taint, popisek nebo značku, všechny uzly v rámci fondu uzlů získají také tento taint, popisek nebo značku.

Důležité

Přidání taintů, popisků nebo značek do uzlů by se mělo provádět pro celý fond uzlů pomocí az aks nodepool. Nedoporučujeme používat kubectl tainty, popisky nebo značky u jednotlivých uzlů ve fondu uzlů.

Nastavení taintů fondu uzlů

  1. Pomocí příkazu vytvořte fond uzlů s taintem az aks nodepool add . Zadejte název taintnp a pomocí parametru --node-taints zadejte sku=gpu:NoSchedule pro taint.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name taintnp \
        --node-count 1 \
        --node-taints sku=gpu:NoSchedule \
        --no-wait
    
  2. Pomocí příkazu zkontrolujte stav fondu az aks nodepool list uzlů.

    az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
    

    Následující příklad výstupu ukazuje, že fond uzlů taintnp vytváří uzly se zadanými uzly NodeTaints:

    [
      {
        ...
        "count": 1,
        ...
        "name": "taintnp",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

Informace o taintu jsou viditelné v Kubernetes pro zpracování pravidel plánování pro uzly. Plánovač Kubernetes může používat tainty a tolerance k omezení úloh, které se můžou spouštět na uzlech.

  • Taint se použije u uzlu, který označuje, že na nich lze naplánovat pouze konkrétní pody.
  • Tolerance se pak použije u podu, který jim umožní tolerovat taint uzlu.

Další informace o tom, jak používat pokročilé plánované funkce Kubernetes, najdete v tématu Osvědčené postupy pro pokročilé funkce plánovače v AKS.

Nastavení tolerance fondu uzlů

V předchozím kroku jste při vytváření fondu uzlů použili taint sku=gpu:NoSchedule . Následující příklad manifestu YAML používá toleraci, která plánovači Kubernetes umožňuje spustit pod NGINX na uzlu v tomto fondu uzlů.

  1. Vytvořte soubor s názvem nginx-toleration.yaml a zkopírujte ho v následujícím příkladu YAML.

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
     - image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine
        name: mypod
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 1
            memory: 2G
      tolerations:
     - key: "sku"
        operator: "Equal"
        value: "gpu"
        effect: "NoSchedule"
    
  2. Naplánujte pod pomocí kubectl apply příkazu.

    kubectl apply -f nginx-toleration.yaml
    

    Naplánování podu a načtení image NGINX trvá několik sekund.

  3. Pomocí příkazu zkontrolujte stav kubectl describe pod .

    kubectl describe pod mypod
    

    Následující zhuštěný ukázkový výstup ukazuje použití tolerance sku=gpu:NoSchedule . V části události plánovač přiřadil pod uzlu aks-taintnp-28993262-vmss0000000 :

    [...]
    Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                     node.kubernetes.io/unreachable:NoExecute for 300s
                     sku=gpu:NoSchedule
    Events:
      Type    Reason     Age    From                Message
      ----    ------     ----   ----                -------
      Normal  Scheduled  4m48s  default-scheduler   Successfully assigned default/mypod to aks-taintnp-28993262-vmss000000
      Normal  Pulling    4m47s  kubelet             pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
      Normal  Pulled     4m43s  kubelet             Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
      Normal  Created    4m40s  kubelet             Created container
      Normal  Started    4m40s  kubelet             Started container
    

    Na uzlech v taintnpu je možné naplánovat pouze pody, které mají tuto tolerance. Všechny ostatní pody jsou naplánované ve fondu uzlů nodepool1 . Pokud vytváříte více fondů uzlů, můžete pomocí taintů a tolerance omezit, jaké pody je možné na těchto prostředcích uzlů naplánovat.

Nastavení popisků fondu uzlů

Další informace najdete v tématu Použití popisků v clusteru Azure Kubernetes Service (AKS).

Nastavení značek Fondu uzlů Azure

Další informace najdete v tématu Použití značek Azure ve službě Azure Kubernetes Service (AKS).

Správa fondů uzlů pomocí šablony Resource Manageru

Když k vytváření a správě prostředků používáte šablonu Azure Resource Manageru, můžete změnit nastavení v šabloně a znovu ji nasadit, aby aktualizovala prostředky. U fondů uzlů AKS nemůžete po vytvoření clusteru AKS aktualizovat počáteční profil fondu uzlů. Toto chování znamená, že nemůžete aktualizovat existující šablonu Resource Manageru, provést změnu fondů uzlů a pak šablonu znovu nasadit. Místo toho musíte vytvořit samostatnou šablonu Resource Manageru, která aktualizuje fondy uzlů pro existující cluster AKS.

  1. Vytvořte šablonu, například aks-agentpools.json, a vložte do následujícího ukázkového manifestu. Nezapomeňte podle potřeby upravit hodnoty. Tato ukázková šablona konfiguruje následující nastavení:

    • AktualizaceFond uzlů Linuxu s názvem myagentpool pro spuštění tří uzlů
    • Nastaví uzly ve fondu uzlů tak, aby spouštěly Kubernetes verze 1.15.7.
    • Definuje velikost uzlu jako Standard_DS2_v2.
    {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "clusterName": {
                "type": "string",
                "metadata": {
                    "description": "The name of your existing AKS cluster."
                }
            },
            "location": {
                "type": "string",
                "metadata": {
                    "description": "The location of your existing AKS cluster."
                }
            },
            "agentPoolName": {
                "type": "string",
                "defaultValue": "myagentpool",
                "metadata": {
                    "description": "The name of the agent pool to create or update."
                }
            },
            "vnetSubnetId": {
                "type": "string",
                "defaultValue": "",
                "metadata": {
                    "description": "The Vnet subnet resource ID for your existing AKS cluster."
                }
            }
        },
        "variables": {
            "apiVersion": {
                "aks": "2020-01-01"
            },
            "agentPoolProfiles": {
                "maxPods": 30,
                "osDiskSizeGB": 0,
                "agentCount": 3,
                "agentVmSize": "Standard_DS2_v2",
                "osType": "Linux",
                "vnetSubnetId": "[parameters('vnetSubnetId')]"
            }
        },
        "resources": [
            {
                "apiVersion": "2020-01-01",
                "type": "Microsoft.ContainerService/managedClusters/agentPools",
                "name": "[concat(parameters('clusterName'),'/', parameters('agentPoolName'))]",
                "location": "[parameters('location')]",
                "properties": {
                    "maxPods": "[variables('agentPoolProfiles').maxPods]",
                    "osDiskSizeGB": "[variables('agentPoolProfiles').osDiskSizeGB]",
                    "count": "[variables('agentPoolProfiles').agentCount]",
                    "vmSize": "[variables('agentPoolProfiles').agentVmSize]",
                    "osType": "[variables('agentPoolProfiles').osType]",
                    "type": "VirtualMachineScaleSets",
                    "vnetSubnetID": "[variables('agentPoolProfiles').vnetSubnetId]",
                    "orchestratorVersion": "1.15.7"
                }
            }
        ]
    }
    
  2. Nasaďte šablonu pomocí az deployment group create příkazu.

    az deployment group create \
        --resource-group myResourceGroup \
        --template-file aks-agentpools.json
    

    Tip

    Do fondu uzlů můžete přidat značku přidáním vlastnosti značky do šablony, jak je znázorněno v následujícím příkladu:

    ...
    "resources": [
    {
      ...
      "properties": {
        ...
        "tags": {
          "name1": "val1"
        },
        ...
      }
    }
    ...
    

    Aktualizace clusteru AKS může trvat několik minut v závislosti na nastavení fondu uzlů a operacích, které definujete v šabloně Resource Manageru.

Další kroky