Diese Seite bietet eine Übersicht über Knotenmarkierungen in Google Kubernetes Engine (GKE). Mit Knotenmarkierungen können Sie die Knoten angeben, auf denen Arbeitslasten ausgeführt werden sollen.
Autopilot-Cluster unterstützen nur die Verwendung von Knotenmarkierungen für die Arbeitslasttrennung. Eine Anleitung finden Sie unter Arbeitslasttrennung in GKE konfigurieren.
Überblick
Wenn Sie eine Arbeitslast zur Ausführung in einem Cluster einreichen, bestimmt der Planer, wo die der Arbeitslast zugeordneten Pods platziert werden. Der Planer kann einen Pod auf einem beliebigen Knoten platzieren, der die CPU-, Arbeitsspeicher- und angepassten Ressourcenanforderungen des Pods erfüllt.
Wenn der Cluster verschiedene Arbeitslasten ausführt, möchten Sie möglicherweise steuern, welche Arbeitslasten in einem bestimmten Knotenpool ausgeführt werden können.
Mit einer Knotenmarkierung können Sie einen Knoten markieren. Dies bewirkt, dass der Planer den Knoten für bestimmte Pods nicht verwendet. Ein ergänzendes Feature, Toleranzen, ermöglicht die Festlegung von Pods, die mit "markierten" Knoten verwendet werden können.
Markierungen und Toleranzen arbeiten zusammen, um sicherzustellen, dass Pods nicht auf geeigneten Knoten geplant werden.
Knotenmarkierungen sind Schlüssel/Wert-Paare, die einem Effekt zugeordnet sind. In der folgenden Tabelle sind die verfügbaren Effekte aufgeführt:
Effekt | Beschreibung |
---|---|
NoSchedule |
Pods, die diese Markierung nicht tolerieren, werden nicht auf dem Knoten geplant. Vorhandene Pods werden nicht vom Knoten entfernt. |
PreferNoSchedule |
Kubernetes plant keine Pods, die diese Markierung auf Knoten nicht tolerieren. |
NoExecute |
Der Pod wird aus dem Knoten entfernt, wenn er bereits auf dem Knoten ausgeführt wird, und er wird nicht für den Knoten geplant, wenn er noch nicht auf dem Knoten ausgeführt wird. |
Vorteile von Knotenmarkierungen in GKE
Sie können Knotenmarkierungen in GKE oder mit dem Befehl kubectl taint
hinzufügen. Das Festlegen von Knotenmarkierungen in GKE bietet mehrere Vorteile gegenüber kubectl
:
- Markierungen bleiben erhalten, wenn ein Knoten neu gestartet oder ersetzt wird.
- Markierungen werden automatisch erstellt, wenn ein Knoten zu einem Pool oder Cluster hinzugefügt wird.
- Markierungen werden während dem Cluster-Autoscaling automatisch erstellt.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
Cluster mit Knotenmarkierungen erstellen
Wenn Sie einen Cluster in GKE erstellen, können Sie dem Cluster Knotenmarkierungen zuweisen. Dadurch werden die Markierungen allen Knoten zugewiesen, die mit dem Cluster erstellt wurden.
Wenn Sie einen Standardcluster mit Knotenmarkierungen erstellen, die den Effekt NoSchedule
oder den Effekt NoExecute
haben, kann GKE keine von GKE verwalteten Komponenten wie kube-dns
oder metrics-server
im Standardknotenpool planen, den GKE beim Erstellen des Clusters erstellt. GKE kann diese Komponenten nicht planen, da sie nicht die entsprechenden Toleranzen für Ihre Knotenmarkierungen haben.
Sie müssen einen neuen Knotenpool hinzufügen, der eine der folgenden Bedingungen erfüllt:
- Keine Markierungen
- Eine Markierung mit dem Effekt
PreferNoSchedule
- Die
components.gke.io/gke-managed-components=true:NoSchedule
-Markierung
Mit jeder dieser Bedingungen kann GKE von GKE verwaltete Komponenten im neuen Knotenpool planen.
Eine Anleitung finden Sie unter Arbeitslasten auf dedizierten Knoten isolieren.
gcloud
Führen Sie den folgenden Befehl aus, um einen Cluster mit Knotenmarkierungen zu erstellen:
gcloud container clusters create CLUSTER_NAME \
--node-taints KEY=VALUE:EFFECT
Dabei gilt:
CLUSTER_NAME
ist der Name des neuen Clusters.EFFECT
: Einer der folgenden Effektwerte:PreferNoSchedule
,NoSchedule
oderNoExecute
.KEY=VALUE
ist ein Schlüssel/Wert-Paar, dasEFFECT
zugeordnet ist.
Mit dem folgenden Befehl wird beispielsweise eine Markierung mit dem Schlüsselwert dedicated=experimental
mit dem Effekt PreferNoSchedule
angewendet:
gcloud container clusters create example-cluster \
--node-taints dedicated=experimental:PreferNoSchedule
Console
So erstellen Sie einen Cluster mit Knotenmarkierungen:
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie auf add_box Erstellen.
Konfigurieren Sie den Cluster wie gewünscht.
Maximieren Sie im Navigationsbereich unter Knotenpools den Knotenpool, den Sie ändern möchten, und klicken Sie dann auf Metadaten.
Klicken Sie im Abschnitt Knotenmarkierungen auf add Markierung hinzufügen.
Wählen Sie in der Drop-down-Liste Effekt den gewünschten Effekt aus.
Geben Sie das gewünschte Schlüssel/Wert-Paar in die Felder Schlüssel und Wert ein.
Klicken Sie auf Erstellen.
API
Wenn Sie die API verwenden, um einen Cluster zu erstellen, schließen Sie das Feld nodeTaints
unter nodeConfig
ein. Beispiel:
POST https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters
{
'cluster': {
'name': 'example-cluster',
'nodeConfig': {
'nodeTaints': [
{
'key': 'special',
'Value': 'gpu',
'effect': 'PreferNoSchedule'
}
]
...
}
...
}
}
Knotenpool mit Knotenmarkierungen erstellen
Wenn Sie eine Markierung auf einen Knoten anwenden, dürfen nur Pods, die die Markierung tolerieren, auf dem Knoten ausgeführt werden. In einem GKE-Cluster können Sie eine Markierung auf einen Knotenpool anwenden. Dadurch wird die Markierung auf alle Knoten im Pool angewendet.
Zum Erstellen eines Knotenpools mit Knotenmarkierungen können Sie die Google Cloud CLI, die Google Cloud Console oder die GKE API verwenden.
gcloud
Führen Sie den folgenden Befehl aus, um einen Knotenpool mit Knotenmarkierungen zu erstellen:
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--node-taints KEY=VALUE:EFFECT
Dabei gilt:
POOL_NAME
: Der Name des Knotenpools, der erstellt werden soll.CLUSTER_NAME
: Der Name des Clusters, in dem der Knotenpool erstellt wird.EFFECT
: Einer der folgenden Effektwerte:PreferNoSchedule
,NoSchedule
oderNoExecute
.KEY=VALUE
ist ein Schlüssel/Wert-Paar, dasEFFECT
zugeordnet ist.
Mit dem folgenden Befehl wird beispielsweise ein Knotenpool auf einem vorhandenen Cluster erstellt und eine Markierung mit dem Schlüsselwert dedicated=experimental
mit dem Effekt NoSchedule
angewendet:
gcloud container node-pools create example-pool --cluster example-cluster \
--node-taints dedicated=experimental:NoSchedule
Dieser Befehl erstellt einen Knotenpool und wendet eine Markierung an, die das Schlüssel/Wert-Paar special=gpu
mit dem Effekt NoExecute
hat:
gcloud container node-pools create example-pool-2 --cluster example-cluster \
--node-taints special=gpu:NoExecute
Console
Führen Sie die folgenden Schritte aus, um einen Knotenpool mit Knotenmarkierungen zu erstellen:
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie auf der Seite Cluster-Details auf add_box Knotenpool hinzufügen.
Klicken Sie im Navigationsbereich auf Metadaten.
Klicken Sie unter Knotenmarkierungen auf add Markierung hinzufügen.
Wählen Sie in der Drop-down-Liste Effekt den gewünschten Effekt aus.
Geben Sie das gewünschte Schlüssel/Wert-Paar in die Felder Schlüssel und Wert ein.
Klicken Sie auf Erstellen.
API
Wenn Sie die API verwenden, um einen Knotenpool zu erstellen, schließen Sie das Feld nodeTaints
unter nodeConfig
ein. Beispiel:
POST https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/CLUSTER_ID/nodePools
{
'nodePool': {
'name': 'example-pool',
'nodeConfig': {
'nodeTaints': [
{
'key': 'dedicated',
'Value': 'experimental',
'effect': 'NoSchedule'
}
]
...
}
...
}
}
Pods für Tolerieren einer Markierung konfigurieren
Sie können festlegen, dass Pods Markierungen tolerieren, indem Sie das Feld tolerations
in die Pod-Spezifikation aufnehmen. Dies ist ein Teil einer Pod-Spezifikation.
Dieser Pod kann auf einem Knoten geplant werden, der die Markierung dedicated=experimental:NoSchedule
hat:
tolerations:
- key: dedicated
operator: Equal
value: experimental
effect: NoSchedule
Markierung zu einem vorhandenen Knoten hinzufügen
Mit dem Befehl kubectl taint
können Sie einem vorhandenen Knoten Markierungen hinzufügen:
kubectl taint nodes NODE_NAME KEY=VALUE:EFFECT
Mit dem folgenden Befehl wird beispielsweise eine Markierung mit dem Schlüsselwert dedicated=experimental
und dem Effekt NoSchedule
auf den Knoten mynode
angewendet:
kubectl taint nodes mynode dedicated=experimental:NoSchedule
Sie können Markierungen auch Knoten hinzufügen, die ein bestimmtes Label haben. Dazu verwenden Sie den Selektor -l
zusammen mit dem angegebenen Label und Wert:
kubectl taint nodes -l LABEL=LABEL_VALUE KEY=VALUE:EFFECT
Mit dem folgenden Befehl wird beispielsweise eine Markierung mit dem Schlüssel dedicated-pool
zu GKE-Knoten im Knotenpool my_pool
hinzugefügt:
kubectl taint nodes -l cloud.google.com/gke-nodepool=my_pool dedicated-pool=my_pool:NoSchedule
Markierungen für einen Knoten prüfen
Verwenden Sie das kubectl
-Befehlszeilentool, um die Markierungen für einen Knoten abzurufen.
Rufen Sie mit dem folgenden Befehl eine Liste aller Knoten in Ihrem Cluster ab:
kubectl get nodes
Zum Prüfen eines Knotens können Sie den folgenden Befehl verwenden:
kubectl describe node NODE_NAME
Suchen Sie in der Ausgabe nach dem Feld
Taints
. Die Ausgabe sieht etwa so aus:Taints: dedicated-pool=mypool:NoSchedule
Markierung von einem Knoten entfernen
Sie können kubectl taint
verwenden, um Markierungen zu entfernen. Sie können Markierungen nach Schlüssel, Schlüssel/Wert-Paar oder Schlüssel/Effekt entfernen.
Mit dem folgenden Befehl werden beispielsweise alle Markierungen mit dem Schlüssel dedicated
aus dem Knoten mynode
entfernt:
kubectl taint nodes mynode dedicated-
Alle Markierungen aus einem Knotenpool entfernen
Führen Sie den folgenden Befehl aus, um alle Markierungen aus einem Knotenpool zu entfernen:
gcloud beta container node-pools update POOL_NAME \
--node-taints="" \
--cluster=CLUSTER_NAME
Dabei gilt:
POOL_NAME
: der Name des zu ändernden Knotenpools.CLUSTER_NAME
: der Name des Clusters, in dem der Knotenpool erstellt wurde.
Nächste Schritte
- Weitere Informationen zu Knotenpools
- Kubernetes-Dokumentation zu Markierungen und Toleranzen lesen
- Dokumentation zu
kubectl taint
lesen