Freigeben über


Verwalten von Systemknotenpools in Azure Kubernetes Service (AKS)

In Azure Kubernetes Service (AKS) werden Knoten derselben Konfiguration in node pools gruppiert. Knotenpools enthalten die zugrunde liegenden virtuellen Computer (VM), die Ihre Anwendungen ausführen. Systemknotenpools und Benutzerknotenpools sind zwei verschiedene Knotenpoolmodi für AKS-Cluster. In diesem Artikel wird erläutert, wie Sie Systemknotenpools in AKS verwalten. Informationen zur Verwendung mehrerer Knotenpools finden Sie unter Erstellen von Knotenpools.

  • Systemknotenpools: Der hauptzweck ist das Hosten kritischer System-Pods wie CoreDNS und metrics-server. Systemknotenpools sollten nicht zum Ausführen Ihrer Anwendung verwendet werden. Systemknotenpools verwenden Ubuntu Linux oder Azure Linux.
  • Benutzerknotenpools: Der Hauptzweck besteht darin, Ihre Anwendungs pods zu hosten und Anwendungen vom Systemknotenpool zu isolieren. Diese Isolation verhindert, dass eine Anwendung instabilität mit dem Systemknotenpool Ihres Clusters verursacht. Benutzerknotenpools können Ubuntu Linux, Azure Linux oder Windows verwenden.

Ein Produktions-AKS-Cluster mit einem einzelnen Systemknotenpool muss mindestens zwei Knoten enthalten. Die Empfehlung für einen Produktions-AKS-Cluster mit einem einzelnen Systemknotenpool besteht darin, mindestens drei Knoten für eine verbesserte Fehlertoleranz und Verfügbarkeitszonen zu haben. Beispielsweise ist die Standardknotenanzahl des Azks create command drei und erstellt einen neuen Cluster mit einem einzelnen Linux-Systemknotenpool und drei Linux-Knoten.

Es ist möglich, aber nicht zu empfehlen, Anwendungspods in einem System-Node-Pool einzuplanen, wenn Sie in Ihrem AKS-Cluster nur über einen Node-Pool verfügen. Eine bessere Lösung besteht darin, einen Benutzerknotenpool für Ihre Anwendung zu erstellen.

Bevor Sie anfangen

Sie benötigen die Azure CLI Version 2.3.1 oder höher installiert und konfiguriert. Führen Sie den Befehl az --version aus, um die Version zu ermitteln. Informationen zum Installieren oder Aktualisieren finden Sie unter Install 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.
  • Eine API-Version von 2020-03-01 oder höher muss verwendet werden, um einen Knotenpoolmodus festzulegen. Cluster, die in API-Versionen erstellt wurden, die älter als 2020-03-01 sind, enthalten nur Benutzerknotenpools. Sie können jedoch migriert werden, um Systemknotenpools zu enthalten, indem Sie den Schritten zum Aktualisieren des Poolmodus folgen.
  • Der Name eines Knotenpools darf nur alphanumerische Zeichen in Kleinbuchstaben 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 bestehen.
  • 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 das Label 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 daran, Anwendungspods in Systemknotenpools einzuplanen. Es wird jedoch empfohlen, kritische System pods von Ihren Anwendungs pods zu isolieren, um zu verhindern, dass falsch konfigurierte oder nicht autorisierte Anwendungs-Pods versehentlich System pods gelöscht werden.

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.
  • Systempools osType müssen Linux sein.
  • Benutzerknotenpools osType können Linux oder Windows sein.
  • Systempools müssen mindestens zwei Knoten enthalten, die Empfehlung ist jedoch drei Knoten. Benutzerknotenpools können null oder mehr Knoten enthalten.
  • 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 anderen Systemknotenpool hinzufügen oder ändern, welcher Knotenpool ein Systemknotenpool ist, werden System-Pods 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 Sie einen dedizierten Systemknotenpool (bevorzugen Sie die 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 über mehrere Systemknotenpools verfügen und erfordert 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 besteht darin, einen neuen Knotenpool mit einer neuen maxPods Einstellung 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, es sei denn, der Parameter "Mode" wird explizit angegeben.

Erstellen Sie Variablen für die Ressourcengruppe, den Clusternamen und den Speicherort für Befehle, die in diesem Artikel verwendet werden. In diesem Artikel werden Werte angegeben, oder Sie können eigene Werte verwenden.

export RESOURCE_GROUP="myResourceGroup"
export CLUSTER_NAME="myAKSCluster"
export LOCATION="eastus"
export NEW_SYSTEM_NP="systempool"
export NEW_NODE_POOL="mynodepool"

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

az group create --name $RESOURCE_GROUP --location $LOCATION

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. Stellen Sie sicher, dass Sie für Ihre Produktionsworkloads Systemknotenpools mit mindestens drei Knoten verwenden. Dieser Vorgang dauert mehrere Minuten, bis er abgeschlossen ist.

az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 2 --generate-ssh-keys

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

Sie können einem vorhandenen AKS-Cluster einen oder mehrere Systemknotenpools hinzufügen. Es empfiehlt sich, Ihre Anwendungspods auf Benutzerknotenpools zu planen und Systemknotenpools nur kritischen Systempods zuzuordnen. Diese Trennung verhindert, dass nicht autorisierte Applikations-Pods versehentlich System-Pods löschen. Erzwingen Sie dieses Verhalten mit dem CriticalAddonsOnly=true:NoSchedule-Taint für Ihre Systemknotenpools.

Mit dem folgenden Befehl wird ein dedizierter Knotenpool des Modustyps System mit drei Knoten hinzugefügt. Der az aks nodepool add Befehl fügt standardmäßig drei Knoten hinzu, aber Sie verwenden den --node-count Parameter, um die Anzahl der gewünschten Knoten anzugeben.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --node-count 3 \
  --node-taints CriticalAddonsOnly=true:NoSchedule \
  --mode System

Details für Ihren Knotenpool anzeigen

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

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --query "{Count:count, Mode:mode, NodePool:name, NodeTaint:nodeTaints, ResourceGroup:resourceGroup}"

Für Systemknotenpools wurde ein Modus vom Typ system definiert, für Benutzerknotenpools ein Modus vom Typ user. Überprüfen Sie für einen Systempool, ob die Eigenschaft nodeTaints auf CriticalAddonsOnly=true:NoSchedule festgelegt ist, wodurch verhindert wird, dass Anwendungspods in diesem Knotenpool bereitgestellt werden.

{
  "Count": 3,
  "Mode": "System",
  "NodePool": "systempool",
  "NodeTaint": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "ResourceGroup": "myResourceGroup"
}

Aktualisieren von vorhandenen System- und Benutzerknotenpools in Clustern

Hinweis

Eine API-Version von 2020-03-01 oder höher muss zum Festlegen eines Systemknotenpoolmodus verwendet werden. Cluster, die in API-Versionen erstellt wurden, die älter sind als 2020-03-01, enthalten nur Benutzerknotenpools. Um Systemknotenpoolfunktionen und -vorteile für ältere Cluster zu erhalten, aktualisieren Sie den Modus vorhandener Knotenpools mit den folgenden Befehlen auf der neuesten Azure CLI-Version.

Sie können Modi für Systemknotenpools und Benutzerknotenpools ändern. Sie können einen Systemknotenpool nur dann in einen Benutzerknotenpool ändern, wenn bereits ein anderer Systemknotenpool im AKS-Cluster vorhanden ist.

Führen Sie diesen Befehl aus, um einen neuen Knotenpool für den Systemmodus zu erstellen.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --node-count 3 \
  --mode System

Sie können den Modus mit dem folgenden Befehl überprüfen.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
System

Führen Sie diesen Befehl aus, um einen Systemknotenpool in einen Benutzerknotenpool zu ändern.

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode User

Sie können den Geänderten Modus mit dem folgenden Befehl überprüfen.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
User

Führen Sie diesen Befehl aus, um einen Benutzerknotenpool in einen Systemknotenpool zu ändern.

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode System

Führen Sie den vorherigen Befehl aus, um zu überprüfen, ob der Modus geändert wurde.

Löschen eines Systemknotenpools

Hinweis

Um Systemknotenpools vor der API-Version 2020-03-01auf AKS-Clustern zu verwenden, fügen Sie einen neuen Systemknotenpool hinzu, und löschen Sie dann 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 \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL

Nachdem Sie den Systemknotenpool gelöscht haben, sollten Sie über den ursprünglichen Systemknotenpool verfügen, der mit dem Cluster erstellt wurde, und den im Abschnitt erstellten Systemknotenpool einen dedizierten Systemknotenpool zu einem vorhandenen AKS-Cluster hinzufügen.

az aks nodepool list \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --query "[].{Name:name, Mode:mode}" --output table

Bereinigen von Ressourcen

Wenn Sie die Ressourcengruppe des AKS-Clusters löschen, werden alle Clusterressourcen und die zugehörige Knotenressourcengruppe (MC_) gelöscht.

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 $RESOURCE_GROUP --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.