Knotenpools erstellen und verwalten

Ab der GKE On-Prem-Version 1.3 können Sie eine Gruppe von Knoten in Ihrem Nutzercluster mit derselben Konfiguration erstellen. Dazu definieren Sie einen Knotenpool in der Konfigurationsdatei dieses Clusters. Sie können diesen Knotenpool dann separat verwalten, ohne dass sich dies auf andere Knoten im Cluster auswirkt. Knotenpools

In der Konfigurationsdatei eines Nutzerclusters kann ein oder mehrere Knotenpools definiert werden. Beim Erstellen eines Knotenpools werden zusätzliche Knoten im Nutzercluster erstellt. Die Verwaltung von Knotenpools, einschließlich das Erstellen, Aktualisieren und Löschen von Knotenpools in einem Nutzercluster, erfolgt durch die Änderung des Abschnitts nodePools in Ihrer Konfigurationsdatei und die Bereitstellung dieser Änderungen in Ihrem bestehenden Cluster mit dem Befehl gkectl update cluster. Beachten Sie, dass das Löschen von Knotenpools dazu führt, dass die zugehörigen Knoten sofort entfernt werden, unabhängig davon, ob auf einem dieser Knoten eine Arbeitslast ausgeführt wird.

Beispiel für einen Knotenpool:

nodePools:
  - name: pool-1
    cpus: 4
    memoryMB: 8192
    replicas: 5

Tipp für Neuinstallationen: Erstellen Sie Ihren ersten Nutzercluster und definieren Sie Ihre Knotenpools in diesem Cluster. Erstellen Sie dann mithilfe der Konfigurationsdatei dieses Clusters weitere Nutzercluster mit denselben Knotenpooleinstellungen.

Hinweis

  • Unterstützung:

    • Es werden nur Nutzercluster der Version 1.3.0 oder höher unterstützt.

    • Knotenpools in Administratorclustern werden nicht unterstützt.

    • Der Befehl gkectl update unterstützt vollständige Unterstützung für die Aktualisierung von Knotenpools und das Hinzufügen von statischen IP-Adressen. Außerdem wird das Cloud-Audit-Logging unterstützt und die automatische Reparatur aktiviert bzw. deaktiviert. Alle anderen Änderungen in der Konfigurationsdatei werden ignoriert.

    • Während die Knoten in einem Knotenpool separat von anderen Knoten verwaltet werden können, müssen die Knoten eines Clusters nicht separat aktualisiert werden. Für alle Knoten wird ein Upgrade durchgeführt, wenn Sie Ihre Cluster upgraden.

  • Ressourcen:

    • Sie können nur Änderungen am Knotenpool replicas bereitstellen, ohne dass die Arbeitslast eines Knotens unterbrochen wird.

      Wichtig: Wenn Sie eine andere Änderung an der Knotenpoolkonfiguration bereitstellen, werden die Knoten im Knotenpool neu erstellt. In keinem Knotenpool sollte eine Arbeitslast ausgeführt werden, die nicht unterbrochen werden darf.

    • Wenn Sie Ihre Knotenpool-Änderungen bereitstellen, werden unerwünschte Knoten gelöscht, sobald die gewünschten Knoten erstellt oder aktualisiert wurden. Eine Auswirkung dieser Richtlinie ist, dass, selbst wenn die Gesamtzahl der Knoten vor und nach einer Aktualisierung gleich bleibt, während der Aktualisierung mehr Ressourcen (z. B. IP-Adressen) erforderlich sein können. Für die Spitzennutzung müssen Sie prüfen, ob genügend IP-Adressen verfügbar sind.

Knotenpools erstellen und aktualisieren

Sie verwalten einen Knotenpool, indem Sie die Konfigurationsdatei Ihres Nutzerclusters ändern und bereitstellen. Sie können einen oder mehrere Knotenpools in einem Nutzercluster erstellen und bereitstellen.

So erstellen oder aktualisieren Sie Knotenpools:

  1. Öffnen Sie in einem Editor die Konfigurationsdatei des Nutzerclusters, in dem Sie Knotenpools erstellen oder aktualisieren möchten.

  2. Definieren Sie einen oder mehrere Knotenpools im Abschnitt nodePools der Konfigurationsdatei des Nutzerclusters:

    1. Konfigurieren Sie die mindestens erforderlichen Knotenpoolattribute. Sie müssen für jeden Knotenpool die folgenden Attribute angeben:

      • nodePools.name: gibt einen eindeutigen Namen für den Knotenpool an. Beim Aktualisieren dieses Attributs wird der Knoten neu erstellt. Beispiel: - name: pool-1

      • nodePools.cpus: Geben Sie an, wie viele CPUs jedem Worker-Knoten im Pool zugewiesen werden. Beim Aktualisieren dieses Attributs wird der Knoten neu erstellt. Beispiel: cpus: 4

      • nodePools.memoryMB: gibt an, wie viel Arbeitsspeicher (in Megabyte) den einzelnen Worker-Knoten des Nutzerclusters zugewiesen wird. Beim Aktualisieren dieses Attributs wird der Knoten neu erstellt. Beispiel: memoryMB: 8192

      • nodePools.replicas: Gibt die Gesamtzahl der Worker-Knoten im Pool an. Der Nutzercluster verwendet Knoten in allen Pools, um Arbeitslasten auszuführen. Sie können dieses Attribut aktualisieren, ohne dass es Auswirkungen auf Knoten oder laufende Arbeitslasten hat. Beispiel: replicas: 5

      Beachten Sie, dass einige der nodePools-Attribute zwar die gleichen sind wie der workernodeWorkerknoten (DHCP | Statische IP) in der alten Konfigurationsdatei, der workernode-Abschnitt jedoch in den alten Konfigurationsdateien jedes Nutzerclusters weiterhin erforderlich ist. Sie können den Abschnitt workernode nicht entfernen und auch nicht durch nodepools ersetzen. In der neuen Nutzercluster-Konfigurationsdatei gibt es keinen workernode-Abschnitt mehr. Sie müssen mindestens einen Knotenpool für einen Nutzercluster definieren und dafür sorgen, dass in Bezug auf den Standard-workernode-Pool in alten Konfigurationsdateien ausreichend Knoten vorhanden sind.

      Beispiel:

      nodePools:
      - name: pool-1
        cpus: 4
        memoryMB: 8192
        replicas: 5
      

      Unter Beispiele finden Sie eine ausführbare Konfigurationsdatei für Nutzercluster mit mehreren Knotenpools.

    2. Konfigurieren Sie optionale Knotenpoolattribute. Sie können der Knotenpoolkonfiguration Labels und Markierungen hinzufügen, um Knotenarbeitslasten zu steuern. Sie können auch definieren, welcher vSphere-Datenspeicher von Ihrem Knotenpool verwendet wird.

      • nodePools.labels: gibt ein oder mehrere key : value-Paare an, um Ihre Knotenpools eindeutig zu identifizieren. key und value können jeweils bis zu 63 Zeichen umfassen, müssen mit einem Buchstaben oder einer Ziffer beginnen und können Buchstaben, Ziffern, Bindestriche, Punkte und Unterstriche enthalten.

        Ausführliche Informationen zur Konfiguration finden Sie unter Labels.

        Wichtig: Sie können für ein Label nicht die folgenden Schlüssel angeben, da sie für die Verwendung durch GKE On-Prem reserviert sind: kubernetes.io, k8s.io und googleapis.com.

        Beispiel:

        labels:
          key1: value1
          key2: value2
        
      • nodePools.taints: gibt einen key, value und effect an, um taints (Markierungen) für Ihre Knotenpools zu definieren. Diese taints entsprechen den tolerations, die Sie für Ihre Pods konfigurieren.

        Die Angabe von key ist erforderlich und value ist optional. Beides kann jeweils bis zu 253 Zeichen umfassen, muss mit einem Buchstaben oder einer Ziffer beginnen und kann Buchstaben, Ziffern, Bindestriche, Punkte und Unterstriche enthalten. Optional können Sie einem key eine DNS-Subdomain gefolgt von einem Schrägstrich (/) voranstellen. Beispiel: example.com/my-app.

        Gültige Werte für effect sind NoSchedule, PreferNoSchedule und NoExecute.

        Ausführliche Informationen zur Konfiguration finden Sie unter Markierungen.

        Beispiel:

        taints:
          - key: key1
            value: value1
            effect: NoSchedule
        
      • nodePools.bootDiskSizeGB: Gibt die Größe des Bootlaufwerks in Gigabyte an jeden Worker-Knoten im Pool an. Diese Konfiguration ist ab der GKE-On-Prem-Version 1.5.0 verfügbar.

        Beispiel:

        bootDiskSizeGB: 40
        
      • nodePools.vsphere.datastore: Geben Sie den vSphere Datastore an, auf dem jeder Knoten im Pool erstellt wird. Dies überschreibt die Angabe zum Standard-vSphere-Datenspeicher des Nutzerclusters.

        Beispiel:

        vsphere:
          datastore: datastore_name
        

    Unter Beispiele finden Sie ein Konfigurationsbeispiel mit mehreren Knotenpools.

  3. Verwenden Sie den Befehl gkectl update cluster, um Ihre Änderungen im Nutzercluster bereitzustellen.

    gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG_FILE] --dry-run --yes
    
    Dabei gilt:
    • [ADMIN_CLUSTER_KUBECONFIG]: gibt die kubeconfig-Datei Ihres Administratorclusters an.
    • [USER_CLUSTER_CONFIG_FILE]: Gibt die Datei configuration Ihres Nutzerclusters an.
    • --dry-run: Optionales Flag. Fügen Sie dieses Flag hinzu, um nur die Änderung zu sehen. Es werden keine Änderungen im Nutzercluster bereitgestellt.
    • --yes: optionales Flag. Fügen Sie dieses Flag hinzu, damit der Befehl automatisch ausgeführt wird. Die Eingabeaufforderung mit der Frage, ob Sie fortfahren möchten, ist deaktiviert.

    Wenn Sie den Befehl vorzeitig abbrechen, können Sie denselben Befehl noch einmal ausführen, um den Vorgang abzuschließen und Ihre Änderungen im Nutzercluster bereitzustellen.

    Wenn Sie Ihre Änderungen rückgängig machen möchten, müssen Sie die Änderungen in der Konfigurationsdatei rückgängig machen und diese Änderungen dann noch einmal in Ihrem Nutzercluster bereitstellen.

  4. Prüfen Sie alle Knoten daraufhin, ob die Änderungen erfolgreich waren. Führen Sie den folgenden Befehl aus, um alle Knoten im Nutzercluster aufzulisten:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes -o wide
    

    Dabei ist [USER_CLUSTER_KUBECONFIG] die kubeconfig-Datei des Nutzerclusters.

Knotenpool löschen

So löschen Sie einen Knotenpool aus einem Nutzercluster:

  1. Entfernen Sie seine Definition aus dem Abschnitt nodePools der Konfigurationsdatei des Nutzerclusters.

  2. Achten Sie darauf, dass auf den betroffenen Knoten keine Arbeitslasten ausgeführt werden.

  3. Stellen Sie die Änderungen mit dem Befehl gkectl update cluster bereit:

    gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG_FILE] --dry-run --yes
    
    Dabei gilt:
    • [ADMIN_CLUSTER_KUBECONFIG]: gibt die kubeconfig-Datei Ihres Administratorclusters an.
    • [USER_CLUSTER_CONFIG_FILE]: Gibt die Datei configuration Ihres Nutzerclusters an.
    • --dry-run: Optionales Flag. Fügen Sie dieses Flag hinzu, um nur die Änderung zu sehen. Es werden keine Änderungen im Nutzercluster bereitgestellt.
    • --yes: optionales Flag. Fügen Sie dieses Flag hinzu, damit der Befehl automatisch ausgeführt wird. Die Eingabeaufforderung mit der Frage, ob Sie fortfahren möchten, ist deaktiviert.
  4. Prüfen Sie alle Knoten daraufhin, ob die Änderungen erfolgreich waren. Führen Sie den folgenden Befehl aus, um alle Knoten im Nutzercluster aufzulisten:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes -o wide
    

    Dabei ist [USER_CLUSTER_KUBECONFIG] die kubeconfig-Datei des Nutzerclusters.

Beispiele

In der folgenden Beispielkonfiguration gibt es vier Knotenpools mit jeweils unterschiedlichen Attributen:

  • pool-1: nur mindestens erforderliche Attribute sind angegeben
  • pool-2: enthält vSphere-Datenspeicher
  • pool-3: Enthält bootDiskSizeGB
  • pool-4: enthält Markierungen und Labels
  • pool-5: enthält alle Attribute
apiVersion: v1
kind: UserCluster
...
# (Required) List of node pools. The total un-tainted replicas across all node pools
# must be greater than or equal to 3
nodePools:
- name: pool-1
  cpus: 4
  memoryMB: 8192
  replicas: 5
- name: pool-2
  cpus: 8
  memoryMB: 16384
  replicas: 3
  vsphere:
    datastore: my_datastore
- name: pool-3
  cpus: 8
  memoryMB: 8192
  replicas: 3
  bootDiskSizeGB: 40
- name: pool-4
  cpus: 4
  memoryMB: 8192
  replicas: 5
  taints:
    - key: "example-key"
      effect: NoSchedule
  labels:
    environment: production
    app: nginx
- name: pool-5
  cpus: 8
  memoryMB: 16384
  replicas: 3
  taints:
    - key: "my_key"
      value: my_value1
      effect: NoExecute
  labels:
    environment: test
  vsphere:
    datastore: my_datastore
  bootDiskSizeGB: 60
...

Fehlerbehebung

  • Im Allgemeinen liefert der Befehl gkectl update cluster detaillierte Informationen, wenn er fehlschlägt. Wenn der Befehl erfolgreich ausgeführt wurde und die Knoten nicht angezeigt werden, können Sie anhand des Leitfadens Clusterprobleme diagnostizieren eine Fehlerbehebung durchführen.

  • Es ist möglich, dass nicht genügend Clusterressourcen vorhanden sind, z. B. wenn beim Erstellen oder Aktualisieren des Knotenpools nicht genügend IP-Adressen verfügbar sind. Weitere Informationen dazu, wie Sie die Verfügbarkeit von IP-Adressen prüfen, finden Sie unter Größe eines Nutzerclusters anpassen.

  • Sie können auch den allgemeinen Leitfaden zur Fehlerbehebung lesen.

  • Wenn Sie nicht weiter als bis Creating node MachineDeployment(s) in user cluster… gelangen:

    Es kann eine Weile dauern, bis die Knotenpools in Ihrem Nutzercluster erstellt oder aktualisiert wurden. Wenn die Wartezeit jedoch extrem lang ist und Sie den Verdacht haben, dass etwas nicht richtig funktioniert, können Sie so vorgehen:

    1. Führen Sie kubectl get nodes aus, um den Status Ihrer Knoten abzurufen.
    2. Führen Sie für alle Knoten, die nicht bereit sind, kubectl describe node [node_name] aus, um Details zu erfahren.