Cvičení – konfigurace více uzlů a povolení škálování na nulu v clusteru AKS

Dokončeno

Služba Azure Kubernetes Service umožňuje vytvořit různé fondy uzlů tak, aby konkrétní úlohy odpovídaly uzlům spuštěným v jednotlivých fondech uzlů.

Vzpomeňte si z příkladu sledování dronů, že váš tým vyvinul novou službu prediktivního modelování, která zpracovává informace o letu v extrémních povětrnostních podmínkách a vytváří optimální letové trasy. Tato služba vyžaduje podporu virtuálních počítačů využívajících grafický procesor (GPU) a spouští se jenom v konkrétních dnech v týdnu. Tým se chce ujistit, že pokud služba neběží, nepoužívají se žádné virtuální počítače.

Vytvoříte cluster Kubernetes spravovaný službou AKS (Azure Kubernetes Service). Dále nakonfigurujete cluster tak, aby podporoval více fondů uzlů a umožníte clusterům škálovat uzly ve fondech uzlů. Potom přidáte druhý fond uzlů pro podporu uživatelských úloh s dynamickým počtem uzlů. Nakonec škálujete počet uzlů na nulu, abyste snížili náklady na uzly používané v clusteru AKS.

Vytvoření nové skupiny prostředků

  1. Přihlaste se do Azure Cloud Shellu pomocí svého účtu Azure. Vyberte verzi Bash prostředí Cloud Shell.

  2. Hodnoty, které tady vytvoříte, budete opakovaně používat ve všech cvičeních v tomto modulu. Uložte výstup pro budoucí použití.

  3. Zvolte oblast pro hostování vaší skupiny prostředků. Funkce z pozdějších cvičení nejsou dostupné ve všech oblastech. Z tohoto důvodu doporučujeme jako oblast používat eastus . Pokud se rozhodnete použít jinou hodnotu, změňte hodnotu REGION_NAME.

    Spuštěním následujících příkazů zaregistrujte proměnné:

    REGION_NAME=eastus
    RESOURCE_GROUP=rg-akscostsaving
    AKS_CLUSTER_NAME=akscostsaving-$RANDOM
    

    Tip

    Můžete použít tlačítko Kopírovat pro kopírování příkazů do schránky. Pokud chcete vložit, klikněte pravým tlačítkem myši na nový řádek v terminálu Cloud Shellu a vyberte Vložit nebo použijte klávesovou zkratku Shift+Insert (⌘+V v macOS).

    Každou hodnotu můžete zkontrolovat spuštěním echo příkazu, echo $REGION_NAMEnapříklad .

  4. Poznamenejte si svůj AKS_CLUSTER_NAME. V průběhu cvičení použijete tuto hodnotu později k vyčištění a nastavení konfigurace clusteru.

    echo $AKS_CLUSTER_NAME
    
  5. Vytvořte novou skupinu prostředků s názvem rg-akscostsaving. Všechny prostředky, které vytvoříte v těchto cvičeních, nasadíte v této skupině prostředků. Použití jedné skupiny prostředků usnadňuje vyčištění prostředků po dokončení modulu.

    az group create \
        --name $RESOURCE_GROUP \
        --location $REGION_NAME
    

Vytvoření clusteru AKS

Vytvořenou skupinou prostředků můžete v rámci skupiny vytvářet clustery AKS. Prvním krokem je získání verze Kubernetes ve vybrané oblasti. Tato verze je nastavená pro konfiguraci clusteru.

  1. Pokud chcete získat verzi Kubernetes, spusťte az aks get-versions příkaz. Následující dotaz vrátí verzi Kubernetes, která není ve verzi Preview. Uložte hodnotu do proměnné Bash s názvem VERSION. Pokud chcete načíst a uložit číslo verze, spusťte následující příkaz:

    VERSION=$(az aks get-versions \
        --location $REGION_NAME \
        --query "values[?isPreview==null].version | [-1]" \
        --output tsv)
    echo $VERSION
    
  2. Spuštěním az aks create příkazu vytvořte cluster AKS. Cluster běží se dvěma uzly ve fondu systémových uzlů. Dokončení tohoto příkazu může trvat několik minut.

    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $AKS_CLUSTER_NAME \
        --location $REGION_NAME \
        --kubernetes-version $VERSION \
        --node-count 2 \
        --load-balancer-sku standard \
        --vm-set-type VirtualMachineScaleSets \
        --generate-ssh-keys
    

    Příkaz az aks create má několik parametrů, které umožňují přesnou konfiguraci clusteru Kubernetes. Při konfiguraci správné podpory pro škálování a více fondů uzlů v clusteru jsou důležité dva parametry:

    Parametr a hodnota Popis
    --load-balancer-sku standard Výchozí podpora nástroje pro vyrovnávání zatížení v AKS je basic. Nástroj pro vyrovnávání zatížení basic se nepodporuje při použití více fondů uzlů. Nastavte hodnotu na standard.
    --vm-set-type VirtualMachineScaleSets Pro použití funkcí škálování v AKS se vyžadují škálovací sady virtuálních počítačů. Tento parametr povoluje podporu škálovací sady.

    Všimněte si, že dva uzly jsou ve výchozím fondu uzlů nakonfigurované pomocí parametru --node-count 2. Vzpomeňte si z předchozího popisu, že základní systémové služby běží v rámci tohoto fondu systémových uzlů. Je důležité, aby produkční clustery používaly alespoň --node-count 3 a zajistily tak spolehlivost operace clusteru. Pro aspekty nákladů v tomto cvičení použijeme jen dva uzly.

  3. Spuštěním příkazu az aks nodepool list vypište seznam fondů uzlů v novém clusteru:

    az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
    

    Tady je příklad výstupu tohoto příkazu:

    [
      {
        "agentPoolType": "VirtualMachineScaleSets",
        "availabilityZones": null,
        "count": 2,
        "enableAutoScaling": null,
        "enableNodePublicIp": false,
        "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1",
        "mode": "System",
        "name": "nodepool1",
        ...
        "type": "Microsoft.ContainerService/managedClusters/agentPools",
        "upgradeSettings": null,
        "vmSize": "Standard_DS2_v2",
        "vnetSubnetId": null
      }
    ]
    

    Všimněte si, že je fond mode uzlů nastavený System a že name je automaticky přiřazený.

Přidání fondu uzlů

  1. Váš cluster má jeden fond uzlů. Spuštěním az aks nodepool add příkazu přidejte druhý fond uzlů. Spuštěním příkazu v tomto kroku vytvořte fond uzlů uživatele se třemi uzly a názvem batchprocpl. Mějte na paměti, že názvy fondů uzlů musí začínat malým písmenem a obsahovat jenom alfanumerické znaky. Názvy fondů uzlů jsou omezené na 12 znaků pro fondy uzlů s Linuxem a šest znaků pro fondy uzlů s Windows.

    Spusťte následující příkaz:

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl \
        --node-count 2
    
  2. Spuštěním příkazu az aks nodepool list vypište nový fond uzlů v novém clusteru:

    az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
    

    Tady je příklad výstupu tohoto příkazu:

    [
      {
        "agentPoolType": "VirtualMachineScaleSets",
        "availabilityZones": null,
        "count": 2,
        "enableAutoScaling": null,
        "enableNodePublicIp": false,
        "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
        "mode": "User",
        "name": "batchprocpl",
        ...
        "type": "Microsoft.ContainerService/managedClusters/agentPools",
        "upgradeSettings": {
          "maxSurge": null
        },
        "vmSize": "Standard_DS2_v2",
        "vnetSubnetId": null
      },
      {
        "agentPoolType": "VirtualMachineScaleSets",
        "availabilityZones": null,
        "count": 2,
        "enableAutoScaling": null,
        "enableNodePublicIp": false,
        "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1",
        "mode": "System",
        "name": "nodepool1",
        ...
        "type": "Microsoft.ContainerService/managedClusters/agentPools",
        "upgradeSettings": null,
        "vmSize": "Standard_DS2_v2",
        "vnetSubnetId": null
      }
    ]
    

    Všimněte si, že parametr mode nového fondu uzlů je nastavený na User a parametr name má hodnotu batchprocpl.

Škálování počtu uzlů ve fondu uzlů na nulu

Spuštěním az aks nodepool scale příkazu škálujte uzly ve fondu uzlů ručně.

Spusťte příkaz az aks nodepool scale a pomocí parametru --node-count nastavte hodnotu počtu uzlů na 0.

Tady je příklad tohoto příkazu:

az aks nodepool scale \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $AKS_CLUSTER_NAME \
    --name batchprocpl \
    --node-count 0

Tady je příklad výstupu tohoto příkazu:

{
  "agentPoolType": "VirtualMachineScaleSets",
  "availabilityZones": null,
  "count": 0,
  "enableAutoScaling": null,
  "enableNodePublicIp": false,
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
  "maxCount": null,
  "maxPods": 110,
  "minCount": null,
  "mode": "User",
  "name": "batchprocpl",
  "nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
  "nodeLabels": null,
  "nodeTaints": null,
  "orchestratorVersion": "1.17.9",
  "osDiskSizeGb": 128,
  "osType": "Linux",
  "provisioningState": "Succeeded",
  "proximityPlacementGroupId": null,
  "resourceGroup": "rg-akscostsaving",
  "scaleSetEvictionPolicy": null,
  "scaleSetPriority": null,
  "spotMaxPrice": null,
  "tags": null,
  "type": "Microsoft.ContainerService/managedClusters/agentPools",
  "upgradeSettings": {
    "maxSurge": null
  },
  "vmSize": "Standard_DS2_v2",
  "vnetSubnetId": null
}

Všimněte si, že hodnota parametru fondu count uzlů je nastavena na hodnotu 0 a že hodnota je nastavena enableAutoScaling na nullhodnotu . Pokud chcete naplánovat úlohy, musíte počet uzlů pro tento fond uzlů zvýšit ručně, protože vytváření uzlů se ve výchozím nastavení neprovádí automaticky.

Konfigurace kontextu Kubernetes

Ve výstupu předchozího příkazu je počet uzlů ve fondu nastavený na hodnotu 0. Dostupné uzly v clusteru si můžete ověřit spuštěním příkazu kubectl get nodes.

  1. Spusťte kubectl interakci se serverem rozhraní API vašeho clusteru. Aby se příkaz kubectl mohl připojit, musíte nakonfigurovat kontext clusteru Kubernetes. Kontext obsahuje adresu clusteru, uživatele a obor názvů. Spuštěním az aks get-credentials příkazu nakonfigurujte kontext Kubernetes v Cloud Shellu.

    Načtěte přihlašovací údaje clusteru spuštěním tohoto příkazu:

    az aks get-credentials \
        --resource-group $RESOURCE_GROUP \
        --name $AKS_CLUSTER_NAME
    

    Tady je příklad výstupu tohoto příkazu.

    Merged "akscostsaving-17835" as current context in /home/user/.kube/config
    
  2. Vypište uzly ve fondech uzlů.

    kubectl get nodes
    

    Tady je příklad výstupu tohoto příkazu:

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-nodepool1-37990379-vmss000000   Ready    agent   32m   v1.17.9
    aks-nodepool1-37990379-vmss000001   Ready    agent   32m   v1.17.9
    

    Všimněte si, že i když příkaz az aks nodepool list vypíše dva fondy uzlů, jsou v clusteru k dispozici jenom dva uzly a oba jsou z fondu nodepool1.

Pokud chcete optimalizovat náklady na AKS při přímé správě požadavků na úlohy, je dobré využít následující strategii:

  • Škálujte počty uzlů ve fondech uzlů ručně.
  • Nákladné fondy uzlů uživatele založené na NV škálujte na nulu.

Pojďme se podívat na strategii, ve které potřebujete škálovat uzly, ale neřídíte poptávku přímo.