Cvičení – Konfigurace spotových uzlů pomocí automatického škálování na AKS clusteru

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 je nasazena s povolenou afinitou uzlů, aby byl pod naplánován na uzlech ve fondu spotových uzlů.

Vytvořte fond spotových uzlů

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

  1. Spuštěním stejného příkazu az aks nodepool add jako v předchozím cvičení 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ásady vyřazení: Delete
    • Maximální spotová cena: -1

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

    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 může selhat kvůli omezením kapacity ve 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 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 výrazně liší od toho, co jste viděli v předchozích uzlových skupinách. Pojďme se podívat na tyto položky:

    • Hodnota vlastnosti enableAutoScaling je nastavena na true.

    • Jsou nastaveny hodnoty maxCount i minCount.

    • Vlastnost scaleSetEvictionPolicy je nastavena na Delete.

    • Vlastnost scaleSetPriority je nastavena na Spot.

    • Vlastnost spotMaxPrice je nastavena na -1.

    • Pro tento fond uzlů se použijí nodeLabels a nodeTaints. Tyto hodnoty použijete k naplánování úloh na uzlech ve fondu uzlů.

Nakonfigurujte obor názvů

  1. Spuštěním příkazu kubectl create namespace vytvořte obor názvů s názvem costsavings pro aplikaci. Tento obor názvů použijete k usnadnění výběru úloh.

    kubectl create namespace costsavings
    

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

    namespace/costsavings created
    

Naplánovat pod s afinitou pro spotové uzly

Můžete naplánovat spuštění podu na spotovém uzlu přidáním tolerování a afinity do souboru s manifestem nasazení podu. Když tolerance a afinita uzlů odpovídají taintu a štítku použitému na spotové uzly, pod je 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 štítek, který se rovná kubernetes.azure.com/scalesetpriority=spot. Použijte informace z tohoto páru klíč-hodnota v sekci tolerations a affinity vašeho YAML manifest souboru úloh. Když je druhý fond dávkového zpracování nakonfigurovaný jako fond spotových uzlů, můžete teď vytvořit soubor nasazení, který naplánuje spouštění úloh.

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

    code spot-node-deployment.yaml
    

    Spropitné

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

  2. Do souboru vložte 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 Ctrl+S soubor uložte a stisknutím kláves Ctrl+Q editor zavřete.

  4. Spuštěním příkazu kubectl apply aplikujte konfiguraci a nasaďte aplikaci v namespace costsavings.

    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í příkazu kubectl get pods. V takovém případě chcete zjistit, na kterém uzlu je pod naplánován. Ujistěte se, že provedete dotaz na pody 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í poolu spotových uzlů batchprocpl2, který jste vytvořili dříve.