Cvičení – konfigurace fondů spotových uzlů s automatickým škálováním clusteru v clusteru AKS
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.
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í.
- Název:
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á natrue
.Hodnoty
maxCount
iminCount
jsou nastaveny.Vlastnost
scaleSetEvictionPolicy
je nastavena na hodnotuDelete
.Vlastnost
scaleSetPriority
je nastavena na hodnotuSpot
.Vlastnost
spotMaxPrice
je nastavena na hodnotu-1
.Pro tento fond uzlů jsou použité parametry
nodeLabels
anodeTaints
. Tyto hodnoty použijete k naplánování úloh na uzlech v tomto fondu uzlů.
Konfigurace oboru názvů
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í.
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říkazcode spot-node-deployment.yaml
. Tento příkaz otevře editor bez průzkumníka souborů.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"
Stisknutím kombinace kláves Ctrl+S soubor uložte a stisknutím kombinace kláves Ctrl+Q zavřete editor.
Spuštěním
kubectl apply
příkazu použijte konfiguraci a nasaďte aplikaci vcostsavings
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
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.