Cvičení – konfigurace fondů spotových uzlů s automatickým škálováním clusteru v clusteru AKS

Dokončeno

Fondy spotových uzlů uživatelů umožňují přístup k nevyužité výpočetní kapacitě Azure s nižšími cenami s podporou vysoce výkonných výpočetních scénářů.

V předchozím cvičení jste vytvořili standardní fond uzlů uživatele, použili automatické škálování clusteru ke správě vytváření uzlů a škálovali počet uzlů ručně.

Dalším krokem je přidání fondu spotových uzlů uživatele s automatickým škálováním, abyste snížili provozní náklady clusteru. Využití clusteru se liší podle potřebných prostředků a není předvídatelné, takže nastavíte pravidla pro zachycení špiček a poklesů. Úloha se nasadí s povoleným spřažením uzlů, aby byl pod naplánovaný na uzlech ve fondu spotových uzlů.

Vytvoření fondu spotových uzlů

Potřebujete vytvořit samostatný fond uzlů, který podporuje službu dávkového zpracování. Tento fond uzlů je fondem spotových uzlů, který využívá zásadu vyřazení Delete (Odstranit) a maximální cenu spotu -1.

  1. Spusťte stejný příkaz az aks nodepool add jako v předchozím cvičení a přidejte do clusteru nový fond spotových uzlů. Potřebujete změnit název fondu uzlů a přidat několik dalších parametrů pro identifikaci tohoto fondu uzlů jako fondu spotových uzlů.

    Zadejte následující hodnoty pro nastavení parametrů fondu uzlů:

    • Název: batchprocpl2
    • Priorita: Spot
    • Zásada vyřazení: Delete
    • Maximální cena spotu: -1

    Vytvořte fond spotových uzlů spuštěním následujícího příkazu:

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl2 \
        --enable-cluster-autoscaler \
        --max-count 3 \
        --min-count 1 \
        --priority Spot \
        --eviction-policy Delete \
        --spot-max-price -1 \
        --node-vm-size Standard_DS2_v2 \
        --no-wait
    

    Mějte na paměti, že tento požadavek nemusí být úspěšný z důvodů omezení kapacity ve vámi vybraném umístění.

  2. Spuštěním příkazu az aks nodepool show zobrazte podrobnosti o novém fondu spotových uzlů pro službu dávkového zpracování:

    az aks nodepool show \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl2
    

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

    {
    "agentPoolType": "VirtualMachineScaleSets",
    "availabilityZones": null,
    "count": 3,
    "enableAutoScaling": true,
    "enableNodePublicIp": false,
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl2",
    "maxCount": 3,
    "maxPods": 110,
    "minCount": 1,
    "mode": "User",
    "name": "batchprocpl2",
    "nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
    "nodeLabels": {
        "kubernetes.azure.com/scalesetpriority": "spot"
    },
    "nodeTaints": [
        "kubernetes.azure.com/scalesetpriority=spot:NoSchedule"
    ],
    "orchestratorVersion": "1.17.9",
    "osDiskSizeGb": 128,
    "osType": "Linux",
    "provisioningState": "Creating",
    "proximityPlacementGroupId": null,
    "resourceGroup": "akscostsavinggrp",
    "scaleSetEvictionPolicy": "Delete",
    "scaleSetPriority": "Spot",
    "spotMaxPrice": -1.0,
    "tags": null,
    "type": "Microsoft.ContainerService/managedClusters/agentPools",
    "upgradeSettings": {
        "maxSurge": null
    },
    "vmSize": "Standard_DS2_v2",
    "vnetSubnetId": null
    }
    

    Několik hodnot v tomto výsledku se zřetelně se liší od toho, co jste viděli v předchozích fondech uzlů. Pojďme si tyto položky zkontrolovat:

    • Hodnota vlastnosti enableAutoScaling je nastavená na true.

    • Hodnoty maxCount i minCount jsou nastaveny.

    • Vlastnost scaleSetEvictionPolicy je nastavena na hodnotu Delete.

    • Vlastnost scaleSetPriority je nastavena na hodnotu Spot.

    • Vlastnost spotMaxPrice je nastavena na hodnotu -1.

    • Pro tento fond uzlů jsou použité parametry nodeLabels a nodeTaints. Tyto hodnoty použijete k naplánování úloh na uzlech v tomto fondu uzlů.

Konfigurace oboru názvů

  1. Spuštěním kubectl create namespace příkazu vytvořte obor názvů volaný costsavings pro aplikaci. Tento obor názvů vám usnadní výběr úloh.

    kubectl create namespace costsavings
    

    Tady je výstup z předchozího příkazu:

    namespace/costsavings created
    

Naplánování podu se spřažením se spotovým uzlem

Můžete naplánovat spuštění podu na spotovém uzlu přidáním tolerance a spřažením do souboru manifestu nasazení podu. Když spřažení tolerace a uzlu odpovídá taintu a popisku použitému na spotové uzly, je pod na těchto uzlech naplánován.

Uzlům ve fondu spotových uzlů se přiřadí taint, který se rovná kubernetes.azure.com/scalesetpriority=spot:NoSchedule , a popisek, který se rovná kubernetes.azure.com/scalesetpriority=spot. Použijte informace v tomto páru tolerations affinity klíč-hodnota v souboru manifestu YAML a v části úloh. Když máte druhý fond pro dávkové zpracování nakonfigurovaný jako fond spotových uzlů, můžete teď vytvořit soubor nasazení, který naplánuje úlohy, které se v něm spustí.

  1. Pomocí integrovaného editoru vytvořte soubor manifestu pro nasazení Kubernetes s názvem spot-node-deployment.yaml:

    code spot-node-deployment.yaml
    

    Tip

    Cloud Shell zahrnuje integrovaný editor souborů. Editor Cloud Shellu podporuje funkce, jako jsou například zvýraznění jazyka, paleta příkazů a průzkumník souborů. V zájmu jednoduchého vytvoření a úpravy souboru spusťte editor spuštěním příkazu code . v terminálu Cloud Shellu. Tato akce otevře editor s aktivním pracovním adresářem nastaveným v terminálu. Pokud chcete soubor manifestu přímo otevřít pro rychlé úpravy, spusťte příkaz code spot-node-deployment.yaml. Tento příkaz otevře editor bez průzkumníka souborů.

  2. Vložte do souboru následující text:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
      tolerations:
      - key: "kubernetes.azure.com/scalesetpriority"
        operator: "Equal"
        value: "spot"
        effect: "NoSchedule"
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: "kubernetes.azure.com/scalesetpriority"
                operator: In
                values:
                - "spot"
    
  3. Stisknutím kombinace kláves Ctrl+S soubor uložte a stisknutím kombinace kláves Ctrl+Q zavřete editor.

  4. Spuštěním kubectl apply příkazu použijte konfiguraci a nasaďte aplikaci v costsavings oboru názvů:

    kubectl apply \
    --namespace costsavings \
    -f spot-node-deployment.yaml
    

    Tady je výstup z předchozího příkazu:

    pod/nginx created
    
  5. Další informace o spuštěném podu můžete načíst pomocí příznaku -o wide při spuštění kubectl get pods příkazu. V tomto případě chcete vidět, na jakém uzlu je pod naplánovaný. Ujistěte se, že se na pody dotazujete v oboru názvů costsavings.

    kubectl get pods --namespace costsavings -o wide
    

    Výstup by měl vypadat přibližně takto:

    NAME    READY   STATUS    RESTARTS   AGE   IP           NODE                                   NOMINATED NODE   READINESS GATES
    nginx   1/1     Running   0          43s   10.244.3.3   aks-batchprocpl2-25254417-vmss000000   <none>           <none>
    

    Všimněte si názvu uzlu aks-batchprocpl2-25254417-vmss000000. Tento uzel je součástí fondu spotových uzlů batchprocpl2, který jste vytvořili dříve.