Verwalten von Systemknotenpools in Azure Kubernetes Service (AKS)

Im Azure Kubernetes Service (AKS) werden Knoten derselben Konfiguration zu Knotenpools zusammengefasst. Knotenpools enthalten die zugrunde liegenden virtuellen Computer, auf denen Ihre Anwendungen ausgeführt werden. Systemknotenpools und Benutzerknotenpools sind zwei verschiedene Knotenpoolmodi für AKS-Cluster. Systemknotenpools dienen dem primären Zweck, kritische Systempods wie CoreDNS und metrics-server zu hosten. Benutzerknotenpools dienen dem primären Zweck, Ihre Anwendungspods zu hosten. Anwendungspods lassen sich jedoch auf Systemknotenpools planen, wenn Sie nur einen Pool in Ihrem AKS-Cluster haben möchten. Jeder AKS-Cluster muss mindestens einen Systemknotenpool mit mindestens zwei Knoten enthalten.

Wichtig

Wenn Sie für Ihren AKS-Cluster nur einen Systemknotenpool in einer Produktionsumgebung ausführen, sollten Sie für den Knotenpool mindestens drei Knoten verwenden.

In diesem Artikel wird erläutert, wie Sie Systemknotenpools in AKS verwalten. Informationen zum Verwenden mehrerer Knotenpools finden Sie unter Verwenden mehrerer Knotenpools.

Voraussetzungen

Azure CLI-Version 2.3.1 oder höher muss installiert und konfiguriert sein. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

Einschränkungen

Die folgenden Einschränkungen gelten für die Erstellung und Verwaltung von AKS-Clustern, die Systemknotenpools unterstützen.

  • Siehe Kontingente, VM-Größenbeschränkungen und Regionsverfügbarkeit in AKS.
  • Zum Festlegen des Modus für einen Knotenpool muss eine API der Version 2020-03-01 oder höher verwendet werden. Cluster, die in älteren API-Versionen als 2020-03-01 erstellt werden, enthalten nur Benutzerknotenpools, können aber durch Ausführen der Schritte zum Aktualisieren des Poolmodus migriert werden, sodass sie Systemknotenpools enthalten.
  • Der Name eines Knotenpools darf nur Kleinbuchstaben und Ziffern enthalten und muss mit einem Kleinbuchstaben beginnen. Bei Linux-Knotenpools muss die Länge zwischen 1 und 12 Zeichen betragen. Bei Windows-Knotenpools muss die Länge zwischen einem und sechs Zeichen liegen.
  • Der Modus eines Knotenpools ist eine erforderliche Eigenschaft und muss explizit festgelegt werden, wenn ARM-Vorlagen oder direkte API-Aufrufe verwendet werden.

System- und Benutzerknotenpools

Bei einem Systemknotenpool weist AKS seinen Knoten automatisch die Bezeichnung kubernetes.azure.com/mode: system zu. Dies bewirkt, dass AKS die Planung von Systempods in Knotenpools bevorzugt, die diese Bezeichnung enthalten. Diese Bezeichnung hindert Sie nicht an der Planung von Anwendungpods in Systemknotenpools. Es wird jedoch empfohlen, dass Sie kritische Systempods von Ihren Anwendungspods isolieren, um zu verhindern, dass falsch konfigurierte oder nicht autorisierte Anwendungspods versehentlich Systempods zerstören.

Sie können dieses Verhalten durch Erstellen eines dedizierten Systemknotenpools erzwingen. Verwenden Sie den CriticalAddonsOnly=true:NoSchedule-Taint, um zu verhindern, dass Anwendungspods in Systemknotenpools geplant werden.

Für Systemknotenpools gelten folgende Einschränkungen:

  • Systemknotenpools müssen gemäß der Formel für die mindestens erforderliche und maximal zulässige Anzahl von Pods mindestens 30 Pods unterstützen.
  • Bei Systempools muss als „osType“ Linux angegeben werden.
  • Bei Benutzerknotenpools kann als „osType“ Linux oder Windows angegeben werden.
  • Systempools müssen mindestens zwei Knoten enthalten, während Benutzerknotenpools keine oder mehrere Knoten enthalten können.
  • Für Systemknotenpools ist eine VM SKU mit mindestens 4 vCPUs und 4 GB Arbeitsspeicher erforderlich.
  • VMs der B-Serie werden für Systemknotenpools nicht unterstützt.
  • Es werden mindestens drei Knoten und 8 vCPUs oder zwei Knoten und 16 vCPUs empfohlen (z. B. Standard_DS4_v2), insbesondere für große Cluster (mehrere CoreDNS-Podreplikate, 3 bis 4 oder mehr Add-Ons usw.).
  • Für Spot-Knotenpools sind Benutzerknotenpools erforderlich.
  • Wenn Sie einen zusätzlichen Systemknotenpool hinzufügen oder ändern, welcher Knotenpool ein Systemknotenpool ist, werden die Systempods nicht automatisch verschoben. Systempods können auch dann weiterhin im selben Knotenpool ausgeführt werden, wenn Sie diesen in einen Benutzerknotenpool ändern. Wenn Sie einen Knotenpool, auf dem Systempods ausgeführt werden und der zuvor ein Systemknotenpool war, löschen oder herunterskalieren, werden diese Systempods nach einem Zeitplan mit höherer Priorität im neuen Systemknotenpool erneut bereitgestellt.

Mit Knotenpools sind folgende Vorgänge möglich:

  • Erstellen eines dedizierten Systemknotenpools (bevorzugen der Planung von Systempods in Knotenpools von mode:system)
  • Sie können aus einem Systemknotenpool einen Benutzerknotenpool machen, sofern im AKS-Cluster ein anderer Systemknotenpool als Ersatz vorhanden ist.
  • Sie können aus einem Benutzerknotenpool einen Systemknotenpool machen.
  • Sie können Benutzerknotenpools löschen.
  • Systemknotenpools können Sie löschen, wenn im AKS-Cluster ein anderer Systemknotenpool als Ersatz vorhanden ist.
  • Ein AKS-Cluster kann mehrere Systemknotenpools enthalten, benötigt jedoch mindestens einen Systemknotenpool.
  • Wenn Sie verschiedene unveränderliche Einstellungen für vorhandene Knotenpools ändern möchten, können Sie neue Knotenpools erstellen, um diese zu ersetzen. Ein Beispiel hierfür besteht darin, einen neuen Knotenpool mit einer neuen Einstellung für maximale Pods hinzuzufügen und den alten Knotenpool zu löschen.
  • Verwenden Sie Knotenaffinität, um festzulegen oder zu bevorzugen, welche Knoten basierend auf Knotenbezeichnungen geplant werden können. Sie können key auf kubernetes.azure.com, operator auf In und values von entweder user oder system auf Ihre YAML-Datei festlegen, indem Sie diese Definition mithilfe von kubectl apply -f yourYAML.yaml anwenden.

Erstellen eines neuen AKS-Clusters mit einem Systemknotenpool

Wenn Sie einen neuen AKS-Cluster erstellen, erhält der anfängliche Knotenpool standardmäßig einen Modus vom Typ system. Neue Knotenpools, die mit az aks nodepool add erstellt werden, sind Benutzerknotenpools, außer der Modusparameter (mode) wird explizit angegeben.

Im folgenden Beispiel wird eine Ressourcengruppe mit dem Namen myResourceGroup in der Region eastus erstellt.

az group create --name myResourceGroup --location eastus

Erstellen Sie mithilfe des Befehls az aks create einen AKS-Cluster. Im folgenden Beispiel wird ein Cluster mit dem Namen myAKSCluster mit einem dedizierten Systempool erstellt, der zwei Knoten enthält. Verwenden Sie in Ihren Produktionsworkloads Systemknotenpools mit mindestens drei Knoten. Dieser Vorgang kann mehrere Minuten dauern.

# Create a new AKS cluster with a single system pool
az aks create -g myResourceGroup --name myAKSCluster --node-count 2 --generate-ssh-keys

Hinzufügen eines dedizierten Systemknotenpools zu einem vorhandenen AKS-Cluster

Vorhandenen AKS-Clustern kann mindestens ein Systemknotenpool hinzugefügt werden. Es wird empfohlen, Ihre Anwendungspods in Benutzerknotenpools zu planen und Systemknotenpools nur für kritische Systempods zuzuweisen. Dadurch wird verhindert, dass nicht autorisierte Anwendungpods versehentlich Systempods löschen. Erzwingen Sie dieses Verhalten mit dem CriticalAddonsOnly=true:NoScheduleTaint für Ihre Systemknotenpools.

Mit dem folgenden Befehl wird ein dedizierter Knotenpool mit dem Modustyp „system“ und der standardmäßigen Anzahl von drei Knoten hinzugefügt.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name systempool \
    --node-count 3 \
    --node-taints CriticalAddonsOnly=true:NoSchedule \
    --mode System

Anzeigen von Details zum Knotenpool

Mit dem folgenden Befehl können Sie die Details zu Ihrem Knotenpool anzeigen.

az aks nodepool show -g myResourceGroup --cluster-name myAKSCluster -n systempool

Für Systemknotenpools wurde ein Modus vom Typ system definiert, für Benutzerknotenpools ein Modus vom Typ user. Vergewissern Sie sich bei einem Systempool, dass der Taint auf CriticalAddonsOnly=true:NoSchedule festgelegt ist, wodurch verhindert wird, dass Anwendungspods in diesem Knotenpool geplant werden können.

{
  "agentPoolType": "VirtualMachineScaleSets",
  "availabilityZones": null,
  "count": 3,
  "enableAutoScaling": null,
  "enableNodePublicIp": false,
  "id": "/subscriptions/yourSubscriptionId/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/agentPools/systempool",
  "maxCount": null,
  "maxPods": 110,
  "minCount": null,
  "mode": "System",
  "name": "systempool",
  "nodeImageVersion": "AKSUbuntu-1604-2020.06.30",
  "nodeLabels": {},
  "nodeTaints": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "orchestratorVersion": "1.16.10",
  "osDiskSizeGb": 128,
  "osType": "Linux",
  "provisioningState": "Succeeded",
  "proximityPlacementGroupId": null,
  "resourceGroup": "myResourceGroup",
  "scaleSetEvictionPolicy": null,
  "scaleSetPriority": null,
  "spotMaxPrice": null,
  "tags": null,
  "type": "Microsoft.ContainerService/managedClusters/agentPools",
  "upgradeSettings": {
    "maxSurge": null
  },
  "vmSize": "Standard_DS2_v2",
  "vnetSubnetId": null
}

Aktualisieren von vorhandenen System- und Benutzerknotenpools in Clustern

Hinweis

Zum Festlegen des Modus für einen Systemknotenpool muss eine API der Version 2020-03-01 oder höher verwendet werden. Cluster, die in älteren API-Versionen als 2020-03-01 erstellt werden, enthalten somit nur Benutzerknotenpools. Aktualisieren Sie den Modus vorhandener Knotenpools mit den folgenden Befehlen in der neuesten Version der Azure-Befehlszeilenschnittstelle, um die Funktionen und Vorteile von Systemknotenpools für ältere Cluster zu ermöglichen.

Der Modus für System- und Benutzerknotenpools kann geändert werden. Sie können aus einem Systemknotenpool nur dann einen Benutzerpool machen, wenn im AKS-Cluster bereits ein anderer Systemknotenpool vorhanden ist.

Mit diesem Befehl wird aus einem Systemknotenpool ein Benutzerknotenpool.

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode user

Mit diesem Befehl wird aus einem Benutzerknotenpool ein Systemknotenpool.

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode system

Löschen eines Systemknotenpools

Hinweis

Wenn Sie in AKS-Clustern älter als API-Version 2020-03-02 Systemknotenpools verwenden möchten, fügen Sie einen neuen Systemknotenpool hinzu, und löschen Sie anschließend den ursprünglichen Standardknotenpool.

Im AKS-Cluster müssen mindestens zwei Systemknotenpools vorhanden sein, damit Sie einen davon löschen können.

az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster -n mynodepool

Bereinigen von Ressourcen

Wenn Sie den Cluster löschen möchten, verwenden Sie den Befehl az group delete, um die AKS-Ressourcengruppe zu löschen:

az group delete --name myResourceGroup --yes --no-wait

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie Sie Systemknotenpools in einem AKS-Cluster erstellen und verwalten. Informationen zum Starten und Beenden von AKS-Knotenpools finden Sie unter Starten und Beenden von AKS-Knotenpools.