Ćwiczenie — konfigurowanie pul węzłów typu spot za pomocą narzędzia do automatycznego skalowania klastra w klastrze usługi AKS
Pule węzłów użytkownika typu spot umożliwiają dostęp do nieużywanej pojemności obliczeniowej platformy Azure przy niższych cenach dzięki obsłudze scenariuszy obliczeń o wysokiej wydajności.
W poprzednim ćwiczeniu utworzono standardową pulę węzłów użytkownika, użyto automatycznego skalowania klastra do zarządzania tworzeniem węzłów i liczbę węzłów przeskalowano ręcznie.
Następnym krokiem jest dodanie puli węzłów użytkownika typu spot z automatycznym skalowaniem, aby zmniejszyć koszty operacyjne klastra. Użycie klastra różni się w zależności od potrzebnych zasobów i nie jest przewidywalne, dlatego skonfigurujesz reguły przechwytywania skoków i spadków. Obciążenie jest wdrażane z włączoną preferencją węzłów, aby pod był zaplanowany na węzłach w puli węzłów typu spot.
Utwórz pulę węzłów typu spot
Należy utworzyć oddzielną pulę węzłów obsługującą usługę przetwarzania wsadowego. Ta pula węzłów jest pulą węzłów typu spot, która korzysta z polityki usuwania i maksymalnej ceny typu spot wynoszącej -1.
Uruchom to samo polecenie
az aks nodepool add
co w poprzednim ćwiczeniu, aby dodać nową pulę węzłów typu spot do klastra. Musisz zmienić nazwę puli węzłów i dodać kilka dodatkowych parametrów, aby zidentyfikować tę pulę węzłów jako pulę węzłów typu spot.Wprowadź następujące wartości, aby ustawić parametry puli węzłów:
- Nazwa:
batchprocpl2
- Priorytet:
Spot
- Zasady eksmisji:
Delete
- Maksymalna cena typu spot:
-1
Uruchom następujące polecenie, aby utworzyć pulę węzłów typu spot:
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
Należy pamiętać, że to żądanie może zakończyć się niepowodzeniem z powodu ograniczeń pojemności w wybranej lokalizacji.
- Nazwa:
Uruchom polecenie
az aks nodepool show
, aby wyświetlić szczegóły nowej puli węzłów typu spot dla usługi przetwarzania wsadowego:az aks nodepool show \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl2
Oto przykład danych wyjściowych polecenia .
{ "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 }
Kilka wartości w tym wyniku różni się od tego, co widać w poprzednich pulach węzłów. Przejrzyjmy następujące elementy:
Wartość właściwości
enableAutoScaling
jest ustawiona na wartośćtrue
.Ustawiono zarówno wartości
maxCount
, jak iminCount
.Właściwość
scaleSetEvictionPolicy
jest ustawiona na wartośćDelete
.Właściwość
scaleSetPriority
jest ustawiona na wartośćSpot
.Właściwość
spotMaxPrice
jest ustawiona na wartość-1
.Do tej puli węzłów są stosowane
nodeLabels
inodeTaints
. Te wartości służą do planowania obciążeń w węzłach w puli węzłów.
Konfigurowanie przestrzeni nazw
Uruchom polecenie
kubectl create namespace
, aby utworzyć przestrzeń nazw o nazwiecostsavings
dla aplikacji. Użyjesz tej przestrzeni nazw, aby ułatwić wybieranie obciążeń.kubectl create namespace costsavings
Oto dane wyjściowe z poprzedniego polecenia:
namespace/costsavings created
Planowanie zasobnika z koligacją węzła typu spot
Zasobnik można zaplanować do uruchomienia w węźle typu spot, dodając tolerację i powiązanie do pliku manifestu wdrożenia zasobnika. Gdy tolerancja i przywiązanie węzła odpowiadają sprośności i etykiecie zastosowanej do węzłów typu spot, zasobnik jest umieszczany na tych węzłach.
Węzły w puli węzłów typu spot mają przypisane skażenie równe kubernetes.azure.com/scalesetpriority=spot:NoSchedule
i etykietę równą kubernetes.azure.com/scalesetpriority=spot
. Użyj informacji w tej parze klucz-wartość w sekcji tolerations
i affinity
pliku manifestu YAML Twoich obciążeń. Po skonfigurowaniu drugiej puli przetwarzania wsadowego jako puli węzłów typu spot można teraz utworzyć plik wdrożenia, aby zaplanować uruchamianie na nim obciążeń.
Utwórz plik manifestu dla wdrożenia platformy Kubernetes o nazwie
spot-node-deployment.yaml
przy użyciu zintegrowanego edytora:code spot-node-deployment.yaml
Wskazówka
Usługa Cloud Shell zawiera zintegrowany edytor plików. Edytor usługi Cloud Shell obsługuje funkcje, takie jak wyróżnianie języków, paleta poleceń i eksplorator plików. W celu prostego tworzenia i edytowania plików uruchom edytor, uruchamiając
code .
w terminalu usługi Cloud Shell. Ta akcja spowoduje otwarcie edytora z aktywnym katalogiem roboczym ustawionym w terminalu. Aby otworzyć plik manifestu bezpośrednio w celu szybkiego edytowania, uruchom poleceniecode spot-node-deployment.yaml
. To polecenie otwiera edytor bez Eksploratora plików.Wklej następujący tekst do pliku:
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"
Naciśnij Ctrl+S, aby zapisać plik, a następnie naciśnij Ctrl+Q, aby zamknąć edytor.
Uruchom polecenie
kubectl apply
, aby zastosować konfigurację i wdrożyć aplikację w przestrzeni nazwcostsavings
:kubectl apply \ --namespace costsavings \ -f spot-node-deployment.yaml
Oto dane wyjściowe z poprzedniego polecenia:
pod/nginx created
Aby uzyskać więcej informacji o uruchomionym zasobniku, użyj flagi
-o wide
podczas uruchamiania poleceniakubectl get pods
. W takim przypadku chcesz zobaczyć, w którym węźle zaplanowano zasobnik. Pamiętaj, aby wykonać zapytanie dotyczące zasobników w przestrzeni nazwcostsavings
.kubectl get pods --namespace costsavings -o wide
Dane wyjściowe powinny wyglądać podobnie do następujących:
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>
Zwróć uwagę na nazwę węzła
aks-batchprocpl2-25254417-vmss000000
. Ten węzeł jest częścią utworzonej wcześniej puli węzłów typubatchprocpl2
spot.