Übung: Konfigurieren mehrerer Knoten und Aktivieren der Skalierung auf null in einem AKS-Cluster
Mit Azure Kubernetes Service können Sie verschiedene Knotenpools erstellen, um bestimmte Workloads mit den Knoten abzugleichen, die in jedem Knotenpool ausgeführt werden.
Im Rahmen des Beispiels zur Drohnennachverfolgung hat Ihr Team einen neuen prädiktiven Modellierungsdienst entwickelt, der Flugrouteninformationen unter extremen Wetterbedingungen verarbeitet und optimale Flugrouten berechnet. Dieser Dienst erfordert Unterstützung durch GPU-basierte virtuelle Computer (VMs) und wird nur an bestimmten Tagen der Woche ausgeführt. Das Team möchte sicherstellen, dass keine VMs verwendet werden, wenn der Dienst nicht ausgeführt wird.
Hier erstellen Sie einen von Azure Kubernetes Service (AKS) verwalteten Kubernetes-Cluster. Als Nächstes konfigurieren Sie den Cluster so, dass er mehrere Knotenpools unterstützt und die Skalierung der Knoten in den Knotenpools ermöglicht. Anschließend fügen Sie einen zweiten Knotenpool hinzu, um Benutzerworkloads mit einer dynamischen Knotenanzahl zu unterstützen. Schließlich skalieren Sie die Anzahl der Knoten auf 0, um die Kosten für die in Ihrem AKS-Cluster verwendeten Knoten zu reduzieren.
Erstellen einer neuen Ressourcengruppe
Melden Sie sich mit Ihrem Azure-Konto bei Azure Cloud Shell an. Wählen Sie die Bash-Version von Cloud Shell aus.
Sie werden die hier erstellten Werte in allen Übungen in diesem Modul wiederverwenden. Speichern Sie die Ausgabe für die spätere Verwendung.
Wählen Sie eine Region aus, in der Ihre Ressourcengruppe gehostet wird. Funktionen aus späteren Übungen sind nicht in allen Regionen verfügbar. Aus diesem Grund empfehlen wir Ihnen, eastus als Ihre Region zu verwenden. Wenn Sie einen anderen Wert verwenden möchten, ändern Sie den Wert von
REGION_NAME
.Führen Sie die folgenden Befehle aus, um Ihre Variablen zu registrieren:
REGION_NAME=eastus RESOURCE_GROUP=rg-akscostsaving AKS_CLUSTER_NAME=akscostsaving-$RANDOM
Tipp
Mit der Schaltfläche Kopieren können Sie Befehle in die Zwischenablage kopieren. Klicken Sie zum Einfügen im Cloud Shell-Terminal mit der rechten Maustaste auf eine neue Zeile, und wählen Sie dann Einfügen aus, oder verwenden Sie die Tastenkombination UMSCHALT+EINFG (⌘+V unter macOS).
Sie können die einzelnen Werte überprüfen, indem Sie den Befehl
echo
ausführen (z. B.echo $REGION_NAME
).Notieren Sie sich Ihre
AKS_CLUSTER_NAME
. Im Laufe der Übungen verwenden Sie diesen Wert für Bereinigungs- und Konfigurationseinstellungen für Ihren Cluster.echo $AKS_CLUSTER_NAME
Erstellen Sie eine neue Ressourcengruppe namens rg-akscostsaving. Sie stellen alle Ressourcen bereit, die Sie in diesen Übungen in dieser Ressourcengruppe erstellen. Verwenden Sie nur eine Ressourcengruppe. Das erleichtert die Bereinigung der Ressourcen nach Abschluss des Moduls.
az group create \ --name $RESOURCE_GROUP \ --location $REGION_NAME
Erstellen des AKS-Clusters
Wenn die Ressourcengruppe erstellt ist, können Sie innerhalb der Gruppe AKS-Cluster erstellen. Der erste Schritt besteht darin, die Kubernetes-Version in der von Ihnen gewählten Region abzurufen. Diese Version wird zur Konfiguration Ihres Clusters verwendet.
Um die Kubernetes-Version abzurufen, führen Sie den Befehl
az aks get-versions
aus. Die folgende Abfrage gibt eine Kubernetes-Version ohne Vorschau zurück. Speichern Sie diesen Wert in einer Bash-Variablen mit dem NamenVERSION
. Führen Sie den folgenden Befehl aus, um die Versionsnummer abzurufen und zu speichern:VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query "values[?isPreview==null].version | [-1]" \ --output tsv) echo $VERSION
Führen Sie den Befehl
az aks create
aus, um den AKS-Cluster zu erstellen. Der Cluster wird mit zwei Knoten im Systemknotenpool ausgeführt. Die Ausführung dieses Befehls kann einige Minuten dauern.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
Der Befehl
az aks create
verfügt über mehrere Parameter, die eine genaue Konfiguration Ihres Kubernetes-Clusters ermöglichen. Beim Konfigurieren der richtigen Unterstützung in Ihrem Cluster für Skalierung und mehrere Knotenpools gibt es zwei wichtige Parameter:Parameter und Wert Beschreibung --load-balancer-sku standard
Die standardmäßig festgelegte Lastenausgleichsunterstützung in AKS ist basic
. Derbasic
-Lastenausgleich wird bei Verwendung mehrerer Knotenpools nicht unterstützt. Legen Sie den Wert aufstandard
fest.--vm-set-type VirtualMachineScaleSets
VM-Skalierungsgruppen sind erforderlich, um die Skalierungsfeatures in AKS zu verwenden. Dieser Parameter ermöglicht die Unterstützung von Skalierungsgruppen. Beachten Sie, dass im Standardknotenpool mit dem Parameter
--node-count 2
zwei Knoten konfiguriert sind. Wie zuvor beschrieben werden wichtige Systemdienste in diesem Systemknotenpool ausgeführt. Es ist wichtig, dass Produktionscluster bei Clustervorgängen mindestens--node-count 3
für die Zuverlässigkeit verwenden. In dieser Übung werden nur zwei Knoten verwendet, um die Kosten zu berücksichtigen.Führen Sie den Befehl
az aks nodepool list
aus, um die Knotenpools in Ihrem neuen Cluster aufzulisten:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Das folgende Beispiel zeigt die Ausgabe des Befehls:
[ { "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 } ]
Beachten Sie, dass
mode
für den Knotenpool aufSystem
festgelegt ist undname
automatisch zugewiesen wird.
Hinzufügen eines Knotenpools
Ihr Cluster verfügt über einen einzelnen Knotenpool. Fügen Sie einen zweiten Knotenpool hinzu, indem Sie den Befehl
az aks nodepool add
ausführen. Führen Sie den Befehl in diesem Schritt aus, um einen Benutzerknotenpool mit drei Knoten und dem Namenbatchprocpl
zu erstellen. Beachten Sie, dass Namen von Knotenpools mit einem Kleinbuchstaben beginnen müssen und nur alphanumerische Zeichen enthalten dürfen. Knotenpoolnamen sind auf zwölf Zeichen für Linux-Knotenpools und sechs Zeichen für Windows-Knotenpools beschränkt.Führen Sie den folgenden Befehl aus:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl \ --node-count 2
Führen Sie den Befehl
az aks nodepool list
aus, um den neuen Knotenpool in Ihrem neuen Cluster aufzulisten:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Das folgende Beispiel zeigt die Ausgabe des Befehls:
[ { "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 } ]
Beachten Sie, dass
mode
für den neuen Knotenpool aufUser
festgelegt ist undname
batchprocpl
ist.
Skalieren der Knotenanzahl des Knotenpools auf null
Führen Sie den Befehl az aks nodepool scale
aus, um Knoten in einem Knotenpool manuell zu skalieren.
Führen Sie den Befehl az aks nodepool scale
aus, und verwenden Sie den Parameter --node-count
, um den Wert für die Knotenanzahl auf 0 (null) festzulegen.
Das folgende Beispiel zeigt den Befehl:
az aks nodepool scale \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name batchprocpl \
--node-count 0
Das folgende Beispiel zeigt die Ausgabe des Befehls:
{
"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
}
Beachten Sie, dass der count
-Parameter des Knotenpools auf 0 und der enableAutoScaling
-Wert auf null
festgelegt ist. Um Workloads zu planen, müssen Sie die Anzahl der Knoten für diesen Knotenpool manuell erhöhen, da die Knotenerstellung nicht automatisch erfolgt.
Konfigurieren des Kubernetes-Kontexts
In der Ausgabe des vorherigen Befehls ist die Knotenpoolanzahl auf 0 festgelegt. Sie können die verfügbaren Knoten im Cluster überprüfen, indem Sie den Befehl kubectl get nodes
ausführen.
Führen Sie
kubectl
aus, um mit dem API-Server Ihres Clusters zu interagieren. Sie müssen einen Kubernetes-Clusterkontext so konfigurieren, dasskubectl
eine Verbindung herstellen kann. Der Kontext enthält die Adresse des Clusters, einen Benutzer und einen Namespace. Führen Sie den Befehlaz aks get-credentials
aus, um den Kubernetes-Kontext in Cloud Shell zu konfigurieren.Rufen Sie die Anmeldeinformationen des Clusters ab, indem Sie diesen Befehl ausführen:
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME
Das folgende Beispiel zeigt eine Ausgabe des Befehls.
Merged "akscostsaving-17835" as current context in /home/user/.kube/config
Listen Sie die Knoten in Ihren Knotenpools auf.
kubectl get nodes
Dies ist ein Beispiel für die Befehlsausgabe:
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
Beachten Sie, dass, obwohl der Befehl
az aks nodepool list
zwei Knotenpools auflistet, nur zwei Knoten im Cluster verfügbar sind und beide ausnodepool1
stammen.
Folgendes ist eine gute Strategie, um die Kosten für AKS zu optimieren, wenn Sie Workloadanforderungen direkt verwalten:
- Manuelles Skalieren der Knotenzahl in Knotenpools
- Skalieren teurer, NV-basierter Benutzerknotenpools auf 0
Sehen wir uns eine Strategie an, bei der Sie Knoten skalieren müssen, aber den Bedarf nicht direkt steuern.