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.

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:

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.

  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 gcloud 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 für zonale Cluster oder eine Region für regionale oder Autopilot-Cluster 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 Standardzone für Compute Engine fest:
    gcloud config set compute/zone COMPUTE_ZONE
  • Wenn Sie mit Autopilot oder regionalen Clustern arbeiten, legen Sie die Compute-Standardregion 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 oder NoExecute.
  • 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:

  1. Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.

    Zum Google Kubernetes Engine-Menü

  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 ist der Name des zu erstellenden Knotenpools.
  • cluster-name ist der Name des Clusters, in dem der Knotenpool erstellt wird.
  • effect ist PreferNoSchedule, NoSchedule oder NoExecute.
  • 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:

  1. Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.

    Zum Google Kubernetes Engine-Menü

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

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