Übung: Konfigurieren mehrerer Knoten und Aktivieren der Skalierung auf null in einem AKS-Cluster

Abgeschlossen

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

  1. Melden Sie sich mit Ihrem Azure-Konto bei Azure Cloud Shell an. Wählen Sie die Bash-Version von Cloud Shell aus.

  2. Sie werden die hier erstellten Werte in allen Übungen in diesem Modul wiederverwenden. Speichern Sie die Ausgabe für die spätere Verwendung.

  3. 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).

  4. 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
    
  5. 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.

  1. 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 Namen VERSION. 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
    
  2. 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. Der basic-Lastenausgleich wird bei Verwendung mehrerer Knotenpools nicht unterstützt. Legen Sie den Wert auf standard 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.

  3. 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 auf System festgelegt ist und name automatisch zugewiesen wird.

Hinzufügen eines Knotenpools

  1. 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 Namen batchprocpl 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
    
  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 auf User festgelegt ist und namebatchprocpl 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.

  1. Führen Sie kubectl aus, um mit dem API-Server Ihres Clusters zu interagieren. Sie müssen einen Kubernetes-Clusterkontext so konfigurieren, dass kubectl eine Verbindung herstellen kann. Der Kontext enthält die Adresse des Clusters, einen Benutzer und einen Namespace. Führen Sie den Befehl az 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
    
  2. 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 aus nodepool1 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.