Cvičení – Konfigurace spotových uzlů pomocí automatického škálování na AKS clusteru
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.
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í.
- 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 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 natrue
.Jsou nastaveny hodnoty
maxCount
iminCount
.Vlastnost
scaleSetEvictionPolicy
je nastavena naDelete
.Vlastnost
scaleSetPriority
je nastavena naSpot
.Vlastnost
spotMaxPrice
je nastavena na-1
.Pro tento fond uzlů se použijí
nodeLabels
anodeTaints
. Tyto hodnoty použijete k naplánování úloh na uzlech ve fondu uzlů.
Nakonfigurujte obor názvů
Spuštěním příkazu
kubectl create namespace
vytvořte obor názvů s názvemcostsavings
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.
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ťtecode spot-node-deployment.yaml
. Tento příkaz otevře editor bez Průzkumníka souborů.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"
Stisknutím Ctrl+S soubor uložte a stisknutím kláves Ctrl+Q editor zavřete.
Spuštěním příkazu
kubectl apply
aplikujte konfiguraci a nasaďte aplikaci v namespacecostsavings
.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í příkazukubectl 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.