Ćwiczenie — konfigurowanie pul węzłów typu spot przy użyciu 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 pulę węzłów użytkownika standardowego, użyto automatycznego skalowania klastra do zarządzania tworzeniem węzłów i ręcznie przeskalowane liczby węzłów.
Następnym krokiem jest dodanie puli węzłów użytkownika typu spot z automatycznym skalowaniem w celu zmniejszenia kosztów operacyjnych 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ą koligacją węzłów, aby zasobnik był zaplanowany na węzłach w puli węzłów typu spot.
Tworzenie puli węzłów typu spot
Należy utworzyć oddzielną pulę węzłów, która obsługuje usługę przetwarzania wsadowego. Jest to pula węzłów typu spot, która korzysta z zasad eksmisji Usuwanie i ma maksymalną cenę usługi Spot równą -1.
Uruchom polecenie
az aks nodepool add
w taki sam sposób, jak w poprzednim ćwiczeniu, aby dodać do klastra nową pulę węzłów typu spot. 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 usługi 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 ze względu na ograniczenia pojemności w wybranej przez Ciebie 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ładowe dane wyjściowe tego 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 tych wynikach znacząco różni się od tego, co widzieliśmy w poprzednich pulach węzłów. Przejrzyjmy te elementy:
Dla właściwości
enableAutoScaling
jest ustawiona wartośćtrue
.Ustawiono wartości
maxCount
iminCount
.Właściwość
scaleSetEvictionPolicy
ma ustawioną wartośćDelete
.Właściwość
scaleSetPriority
ma ustawioną wartośćSpot
.Właściwość
spotMaxPrice
ma ustawioną wartość-1
.Do tej puli węzłów mają zastosowanie wartości
nodeLabels
inodeTaints
. Te wartości służą do planowania obciążeń na węzłach w puli węzłów.
Konfigurowanie przestrzeni nazw
Uruchom polecenie ,
kubectl create namespace
aby utworzyć przestrzeń nazw o nazwiecostsavings
dla aplikacji. Ta przestrzeń nazw 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 tolerancję i koligację do pliku manifestu wdrożenia zasobnika. Gdy tolerancja i koligacja węzła odpowiadają defektowi i etykiecie zastosowanej do węzłów typu spot, zasobnik jest zaplanowany na tych węzłach.
Węzły w puli węzłów typu spot mają przypisaną etykietę równą kubernetes.azure.com/scalesetpriority=spot:NoSchedule
i etykietę równą kubernetes.azure.com/scalesetpriority=spot
. Użyj informacji w tej parze klucz-wartość w tolerations
sekcji i affinity
pliku manifestu YAML obciążeń. Po skonfigurowaniu drugiej puli przetwarzania wsadowego jako puli węzłów typu spot możesz utworzyć plik wdrożenia, aby zaplanować uruchamianie obciążeń w tej puli.
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
Napiwek
Usługa Cloud Shell udostępnia zintegrowany edytor plików. Edytor usługi Cloud Shell obsługuje różne funkcje, takie jak wyróżnianie elementów języka, paleta poleceń i eksplorator plików. Na potrzeby prostego tworzenia i edytowania plików otwórz edytor, uruchamiając polecenie
code .
w terminalu usługi Cloud Shell. Działanie to powoduje otwarcie edytora z aktywnym katalogiem roboczym ustawionym w terminalu. Aby bezpośrednio otworzyć plik manifestu w celu szybkiej edycji, uruchomcode spot-node-deployment.yaml
. To polecenie powoduje otwarcie edytora bez eksploratora plików.Wklej do tego pliku poniższy tekst:
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 klawisze Ctrl+S , aby zapisać plik, a następnie naciśnij klawisze Ctrl+Q , aby zamknąć edytor.
Uruchom polecenie ,
kubectl apply
aby zastosować konfigurację i wdrożyć aplikację wcostsavings
przestrzeni nazw:kubectl apply \ --namespace costsavings \ -f spot-node-deployment.yaml
Oto dane wyjściowe z poprzedniego polecenia:
pod/nginx created
Aby pobrać więcej informacji o uruchomionym zasobniku, możesz użyć flagi podczas uruchamiania
-o wide
kubectl get pods
polecenia. W tym przypadku chcesz zobaczyć, w którym węźle jest zaplanowany zasobnik. Upewnij się, że wykonano zapytanie o zasobniki 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 typu spotbatchprocpl2
.