Diese Seite bietet eine Übersicht über Knotenmarkierungen in Google Kubernetes Engine (GKE). Wenn Sie Arbeitslasten planen, die in einem Cluster bereitgestellt werden sollen, können Sie mithilfe von Knotenmarkierungen steuern, auf welchen Knoten sie ausgeführt werden dürfen.
Übersicht
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.
Knotenmarkierungen sind Schlüssel/Wert-Paare, die einer Wirkung zugeordnet sind. Folgende Wirkungen sind verfügbar:
NoSchedule
: Pods, die diese Markierung nicht tolerieren, werden für den Knoten nicht geplant; auf dem Knoten vorhandene Pods werden nicht entfernt.PreferNoSchedule
: Kubernetes plant für den Knoten keine Pods, die diese Markierung nicht tolerieren.NoExecute
: Der Pod wird aus dem Knoten entfernt, wenn er bereits auf dem Knoten ausgeführt wird, oder wird nicht für den Knoten geplant, wenn er noch nicht auf dem Knoten ausgeführt wird.
Hinweis: Einige System-Pods (z. B. kube-proxy und fluentd) tolerieren alle NoExecute
- und NoSchedule
-Markierungen und werden nicht entfernt.
Vorbereitung
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Achten Sie darauf, dass die Google Kubernetes Engine API aktiviert ist. Aktivieren Sie Google Kubernetes Engine API
- Prüfen Sie, ob das Cloud SDK installiert ist.
Mit den folgenden Methoden können Sie die gcloud
-Einstellungen festlegen:
- Verwenden Sie
gcloud init
, wenn Sie die Standardeinstellungen ansehen möchten. - Verwenden Sie
gcloud config
, um Ihre Projekt-ID, Zone und Region individuell festzulegen.
gcloud init verwenden
Wenn Sie die Fehlermeldung One of [--zone, --region] must be supplied: Please specify
location
erhalten, führen Sie diesen Abschnitt aus.
-
Führen Sie
gcloud init
aus und folgen Sie der Anleitung:gcloud init
Wenn Sie SSH auf einem Remote-Server verwenden, können Sie mit dem Flag
--console-only
verhindern, dass mit dem Befehl ein Browserfenster geöffnet wird:gcloud init --console-only
- Folgen Sie der Anleitung, um
gcloud
zur Verwendung Ihres Google Cloud-Kontos zu autorisieren. - Erstellen Sie eine neue Konfiguration oder wählen Sie eine vorhandene aus.
- Wählen Sie ein Google Cloud-Projekt aus.
- Wählen Sie eine Compute Engine-Standardzone aus.
gcloud config verwenden
- Legen Sie Ihre standardmäßige Projekt-ID fest:
gcloud config set project project-id
- Wenn Sie mit zonalen Clustern arbeiten, legen Sie die Compute-Standardzone fest:
gcloud config set compute/zone compute-zone
- Wenn Sie mit regionalen Clustern arbeiten, legen Sie die Standardregion für Compute Engine fest:
gcloud config set compute/region compute-region
- Aktualisieren Sie
gcloud
auf die neueste Version:gcloud components update
Cluster mit Knotenmarkierungen erstellen
Wenn Sie einen Cluster erstellen, können Sie dem Cluster Knotenmarkierungen zuweisen. Dadurch werden die Markierungen allen Knoten zugewiesen, die mit dem Cluster erstellt wurden.
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 Clusters, der erstellt werden soll.
- effect ist
PreferNoSchedule
,NoSchedule
oderNoExecute
. - key und value bilden ein Schlüssel/Wert-Paar, das effect zugeordnet ist.
Mit dem folgenden Befehl wird beispielsweise eine Markierung mit dem Schlüssel dedicated
, dem Wert experimental
und 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 Cloud Console das Kubernetes Engine-Menü auf.
Klicken Sie auf Cluster erstellen.
Konfigurieren Sie den Cluster nach Bedarf.
Klicken Sie im Navigationsbereich unter dem Knotenpool, den Sie ändern möchten, auf Metadaten.
Klicken Sie im Abschnitt Knotenmarkierungen auf die Schaltfläche Markierung hinzufügen.
Wählen Sie in der Drop-down-Liste Effekt den gewünschten Effekt aus.
Geben Sie in die Felder Schlüssel und Wert das gewünschte Schlüssel/Wert-Paar ein.
Fügen Sie bei Bedarf weitere Knotenmarkierungen hinzu.
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 das gcloud
-Befehlszeilentool, die 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 ist der Name des zu erstellenden Knotenpools.
- cluster-name ist der Name des Clusters, in dem der Knotenpool erstellt wird.
- effect ist
PreferNoSchedule
,NoSchedule
oderNoExecute
. - key und value bilden ein Schlüssel/Wert-Paar, das effect zugeordnet ist.
Mit dem folgenden Befehl wird beispielsweise eine Markierung mit dem Schlüssel dedicated
, dem Wert experimental
und dem Effekt NoSchedule
angewendet:
gcloud container node-pools create example-pool --cluster example-cluster \
--node-taints dedicated=experimental:NoSchedule
Mit diesem Befehl wird eine Markierung angewendet, die den Schlüssel special
, den Wert gpu
und den 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 Cloud Console das Kubernetes Engine-Menü auf.
Klicken Sie auf die Schaltfläche "Bearbeiten" (Stiftsymbol) des Clusters.
Klicken Sie unter Knotenpools auf Knotenpool hinzufügen.
Klicken Sie im Abschnitt Knotenmarkierungen auf Markierung hinzufügen.
Wählen Sie dann unter Effekt den gewünschten Effekt aus.
Geben Sie in die Felder Schlüssel und Wert das gewünschte Schlüssel/Wert-Paar ein.
Fügen Sie bei Bedarf weitere Knotenmarkierungen hinzu.
Klicken Sie dann auf Speichern, um das Overlay zum Ändern von Knotenpools zu schließen.
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 so konfigurieren, dass sie eine Markierung tolerieren
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
Beispiel:
kubectl taint nodes node1 key=value:NoSchedule
Sie können Markierungen auch Knoten mit einem bestimmten Label hinzufügen:
kubectl taint node -l myLabel=X dedicated=foo:PreferNoSchedule
Weitere Informationen finden Sie in der Kubernetes-Dokumentation unter Markierungen und Toleranzen.
Markierungen eines Knotens prüfen
Sie können das kubectl
-Befehlszeilentool verwenden, um die Markierungen eines Knotens anzuzeigen.
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 zurückgegebenen Knotenbeschreibung nach dem Feld
Taints
:Taints: key=value:effect
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/Wirkung entfernen.
Mit dem folgenden Befehl werde beispielsweise alle Markierungen mit dem Schlüssel dedicated
aus dem Knoten foo
entfernt:
kubectl taint nodes foo dedicated-
Vorteile der GKE-Knotenmarkierungsfunktion
Die Verwendung der GKE-Knotenmarkierungen-Funktion mit Clustern und Knotenpools und das manuelle Festlegen von Markierungen mithilfe von kubectl
hat mehrere Vorteile:
- 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.
Weitere Informationen
- Weitere Informationen zu Knotenpools
- Kubernetes-Dokumentation zu Markierungen und Toleranzen lesen
- Dokumentation zu
kubectl taint
lesen