Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird das Verwenden von Knoten-Taints in einem AKS-Cluster (Azure Kubernetes Service) beschrieben.
Übersicht
Der AKS-Planungsmechanismus ist für das Platzieren von Pods auf Knoten verantwortlich und basiert auf dem Upstream-Kubernetes-Planer, kube-scheduler. Sie können die Ausführung eines Pods auf bestimmte Knoten beschränken, indem Sie die Pods mit Knotenaffinität anfügen oder den Knoten anweisen, eine Gruppe von Pods mithilfe Knoten-Taints abzuwehren, die mit dem AKS-Planer interagieren.
Knoten-Taints funktionieren, indem ein Knoten markiert wird, sodass der Planer verhindert, bestimmte Pods auf den markierten Knoten zu platzieren. Sie können Toleranzen auf einem Pod platzieren, damit der Planer diesen Pod auf einem Knoten mit einem passenden Taint planen kann. Taints und Tolerationen arbeiten zusammen, um zu steuern, wie der Planer Pods auf Knoten platziert. Weitere Informationen finden Sie unter Beispielanwendungsfälle von Taints und Toleranzen.
Taints sind Schlüssel-Wert-Paare mit einem Effekt. Bei Verwendung von Knoten-Taints gibt es drei Werte für das Effektfeld: NoExecute
, NoSchedule
und PreferNoSchedule
.
NoExecute
: Pods, die bereits auf dem Knoten ausgeführt werden, werden sofort entfernt, wenn sie keine übereinstimmende Toleranz haben. Wenn ein Pod über eine übereinstimmende Toleranz verfügt, kann er bei Angabe vontolerationSeconds
entfernt werden.NoSchedule
: Nur Pods mit einer übereinstimmenden Toleranz werden auf diesem Knoten platziert. Vorhandene Pods werden nicht entfernt.PreferNoSchedule
: Der Planer vermeidet das Platzieren von Pods, die keine übereinstimmende Toleranz aufweisen.
Knoten-Taint-Optionen
Es gibt zwei Typen von Knoten-Taints, die auf Ihre AKS-Knoten angewendet werden können: Knoten-Taints und Knoteninitialisierungs-Taints.
- Knoten-Taints sollen dauerhaft auf dem Knoten bleiben, um Pods mit Knotenaffinität zu planen. Knoten-Taints können nur vollständig mithilfe der AKS-API hinzugefügt, aktualisiert oder entfernt werden.
- Knoteninitialisierungs-Taints werden zur Startzeit auf dem Knoten platziert und sollten vorübergehend verwendet werden, z. B. in Szenarien, in denen Sie möglicherweise zusätzliche Zeit benötigen, um Ihre Knoten einzurichten. Sie können die Knoteninitialisierungs-Taints mithilfe der Kubernetes-API entfernen und haben während des Knotenlebenszyklus keine Garantie. Sie werden erst angezeigt, nachdem für einen Knoten eine Skalierung, ein Ugrade oder ein Reimaging durchgeführt wurde. Neue Knoten verfügen nach der Skalierung weiterhin über das Knoteninitialisierungs-Taint. Die Knoteninitialisierungs-Taints werden nach dem Upgrade auf allen Knoten angezeigt. Wenn Sie die Initialisierungs-Taints vollständig entfernen möchten, können Sie sie mithilfe der AKS-API entfernen, nachdem sie die Knoten mithilfe der Kubernetes-API entfernt haben. Nachdem Sie die Initialisierungselemente mithilfe der AKS-API aus der Clusterspezifikation entfernt haben, werden neu erstellte Knoten nicht mehr mit diesen Initialisierungs-Taints erstellt. Wenn das Initialisierungs-Taint noch auf vorhandenen Knoten vorhanden ist, können Sie es dauerhaft entfernen, indem Sie das Knotenimage upgraden.
Hinweis
Knoten-Taints und Bezeichnungen, die mit der AKS-Knotenpool-API angewendet werden, können nicht mit der Kubernetes-API geändert werden und umgekehrt. Änderungen an System-Taints sind nicht zulässig.
Dies gilt nicht für Knoteninitialisierungs-Taints.
Verwenden von Knoten-Taints
Voraussetzungen
In diesem Artikel wird vorausgesetzt, dass Sie über einen AKS-Cluster verfügen. Wenn Sie einen AKS-Cluster benötigen, können Sie ihn mithilfe der Azure-Befehlszeilenschnittstelle, mit Azure PowerShell oder über das Azure-Portal erstellen.
Erstellen eines Knotenpools mit einem Knoten-Taint
Erstellen Sie einen Knotenpool mit einem Taint mithilfe des Befehls
az aks nodepool add
, und verwenden Sie den--node-taints
-Parameter, umsku=gpu:NoSchedule
für den Taint anzugeben.az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 1 \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Aktualisieren eines Knotenpools, um ein Knoten-Taint hinzuzufügen
Aktualisieren Sie einen Knotenpool, um ein Knoten-Taint mithilfe des Befehls
az aks nodepool update
hinzuzufügen, und verwenden Sie den--node-taints
-Parameter, umsku=gpu:NoSchedule
für das Taint anzugeben.az aks nodepool update \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Verwenden von Knoteninitialisierungs-Taints (Vorschau)
Wichtig
AKS-Previewfunktionen sind auf Self-Service- und Abonnementbasis verfügbar. Vorschauversionen werden „wie besehen“ und „wie verfügbar“ bereitgestellt und sind von den Vereinbarungen zum Service Level und der eingeschränkten Garantie ausgeschlossen. AKS-Vorschauversionen werden teilweise vom Kundendienst nach bestem Wissen und Gewissen abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in Produktionsumgebungen vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:
Voraussetzungen und Einschränkungen
- Azure CLI-Version
3.0.0b3
oder höher muss installiert und konfiguriert sein. Führen Sieaz --version
aus, um die Version zu ermitteln. Weitere Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure-Befehlszeilenschnittstelle. - Sie können Initialisierungs-Taints nur mithilfe der AKS-API anwenden, wenn Sie Cluster erstellen oder aktualisieren. Wenn Sie eine ARM-Vorlage verwenden, die zu einem Vorgang auf der Ebene eines verwalteten Clusters führt, können Sie während der Erstellung und Aktualisierung des Knotenpools die Knoteninitialisierungs-Taints angeben. Vorgänge auf der Agentpool-Ebene werden blockiert, wenn
NodeInitializationTaints
im Anforderungskörper vorhanden sind. - Initialisierungs-Taints können nicht mithilfe der Azure-Befehlszeilenschnittstelle auf Windows-Knotenpools angewendet werden.
Abrufen der Anmeldeinformationen für Ihren Cluster
Rufen Sie die Anmeldeinformationen für den AKS-Cluster mit dem Befehl
az aks get-credentials
ab.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Installieren der Azure CLI-Erweiterung aks-preview
Registrieren oder aktualisieren Sie die Erweiterung „aks-preview“ mithilfe des Befehls
az extension add
oderaz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Registrieren des Featureflags NodeInitializationTaintsPreview
Registrieren Sie das Featureflag
NodeInitializationTaintsPreview
mithilfe des Befehlsaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Es dauert einige Minuten, bis als Status Registriert angezeigt wird.
Überprüfen Sie den Registrierungsstatus mithilfe des Befehls
az feature show
.az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Wenn der Status Registriert lautet, aktualisieren Sie die Registrierung des Ressourcenanbieters Microsoft.ContainerService mithilfe des Befehls
az provider register
.az provider register --namespace Microsoft.ContainerService
Erstellen eines Clusters mit einem Knoteninitialisierungs-Taint
Erstellen Sie einen Cluster mit einem Knoteninitialisierungs-Taint mithilfe des Befehls
az aks create
, und verwenden Sie den--node-initialization-taints
-Parameter, umsku=gpu:NoSchedule
für das Taint anzugeben.Wichtig
Die angegebenen Knoteninitialisierungs-Taints werden auf alle Knotenpools im Cluster angewendet. Um das Initialisierungs-Taint auf einen bestimmten Knoten anzuwenden, können Sie anstelle der Befehlszeilenschnittstelle eine ARM-Vorlage verwenden.
az aks create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-count 1 \ --node-init-taints "sku=gpu:NoSchedule" \ --generate-ssh-keys
Aktualisieren eines Clusters, um ein Knoteninitialisierungs-Taint hinzuzufügen
Aktualisieren Sie einen Cluster, um ein Knoteninitialisierungs-Taint mithilfe des Befehls
az aks update
hinzuzufügen, und verwenden Sie den--node-initialization-taints
-Parameter, umsku=gpu:NoSchedule
für das Taint anzugeben.Wichtig
Beim Aktualisieren eines Clusters mit einem Knoteninitialisierungs-Taint gelten die Taints für alle Knotenpools im Cluster. Sie können Aktualisierungen der Knoteninitialisierungs-Taints auf dem Knoten nach einem Reimaging anzeigen.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"
Überprüfen des Status des Knotenpools
Überprüfen Sie nach dem Anwenden des Knoten-Taints oder Initialisierungs-Taints den Status des Knotenpools mithilfe des Befehls
az aks nodepool list
.az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
Falls Sie Knoten-Taints angewendet haben, zeigt die folgende Beispielausgabe, dass der Knotenpool
<node-pool-name>
Knoten mit den angegebenennodeTaints
Creating
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Falls Sie Knoten-Taints angewendet haben, zeigt die folgende Beispielausgabe, dass der Knotenpool
<node-pool-name>
Knoten mit den angegebenennodeInitializationTaints
Creating
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeInitializationTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Überprüfen Sie, ob das Taint auf den Knoten festgelegt ist
Überprüfen Sie die Knoten-Taints und Initialisierungs-Taints der Knoteninitialisierung in der Knotenkonfiguration mithilfe des Befehls
kubectl describe node
.kubectl describe node $NODE_NAME
Falls Sie Knoten-Taints angewendet haben, zeigt die folgende Beispielausgabe, dass der Knotenpool
<node-pool-name>
die festgelegtenTaints
aufweist:[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Entfernen von Knoten-Taints
Entfernen eines bestimmten Knoten-Taints
Entfernen Sie Knoten-Taints mithilfe des Befehls
az aks nodepool update
. Mit dem folgenden Beispielbefehl wird der"sku=gpu:NoSchedule"
-Knoten-Taint aus dem Knotenpool entfernt.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-taints "sku=gpu:NoSchedule"
Entfernen aller Knoten-Taints
Entfernen Sie alle Knoten-Taints aus einem Knotenpool mithilfe des Befehls
az aks nodepool update
. Mit dem folgenden Beispielbefehl werden alle Knoten-Taints aus dem Knotenpool entfernt.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --name $NODE_POOL_NAME \ --node-taints ""
Entfernen von Knoteninitialisierungs-Taints
Sie haben die folgenden Optionen, um Knoteninitialisierungs-Taints aus dem Knoten zu entfernen:
- Vorübergehendes Entfernen von Knoteninitialisierungs-Taints mithilfe der Kubernetes-API. Wenn Sie sie auf diese Weise entfernen, werden die Taints nach einer Knotenskalierung oder einem Upgrade wieder angezeigt. Neue Knoten verfügen nach der Skalierung weiterhin über das Knoteninitialisierungs-Taint. Die Knoteninitialisierungs-Taints werden nach dem Upgrade auf allen Knoten angezeigt.
- Entfernen Sie die Knoteninitialisierung dauerhaft, indem Sie den Knoten mithilfe der Kubernetes-API aufheben und dann das Taint mithilfe der AKS-API entfernen. Nachdem die Initialisierungs-Taints mithilfe der AKS-API aus der Clusterspezifikation entfernt wurden, haben neu erstellte Knoten nach Reimagingvorgängen keine Initialisierungs-Taints mehr.
Wenn Sie alle Initialisierungs-Taints aus Knotenpoolreplikaten entfernen, wird der vorhandene Initialisierungs-Taint möglicherweise nach einem Upgrade mit allen neuen Initialisierungs-Taints wieder angezeigt.
Vorübergehendes Entfernen von Knoteninitialisierungs-Taints
Entfernen Sie Knoteninitialisierungs-Taints vorübergehend mithilfe des
kubectl taint nodes
-Befehls.Mit diesem Befehl wird das Taint nur vom angegebenen Knoten entfernt. Wenn Sie das Taint aus jedem Knoten im Knotenpool entfernen möchten, müssen Sie den Befehl für jeden Knoten ausführen, aus dem das Taint entfernt werden soll.
kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
Nach dem Entfernen werden die Knoteninitialisierungs-Taints wieder angezeigt, nachdem die Knotenskalierung oder das Upgrade erfolgt.
Dauerhaftes Entfernen von Knoteninitialisierungs-Taints
Führen Sie die Schritte in Vorübergehendes Entfernen von Knoteninitialisierungs-Taints aus, um das Knoteninitialisierungs-Taint mithilfe der Kubernetes-API zu entfernen.
Entfernen Sie das Taint aus dem Knoten mithilfe der AKS-API und des Befehls
az aks update
. Mit diesem Befehl wird das Knoteninitialisierungs-Taint von jedem Knoten im Cluster entfernt.az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints ""
Überprüfen, ob das Taint auf den Knoten festgelegt ist
Überprüfen Sie die Knoten-Taints und Initialisierungs-Taints der Knoteninitialisierung in der Knotenkonfiguration mithilfe des Befehls
kubectl describe node
.kubectl describe node $NODE_NAME
Wenn Sie ein Knoten-Taint entfernt haben, zeigt die folgende Beispielausgabe, dass der Knotenpool
<node-pool-name>
das entfernte Taint unterTaints
nicht enthält:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Nächste Schritte
- Weitere Informationen finden Sie in den Beispielanwendungsfällen für Taints und Toleranzen.
- Weitere Informationen finden Sie unter Best Practices für erweiterte AKS-Scheduler-Features.
- Weitere Informationen zu Kubernetes-Bezeichnungen finden Sie in der Dokumentation zu Kubernetes-Bezeichnungen.
Azure Kubernetes Service