Planung mit Knotenmarkierungen steuern


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.

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:

  • Achten Sie darauf, dass die Google Kubernetes Engine API aktiviert ist.
  • Google Kubernetes Engine API aktivieren
  • Prüfen Sie, ob das Cloud SDK installiert ist.
  • Mit den folgenden Methoden können Sie die Standardeinstellungen für das gcloud-Befehlszeilentool für Ihr Projekt einrichten:
    • Verwenden Sie gcloud init, wenn Sie die erforderlichen Standardeinstellungen für Projekte festlegen möchten.
    • Verwenden Sie gcloud config, um Ihre Projekt-ID, Zone und Region individuell festzulegen.

    gcloud init

    1. 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
    2. Folgen Sie der Anleitung, um das gcloud-Tool zur Verwendung Ihres Google Cloud-Kontos zu autorisieren.
    3. Erstellen Sie eine neue Konfiguration oder wählen Sie eine vorhandene aus.
    4. Wählen Sie ein Google Cloud-Projekt aus.
    5. Wählen Sie eine Compute Engine-Standardzone aus.
    6. Wählen Sie eine Compute Engine-Standardregion aus.

    gcloud config

    1. Legen Sie Ihre standardmäßige Projekt-ID fest:
      gcloud config set project PROJECT_ID
    2. Legen Sie Ihre standardmäßige Compute Engine-Region fest (z. B. us-central1):
      gcloud config set compute/region COMPUTE_REGION
    3. Legen Sie Ihre standardmäßige Compute Engine-Zone fest (z. B. us-central1-c):
      gcloud config set compute/zone COMPUTE_ZONE
    4. Aktualisieren Sie gcloud auf die neueste Version:
      gcloud components update

    Durch Festlegen von Standardspeicherorten können Sie Fehler im gcloud-Tool wie die folgenden vermeiden: One of [--zone, --region] must be supplied: Please specify location.

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.

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 oder NoExecute.
  • KEY=VALUE ist ein Schlüssel/Wert-Paar, das EFFECT 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:

  1. Rufen Sie in der Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie auf Erstellen.

  3. Konfigurieren Sie den Cluster wie gewünscht.

  4. Maximieren Sie im Navigationsbereich unter Knotenpools den Knotenpool, den Sie ändern möchten, und klicken Sie dann auf Metadaten.

  5. Klicken Sie im Abschnitt Knotenmarkierungen auf Markierung hinzufügen.

  6. Wählen Sie in der Drop-down-Liste Effekt den gewünschten Effekt aus.

  7. Geben Sie das gewünschte Schlüssel/Wert-Paar in die Felder Schlüssel und Wert ein.

  8. 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: 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 oder NoExecute.
  • KEY=VALUE ist ein Schlüssel/Wert-Paar, das EFFECT 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:

  1. Rufen Sie in der Cloud Console die Seite Google Kubernetes Engine auf:

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.

  3. Klicken Sie auf der Seite Cluster-Details auf Knotenpool hinzufügen.

  4. Klicken Sie im Navigationsbereich auf Metadaten.

  5. Klicken Sie unter Knotenmarkierungen auf Markierung hinzufügen.

  6. Wählen Sie in der Drop-down-Liste Effekt den gewünschten Effekt aus.

  7. Geben Sie das gewünschte Schlüssel/Wert-Paar in die Felder Schlüssel und Wert ein.

  8. 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.

  1. Rufen Sie mit dem folgenden Befehl eine Liste aller Knoten in Ihrem Cluster ab:

    kubectl get nodes
    
  2. Zum Prüfen eines Knotens können Sie den folgenden Befehl verwenden:

    kubectl describe node NODE_NAME
    
  3. 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-

Nächste Schritte