Cluster aktualisieren

Nachdem Sie einen Cluster mit bmctl erstellt haben, können Sie einige Aspekte der Clusterkonfiguration ändern. Führen Sie dazu die folgenden Aktionen aus:

  1. Ändern Sie die Werte bestimmter Felder in der Konfigurationsdatei des Clusters, die sich standardmäßig hier befindet: bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml.

  2. Aktualisieren Sie den Cluster mit dem Befehl bmctl update.

Auf diese Weise können Sie beispielsweise Knoten in einem Cluster hinzufügen oder entfernen oder Knoten in einem Cluster ersetzen. In diesem Dokument wird beschrieben, wie diese und andere Aktualisierungen für einen Cluster ausgeführt werden.

Beachten Sie jedoch, dass viele Aspekte Ihrer Clusterkonfiguration unveränderlich sind und nach dem Erstellen des Clusters nicht mehr aktualisiert werden können. Eine ausführliche Liste der änderbaren und unveränderlichen Felder finden Sie in der Referenz zum Clusterkonfigurationsfeld. Der Feldverweis ist eine sortierbare Tabelle. Klicken Sie auf die Spaltenüberschriften, um die Sortierreihenfolge zu ändern. Klicken Sie auf einen Feldnamen, um die zugehörige Beschreibung aufzurufen.

Knoten in einem Cluster hinzufügen oder entfernen

Ein Knotenpool ist eine Gruppe von Knoten innerhalb eines Clusters mit derselben Konfiguration. Denken Sie daran, dass ein Knoten immer zu einem Knotenpool gehört. Wenn Sie einem Cluster einen neuen Knoten hinzufügen möchten, müssen Sie ihn einem bestimmten Knotenpool hinzufügen. Wenn Sie einen Knoten aus einem Knotenpool entfernen, wird der Knoten vollständig aus dem Cluster entfernt.

Es gibt drei Arten von Knotenpools in Anthos-Clustern auf Bare Metal: Steuerungsebene, Load-Balancer und Worker-Knotenpools.

Zum Hinzufügen oder Entfernen eines Knotens aus einem Knotenpool fügen Sie die IP-Adresse des Knotens in einem bestimmten Abschnitt der Konfigurationsdatei des Clusters hinzu oder entfernen ihn. Die folgende Liste zeigt, welchen Abschnitt eines Manifests Sie für einen bestimmten Knotenpool bearbeiten müssen:

  • Worker-Knotenpool: Fügen Sie die IP-Adresse des Knotens in das Feld spec.nodes ein, das im Abschnitt kind: NodePool angezeigt wird.
  • Knotenpool der Steuerungsebene: Fügen Sie die IP-Adresse des Knotens in das Feld spec.controlPlane.nodePoolSpec.nodes ein, das im Abschnitt kind: Cluster angezeigt wird.
  • Load-Balancer-Knotenpool: Sie können keine IP-Adressen aus einem vorhandenen Load-Balancer-Adresspool ändern oder entfernen oder einen vorhandenen Load-Balancer-Adresspool entfernen. Nachdem Sie einen Cluster erstellt haben, können Sie nur neue Adresspools hinzufügen.

Beispiel: Worker-Knoten entfernen

Hier sehen Sie ein Beispiel für eine Clusterkonfigurationsdatei mit den Spezifikationen von zwei Worker-Knoten:

---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: nodepool1
  namespace: cluster-cluster1
spec:
  clusterName: cluster1
  nodes:
  - address: 172.18.0.5
  - address: 172.18.0.6

So entfernen Sie einen Knoten aus dem Worker-Knotenpool:

  1. Löschen Sie den IP-Adresseintrag des Knotens aus der Clusterkonfigurationsdatei:

    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: nodepool1
      namespace: cluster-cluster1
    spec:
      clusterName: cluster1
      nodes:
      - address: 172.18.0.5
    
  2. Aktualisieren Sie den Cluster:

    bmctl update cluster -c CLUSTER_NAME \
        --kubeconfig=KUBECONFIG
    

    Nehmen Sie die folgenden Änderungen vor:

    • Ersetzen Sie CLUSTER_NAME durch den Namen des Clusters, den Sie aktualisieren möchten.
    • Wenn der Cluster ein selbstverwaltender Cluster ist (z. B. Administrator- oder eigenständiger Cluster), ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des Clusters. Wenn der Cluster ein Nutzercluster ist, ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des Clusters admin.

Beachten Sie, dass bmctl Pods von einem Knoten per Drain beenden muss, bevor der Knoten entfernt werden kann. Knoten können nicht aus dem Cluster entfernt werden, wenn Pods nicht auf andere Knoten verschoben werden können.

Nachdem der Befehl bmctl update erfolgreich ausgeführt wurde, dauert es einige Zeit, bis die Jobs machine-preflight und machine-init abgeschlossen sind. Mit den Befehlen, die im Abschnitt Updates überprüfen dieses Dokuments beschrieben werden, können Sie den Status der Knoten und ihrer jeweiligen Knotenpools aufrufen.

Entfernen eines Knotens erzwingen

Wenn der Befehl bmctl update einen Knoten nicht entfernen kann, müssen Sie möglicherweise das Entfernen aus dem Cluster erzwingen. Weitere Informationen finden Sie unter Fehlerhafte Knoten automatisch entfernen.

Knoten der HA-Steuerungsebene ersetzen

Sie können Hochverfügbarkeitsknoten (HA) in Administrator-, Nutzer-, Standalone- und Hybrid-Clustern ersetzen.

So ersetzen Sie einen Knoten in einem Cluster:

  1. Entfernen Sie die IP-Adresse des Knotens aus der Clusterkonfigurationsdatei.
  2. Aktualisieren Sie den Cluster.
  3. Prüfen Sie den Status der Knoten im Cluster.
  4. Fügen Sie der Clusterkonfigurationsdatei die IP-Adresse eines neuen Knotens hinzu.
  5. Aktualisieren Sie den Cluster.

Der Rest dieses Abschnitts ist ein Beispiel.

Hier sehen Sie ein Beispiel für eine Clusterkonfigurationsdatei mit drei Knoten der Steuerungsebene in einem Nutzercluster:

---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
 name: user-cluster
 namespace: cluster-user-cluster
spec:
  controlPlane:
   nodePoolSpec:
     nodes:
     - address: 10.200.0.11
     - address: 10.200.0.12
     - address: 10.200.0.13

Führen Sie die folgenden Schritte aus, um den letzten im Abschnitt spec.controlPlane.nodePoolSpec.nodes aufgeführten Knoten zu ersetzen:

  1. Entfernen Sie den Knoten, indem Sie seinen IP-Adresseintrag in der Clusterkonfigurationsdatei löschen. Nach dieser Änderung sollte die Clusterkonfigurationsdatei in etwa so aussehen:

    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
     name: user-cluster
     namespace: cluster-user-cluster
    spec:
      controlPlane:
       nodePoolSpec:
         nodes:
         - address: 10.200.0.11
         - address: 10.200.0.12
    
  2. Aktualisieren Sie den Cluster mit dem folgenden Befehl:

    bmctl update cluster -c CLUSTER_NAME \
        --kubeconfig=KUBECONFIG
    

    Nehmen Sie die folgenden Änderungen vor:

    • Ersetzen Sie CLUSTER_NAME durch den Namen des Clusters, den Sie aktualisieren möchten.
    • Wenn der Cluster ein selbstverwaltender Cluster ist (z. B. Administrator- oder eigenständiger Cluster), ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des Clusters. Wenn der Cluster wie in diesem Beispiel ein Nutzercluster ist, ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des Clusters admin.
  3. Nachdem der Befehl bmctl update erfolgreich ausgeführt wurde, dauert es einige Zeit, bis die Jobs machine-preflight und machine-init abgeschlossen sind. Mit den Befehlen, die im Abschnitt Updates überprüfen dieses Dokuments beschrieben werden, können Sie den Status der Knoten und ihrer jeweiligen Knotenpools aufrufen. Sobald der Knotenpool und die Knoten bereit sind, können Sie mit dem nächsten Schritt fortfahren.

  4. Fügen Sie dem Knotenpool einen neuen Knoten für die Steuerungsebene hinzu. Fügen Sie dazu im Abschnitt spec.controlPlane.nodePoolSpec.nodes der Clusterkonfigurationsdatei die IP-Adresse des neuen Knotens der Steuerungsebene hinzu. Nach dieser Änderung sollte die Clusterkonfigurationsdatei in etwa so aussehen:

    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
     name: user-cluster
     namespace: cluster-user-cluster
    spec:
      controlPlane:
       nodePoolSpec:
         nodes:
         - address: 10.200.0.11
         - address: 10.200.0.12
         - address: 10.200.0.14
    
  5. Aktualisieren Sie den Cluster mit dem folgenden Befehl:

    bmctl update cluster -c CLUSTER_NAME \
        --kubeconfig=KUBECONFIG
    

    Nehmen Sie die folgenden Änderungen vor:

    • Ersetzen Sie CLUSTER_NAME durch den Namen des Clusters, den Sie aktualisieren möchten.
    • Wenn der Cluster ein selbstverwaltender Cluster ist (z. B. Administrator- oder eigenständiger Cluster), ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des Clusters. Wenn der Cluster wie in diesem Beispiel ein Nutzercluster ist, ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des Clusters admin.

Updates bestätigen

Mit dem Befehl kubectl get können Sie den Status von Knoten und den zugehörigen Knotenpools anzeigen lassen.

Der folgende Befehl zeigt beispielsweise den Status der Knotenpools im Cluster-Namespace cluster-my-cluster an:

kubectl -n cluster-my-cluster get nodepools.baremetal.cluster.gke.io

Das System gibt Ergebnisse ähnlich der folgenden:

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
cluster-my-cluster      3       0             0         0                  0
cluster-my-cluster-lb   2       0             0         0                  0
np1                     3       0             0         0                  0

Reconciling=1 bedeutet, dass der Abgleichsschritt noch läuft. Warten Sie, bis sich der Status zu Reconciling=0 ändert.

Sie können den Status der Knoten im Cluster auch mit dem folgenden Befehl prüfen:

kubectl get nodes --kubeconfig=KUBECONFIG

Weitere Informationen zum Diagnostizieren von Clustern finden Sie unter Snapshots zum Diagnostizieren von Clustern erstellen.

Funktionen, die Sie mit einem Update ändern können

Mit dem Befehl bmctl update können Sie nicht nur Knoten hinzufügen, entfernen oder ersetzen, sondern auch bestimmte änderbare Feldwerte, benutzerdefinierte Ressourcen (CRs) und Annotationen in der Clusterkonfigurationsdatei ändern.

Zum Aktualisieren einer Clusterressource bearbeiten Sie die Clusterkonfigurationsdatei und verwenden bmctl update, um die Änderungen zu übernehmen.

In den folgenden Abschnitten werden einige gängige Beispiele zum Aktualisieren eines vorhandenen Clusters beschrieben, indem Sie entweder einen Feldwert, eine Antwortvorlage oder eine Annotation ändern.

loadBalancer.addressPools

Der Abschnitt addressPools enthält Felder zum Angeben von Load-Balancing-Pools für gebündelte Load-Balancer. Sie können jederzeit weitere Load-Balancing-Adresspools hinzufügen, aber keine vorhandenen Adresspools entfernen oder ändern.

addressPools:
- name: pool1
  addresses:
  - 192.168.1.0-192.168.1.4
  - 192.168.1.240/28
- name: pool2
  addresses:
  - 192.168.1.224/28

Versehentliches Löschen von Clustern verhindern

Wenn Sie der Clusterkonfigurationsdatei die Annotation baremetal.cluster.gke.io/prevent-deletion: "true" hinzufügen, können Sie den Cluster nicht löschen. Die Ausführung von kubectl delete cluster oder bmctl reset cluster führt beispielsweise zu einem Fehler.

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: ci-10c3c6f4d9c698e
  namespace: cluster-ci-10c3c6f4d9c698e
  annotations:
    baremetal.cluster.gke.io/prevent-deletion: "true"
spec:
  clusterNetwork:

bypassPreflightCheck

Der Standardwert des Felds bypassPreflightCheck ist false. Wenn Sie dieses Feld in der Clusterkonfigurationsdatei auf true setzen, werden die internen Preflight-Prüfungen ignoriert, wenn Sie Ressourcen auf vorhandene Cluster anwenden.

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    baremetal.cluster.gke.io/private-mode: "true"
spec:
  bypassPreflightCheck: true

loginUser

Sie können das Feld loginUser unter der Konfiguration des Knotenzugriffs festlegen. Dieses Feld unterstützt die sudo-Funktion ohne Passwort für die Maschinenanmeldung.

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    baremetal.cluster.gke.io/private-mode: "true"
spec:
  nodeAccess:
    loginUser: abm

NetworkGatewayGroup

Die benutzerdefinierte NetworkGatewayGroup-Ressource wird verwendet, um Floating-IP-Adressen für erweiterte Netzwerkfeatures bereitzustellen, z. B. das NAT-Gateway für ausgehenden Traffic oder das gebündelte Load-Balancing Feature mit BGP. Wenn Sie die benutzerdefinierte NetworkGatewayGroup-Ressource und zugehörige Netzwerkfeatures verwenden möchten, müssen Sie beim Erstellen der Cluster clusterNetwork.advancedNetworking auf true festlegen.

apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
  name: default
  namespace: cluster-bm
spec:
  floatingIPs:
  - 10.0.1.100
  - 10.0.2.100

BGPLoadBalancer

Wenn Sie gebündelte Load-Balancer mit BGP konfigurieren, verwendet das Load-Balancing der Datenebene standardmäßig dieselben externen Peers, die für das Peering der Steuerungsebene angegeben wurden. Alternativ können Sie das Load-Balancing der Datenebene separat mit der benutzerdefinierten Ressource BGPLoadBalancer und der benutzerdefinierten Ressource BGPPeer konfigurieren. Weitere Informationen finden Sie unter Gebündelte Load-Balancer mit BGP konfigurieren.

apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
  name: default
  namespace: cluster-bm
spec:
  peerSelector:
    cluster.baremetal.gke.io/default-peer: "true"

BGPPeer

Wenn Sie gebündelte Load-Balancer mit BGP konfigurieren, verwendet das Load-Balancing der Datenebene standardmäßig dieselben externen Peers, die für das Peering der Steuerungsebene angegeben wurden. Alternativ können Sie das Load-Balancing der Datenebene separat mit der benutzerdefinierten Ressource BGPPeer und der benutzerdefinierten Ressource BGPLoadBalancer konfigurieren. Weitere Informationen finden Sie unter Gebündelte Load-Balancer mit BGP konfigurieren.

apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
  name: bgppeer1
  namespace: cluster-bm
  labels:
    cluster.baremetal.gke.io/default-peer: "true"
spec:
  localASN: 65001
  peerASN: 65002
  peerIP: 10.0.3.254
  sessions: 2

NetworkAttachmentDefinition

Mit dem Befehl bmctl update können Sie benutzerdefinierte NetworkAttachmentDefinition-Ressourcen ändern, die dem Netzwerk entsprechen.

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: gke-network-1
  namespace: cluster-my-cluster
spec:
  config: '{
  "type": "ipvlan",
  "master": "enp2342",
  "mode": "l2",
  "ipam": {
    "type": "whereabouts",
    "range": "172.120.0.0/24"

Nachdem Sie die Konfigurationsdatei geändert haben, aktualisieren Sie den Cluster mit dem folgenden bmctl update-Befehl:

bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG

Nehmen Sie die folgenden Änderungen vor:

  • Ersetzen Sie CLUSTER_NAME durch den Namen des Clusters, den Sie aktualisieren möchten.
  • Wenn der Cluster ein selbstverwaltender Cluster ist (z. B. Administrator- oder eigenständiger Cluster), ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des Clusters. Wenn der Cluster ein Nutzercluster ist, ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des Clusters admin.