Ćwiczenie — konfigurowanie wielu węzłów i włączanie skalowania do zera w klastrze AKS
Usługa Azure Kubernetes Service umożliwia tworzenie różnych pul węzłów w celu dopasowania określonych obciążeń do węzłów uruchomionych w poszczególnej puli węzłów.
Jak pamiętasz z przykładu śledzenia dronów, zespół opracował nową usługę modelowania predykcyjnego, która przetwarza informacje o ścieżce lotu w ekstremalnych warunkach pogodowych i tworzy optymalne trasy lotu. Ta usługa wymaga obsługi maszyny wirtualnej opartej na procesorze graficznym GPU i jest uruchamiana tylko w określonych dniach w tygodniu. Zespół chce upewnić się, że żadne maszyny wirtualne nie są używane, gdy usługa nie jest uruchomiona.
W tym miejscu utworzysz klaster Kubernetes zarządzany przez usługę Azure Kubernetes Service (AKS). Następnie skonfigurujesz klaster tak, aby obsługiwał wiele pul węzłów i umożliwić klastrom skalowanie węzłów w pulach węzłów. Następnie dodasz drugą pulę węzłów, aby obsługiwać obciążenia użytkowników z liczbą węzłów dynamicznych. Na koniec przeskalujesz liczbę węzłów do zera, aby zmniejszyć koszt węzłów używanych w klastrze usługi AKS.
Tworzenie nowej grupy zasobów
Zaloguj się do usługi Azure Cloud Shell przy użyciu konta platformy Azure. Wybierz usługę Cloud Shell w wersji Bash.
Ponownie użyjesz wartości utworzonych tutaj we wszystkich ćwiczeniach w tym module. Zapisz dane wyjściowe do użycia w przyszłości.
Wybierz region do hostowania grupy zasobów. Funkcje z późniejszych ćwiczeń nie są dostępne we wszystkich regionach. Z tego powodu zalecamy użycie regionu eastus jako regionu. Jeśli zdecydujesz się użyć innej wartości, zmień wartość .
REGION_NAME
Uruchom następujące polecenia, aby zarejestrować zmienne:
REGION_NAME=eastus RESOURCE_GROUP=rg-akscostsaving AKS_CLUSTER_NAME=akscostsaving-$RANDOM
Napiwek
Do kopiowania poleceń do schowka możesz używać przycisku Kopiuj. Aby wkleić, kliknij prawym przyciskiem myszy nowy wiersz w terminalu usługi Cloud Shell i wybierz polecenie Wklej lub użyj skrótu klawiaturowego Shift+Insert (⌘+V w systemie macOS).
Każdą wartość można sprawdzić, uruchamiając
echo
polecenie,echo $REGION_NAME
na przykład .Zanotuj element
AKS_CLUSTER_NAME
. W kolejnych ćwiczeniach użyjesz tej wartości do czyszczenia i konfigurowania ustawień klastra.echo $AKS_CLUSTER_NAME
Utwórz nową grupę zasobów o nazwie rg-akscostsaving. Wszystkie zasoby utworzone w tych ćwiczeniach zostaną wdrożone w tej grupie zasobów. Jedna grupa zasobów ułatwia czyszczenie zasobów po ukończeniu modułu.
az group create \ --name $RESOURCE_GROUP \ --location $REGION_NAME
Tworzenie klastra AKS
Po utworzeniu grupy zasobów można utworzyć klastry usługi AKS w grupie. Pierwszym krokiem jest pobranie wersji rozwiązania Kubernetes w wybranym regionie. Ta wersja jest ustawiona w celu skonfigurowania klastra.
Aby uzyskać wersję platformy Kubernetes, uruchom
az aks get-versions
polecenie . Poniższe zapytanie zwraca wersję platformy Kubernetes spoza wersji zapoznawczej. Zapisz wartość w zmiennej powłoki Bash o nazwieVERSION
. Uruchom poniższe polecenie, aby pobrać i zapisać numer wersji:VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query "values[?isPreview==null].version | [-1]" \ --output tsv) echo $VERSION
Uruchom polecenie ,
az aks create
aby utworzyć klaster usługi AKS. Klaster działa z dwoma węzłami w puli węzłów systemowych. Wykonanie tego polecenia może potrwać kilka minut.az aks create \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --location $REGION_NAME \ --kubernetes-version $VERSION \ --node-count 2 \ --load-balancer-sku standard \ --vm-set-type VirtualMachineScaleSets \ --generate-ssh-keys
Polecenie
az aks create
ma kilka parametrów, które umożliwiają precyzyjną konfigurację klastra Kubernetes. Są dwa ważne parametry konfigurowania poprawnej obsługi w klastrze na potrzeby skalowania i wielu puli węzłów:Parametr i wartość opis --load-balancer-sku standard
Domyślna obsługa modułu równoważenia obciążenia w usłudze AKS jest w warstwie basic
. Moduł równoważenia obciążenia w warstwiebasic
nie jest obsługiwany w przypadku używania wielu pul węzłów. Ustaw wartość nastandard
.--vm-set-type VirtualMachineScaleSets
Do korzystania z funkcji skalowania w usłudze AKS są wymagane zestawy skalowania maszyn wirtualnych. Ten parametr umożliwia obsługę zestawów skalowania. Zwróć uwagę, że dwa węzły są konfigurowane w domyślnej puli węzłów przy użyciu parametru
--node-count 2
. Przypomnij sobie z poprzedniego opisu, że podstawowe usługi systemowe działają w tej puli węzłów systemowych. Ważne jest, aby klastry produkcyjne używały co najmniej--node-count 3
węzłów w celu zapewnienia niezawodności w operacji klastra. W tym ćwiczeniu na potrzeby rozważania kosztów stosowane są tylko dwa węzły.Uruchom polecenie
az aks nodepool list
, aby wyświetlić listę pul węzłów w nowym klastrze:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Oto przykładowe dane wyjściowe tego polecenia:
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Zwróć uwagę, że pula węzłów
mode
jest ustawiona naSystem
wartość i żename
element jest automatycznie przypisywany.
Dodawanie puli węzłów
Klaster ma jedną pulę węzłów. Dodaj drugą pulę węzłów, uruchamiając
az aks nodepool add
polecenie . Uruchom polecenie w tym kroku, aby utworzyć pulę węzłów użytkownika z trzema węzłami i nazwąbatchprocpl
. Pamiętaj, że nazwy pul węzłów muszą zaczynać się małą literą i zawierać tylko znaki alfanumeryczne. Nazwy pul węzłów są ograniczone do 12 znaków dla pul węzłów systemu Linux i 6 znaków dla pul węzłów systemu Windows.Uruchom następujące polecenie:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl \ --node-count 2
Uruchom polecenie
az aks nodepool list
, aby wyświetlić na liście nową pulę węzłów w nowym klastrze:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Oto przykładowe dane wyjściowe tego polecenia:
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl", "mode": "User", "name": "batchprocpl", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }, { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Zwróć uwagę, że
mode
nowej puli węzłów jest ustawiony naUser
, a jego nazwaname
tobatchprocpl
.
Skalowanie liczby węzłów w puli węzłów do zera
Uruchom polecenie , az aks nodepool scale
aby ręcznie skalować węzły w puli węzłów.
Uruchom polecenie az aks nodepool scale
i użyj parametru --node-count
, aby ustawić wartość liczby węzłów na 0.
Oto przykład polecenia:
az aks nodepool scale \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name batchprocpl \
--node-count 0
Oto przykładowe dane wyjściowe tego polecenia:
{
"agentPoolType": "VirtualMachineScaleSets",
"availabilityZones": null,
"count": 0,
"enableAutoScaling": null,
"enableNodePublicIp": false,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
"maxCount": null,
"maxPods": 110,
"minCount": null,
"mode": "User",
"name": "batchprocpl",
"nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
"nodeLabels": null,
"nodeTaints": null,
"orchestratorVersion": "1.17.9",
"osDiskSizeGb": 128,
"osType": "Linux",
"provisioningState": "Succeeded",
"proximityPlacementGroupId": null,
"resourceGroup": "rg-akscostsaving",
"scaleSetEvictionPolicy": null,
"scaleSetPriority": null,
"spotMaxPrice": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"upgradeSettings": {
"maxSurge": null
},
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null
}
Zwróć uwagę, że wartość parametru puli count
węzłów jest ustawiona na 0, a wartość jest ustawiona enableAutoScaling
na null
wartość . Aby zaplanować obciążenia, należy ręcznie zwiększyć liczbę węzłów dla tej puli węzłów, ponieważ tworzenie węzła nie jest wykonywane automatycznie.
Konfigurowanie kontekstu platformy Kubernetes
W wyniku poprzedniego polecenia liczba puli węzłów jest ustawiona na 0. Liczbę węzłów dostępnych w klastrze można potwierdzić, uruchamiając polecenie kubectl get nodes
.
Uruchom polecenie
kubectl
, aby wchodzić w interakcje z serwerem interfejsu API klastra. Aby umożliwić aplikacjikubectl
nawiązanie połączenia, należy skonfigurować kontekst klastra Kubernetes. Kontekst zawiera adres klastra, użytkownika i przestrzeń nazw.az aks get-credentials
Uruchom polecenie , aby skonfigurować kontekst Kubernetes w usłudze Cloud Shell.Pobierz poświadczenia klastra, uruchamiając następujące polecenie:
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME
Oto przykładowe dane wyjściowe tego polecenia.
Merged "akscostsaving-17835" as current context in /home/user/.kube/config
Wyświetl listę węzłów w pulach węzłów.
kubectl get nodes
Oto przykładowe dane wyjściowe polecenia:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37990379-vmss000000 Ready agent 32m v1.17.9 aks-nodepool1-37990379-vmss000001 Ready agent 32m v1.17.9
Zwróć uwagę, że mimo tego, iż polecenie
az aks nodepool list
wyświetla listę dwóch pul węzłów, w klastrze są dostępne tylko dwa węzły i oba są z pulinodepool1
.
Aby zoptymalizować koszty korzystania z usługi AKS w przypadku bezpośredniego zarządzania wymaganiami dotyczącymi obciążeń, dobrą strategią jest:
- Ręczne skalowanie liczby węzłów w pulach węzłów.
- Skalowanie drogich, opartych na serii NV pul węzłów użytkownika do zera.
Przyjrzyjmy się strategii, w której chcesz skalować węzły, ale nie kontrolujesz żądania bezpośrednio.