Planung mithilfe von Markierungen und Toleranzen steuern

Diese Seite bietet einen Überblick über Markierungen und Toleranzen in Google Distributed Cloud. 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.

Überblick

Wenn Sie eine Arbeitslast zur Ausführung in einem Cluster senden, bestimmt der scheduler, wo die mit der Arbeitslast verknüpften 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 des Festlegens von Knotenmarkierungen in Google Distributed Cloud

Sie können Knotenmarkierungen zwar mit dem Befehl kubectl taint festlegen, aber die Verwendung von gkectl oder der Google Cloud Console zum Festlegen einer Knotenmarkierung hat gegenüber kubectl die folgenden Vorteile:

  • Markierungen bleiben erhalten, wenn ein Knoten neu gestartet oder ersetzt wird.
  • Markierungen werden automatisch erstellt, wenn einem Knotenpool ein Knoten hinzugefügt wird.
  • Wenn Sie gkectl verwenden, um Markierungen hinzuzufügen, werden diese während des Cluster-Autoscalings automatisch erstellt. (Autoscaling für Knotenpools, die in der Google Cloud Console erstellt wurden, ist derzeit nicht verfügbar.)

Knotenmarkierungen festlegen

Sie können Knotenmarkierungen in einem Knotenpool entweder beim Erstellen eines Nutzerclusters oder nach dessen Erstellung festlegen. In diesem Abschnitt wird beschrieben, wie Sie bereits erstellten Clustern Markierungen hinzufügen. Der Vorgang beim Erstellen neuer Cluster ist jedoch ähnlich.

Sie können entweder einen neuen Knotenpool hinzufügen und eine Markierung setzen oder einen bestehenden Knotenpool aktualisieren und eine Markierung setzen. Prüfen Sie vor dem Hinzufügen eines weiteren Knotenpools, ob im Cluster genügend IP-Adressen verfügbar sind.

Wenn Sie den Cluster in der Google Cloud Console erstellt haben, können Sie mit der Google Cloud Console einen Knotenpool hinzufügen oder aktualisieren.

Markierungen in einem neuen Knotenpool festlegen

Console

  1. Rufen Sie in der Console die Übersichtsseite für Google Kubernetes Engine-Cluster auf.

    Zu GKE-Clustern

  2. Wählen Sie das Google Cloud-Projekt aus, in dem sich der Nutzercluster befindet.

  3. Klicken Sie in der Clusterliste auf den Namen des Clusters und dann im Bereich Details auf Details ansehen.

  4. Klicken Sie auf Knotenpool hinzufügen .

  5. Konfigurieren Sie den Knotenpool:

    1. Geben Sie den Namen des Knotenpools ein.
    2. Geben Sie die Anzahl der vCPUs für jeden Knoten im Pool (mindestens 4 pro Nutzercluster-Worker) ein.
    3. Geben Sie die Größe des Arbeitsspeichers in Mebibyte (MiB) für jeden Knoten im Pool ein (mindestens 8.192 MiB pro Nutzercluster-Worker-Knoten und muss ein Vielfaches von 4 sein).
    4. Geben Sie im Feld Replikate die Anzahl der Knoten im Pool ein (mindestens 3).
    5. Wählen Sie den Betriebssystem-Image-Typ aus: Ubuntu Containerd oder COS.

    6. Geben Sie die Größe des Bootlaufwerks in Gibibyte (GiB) ein (Standardeinstellung ist 40 GiB).

  6. Klicken Sie im Abschnitt Knotenpoolmetadaten (optional) auf + Markierung hinzufügen. Geben Sie Schlüssel, Wert und Effekt für die Markierung ein. Wiederholen Sie diesen Vorgang nach Bedarf.

  7. Klicken Sie optional auf + Kubernetes-Labels hinzufügen. Geben Sie den Schlüssel und den Wert für das Label ein. Wiederholen Sie diese Schritte für alle Suchabfragen, für die dies erforderlich ist.

  8. Klicken Sie auf Erstellen.

  9. In der Google Cloud Console wird Clusterstatus: Änderungen in Bearbeitung angezeigt. Klicken Sie auf Details ansehen, um die Ressourcenstatusbedingung und Statusmeldungen aufzurufen.

Befehlszeile

  1. Füllen Sie in der Konfigurationsdatei für den Nutzercluster den Abschnitt nodePools aus.

    Geben Sie die folgenden Felder an:

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    Die folgenden Felder sind optional. Wenn Sie weder nodePools[i].bootDiskSizeGB noch nodePools[i].osImageType angeben, werden die Standardwerte verwendet.

  2. Füllen Sie den Abschnitt nodePools[i].taints aus. Beispiel:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. Füllen Sie optional die folgenden Abschnitte aus:

    • nodePools[i].labels
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  4. Führen Sie dazu diesen Befehl aus:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Ersetzen Sie Folgendes:

    • [ADMIN_CLUSTER_KUBECONFIG] ist der Pfad der kubeconfig-Datei für Ihren Administratorcluster.

    • [USER_CLUSTER_CONFIG] ist der Pfad Ihrer Nutzercluster-Konfigurationsdatei.

Markierungen in einem vorhandenen Knotenpool festlegen

Console

  1. Rufen Sie in der Console die Übersichtsseite für Google Kubernetes Engine-Cluster auf.

    Zu GKE-Clustern

  2. Wählen Sie das Google Cloud-Projekt aus, in dem sich der Nutzercluster befindet.

  3. Klicken Sie in der Clusterliste auf den Namen des Clusters und dann im Bereich Details auf Details ansehen.

  4. Klicken Sie auf den Tab Knoten.

  5. Klicken Sie auf den Namen des Knotenpools, den Sie ändern möchten.

  6. Klicken Sie neben dem Abschnitt Knotenpoolmetadaten (optional) auf Bearbeiten und dann auf + Markierung hinzufügen. Geben Sie Schlüssel, Wert und Effekt für die Markierung ein. Wiederholen Sie diesen Vorgang nach Bedarf.

  7. Klicken Sie auf Fertig.

  8. Klicken Sie auf , um zur vorherigen Seite zurückzukehren.

  9. In der Google Cloud Console wird Clusterstatus: Änderungen in Bearbeitung angezeigt. Klicken Sie auf Details ansehen, um die Ressourcenstatusbedingung und Statusmeldungen aufzurufen.

Befehlszeile

  1. Wechseln Sie in der Konfigurationsdatei des Nutzerclusters zum Abschnitt nodePools des Knotenpools, den Sie aktualisieren möchten.

  2. Füllen Sie nodePools[i].taints aus. Beispiel:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. Führen Sie dazu diesen Befehl aus:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Ersetzen Sie Folgendes:

    • [ADMIN_CLUSTER_KUBECONFIG] ist der Pfad der kubeconfig-Datei für Ihren Administratorcluster.

    • [USER_CLUSTER_CONFIG] ist der Pfad Ihrer Nutzercluster-Konfigurationsdatei.

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. Im folgenden Beispiel kann der Pod auf einem Knoten mit der Markierung dedicated=experimental:NoSchedule geplant werden:

tolerations:
- key: dedicated
  operator: Equal
  value: experimental
  effect: NoSchedule

Weitere Beispiele finden Sie unter Markierungen und Toleranzen.