Cluster aktualisieren

Nachdem Sie einen Cluster mit bmctl erstellt haben, können Sie die benutzerdefinierten Ressourcen dieses Clusters aktualisieren. Sie können beispielsweise Knoten in einem Knotenpool hinzufügen oder entfernen. Die Konfigurationsdatei wird als bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml gespeichert, es sei denn, Sie haben einen anderen Speicherort angegeben.

In diesem Dokument erfahren Sie, welche Clusterkonfigurationsoptionen nach dem Erstellen eines Clusters aktualisiert werden können, z. B. zum Hinzufügen oder Entfernen von Knoten.

Knoten in einem Cluster hinzufügen oder entfernen

In Anthos-Cluster on Bare Metal können Sie Knoten in einem Cluster hinzufügen oder entfernen, indem Sie die Knotenpooldefinitionen des Clusters bearbeiten. Sie verwenden die IP-Adresse von Knoten, um sie einem Knotenpool hinzuzufügen oder daraus zu entfernen. Mit dem Befehl bmctl können Sie diese Definitionen ändern.

Es gibt drei verschiedene Arten von Knotenpools in Anthos-Cluster on Bare Metal: Steuerungsebene, Load-Balancer und Worker-Knotenpools.

Knotenstatus anzeigen

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 my-cluster an:

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

Das System gibt Ergebnisse ähnlich der folgenden:

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

Weitere Informationen zur Diagnose Ihrer Cluster finden Sie unter Snapshots zur Diagnose von Clustern erstellen.

Knoten ändern

Die meisten Knotenänderungen werden in der Clusterkonfigurationsdatei angegeben, die dann auf den Cluster angewendet wird. Wir empfehlen die Verwendung der Cluster-Konfigurationsdatei als primäre Quelle für die Aktualisierung des Clusters. Es empfiehlt sich, die Konfigurationsdatei in einem Versionsverwaltungssystem zu speichern, um Änderungen für die Fehlerbehebung zu verfolgen. Verwenden Sie für alle Clustertypen den Befehl bmctl update, um Ihren Cluster mit Ihren Knotenänderungen zu aktualisieren.

Die Clusterkonfigurationsdatei der Anthos-Cluster auf Bare-Metal- enthält einen Header-Abschnitt mit Anmeldedaten. Die Anmeldedateneinträge und der Rest der Konfigurationsdatei sind gültiges YAML, aber die Anmeldedaten sind für die Clusterressource nicht gültig. Verwenden Sie bmctl update credentials für die Aktualisierung von Anmeldedaten.

Wenn Sie Knoten aus einem Cluster entfernen, werden alle Pods zuerst per Drain beendet. Knoten können nicht aus dem Cluster entfernt werden, wenn Pods nicht auf anderen Knoten neu geplant werden können. Der Befehl bmctl update parst die Clusterkonfigurationsdatei und wendet benutzerdefinierte Ressourcen anhand des geparsten Ergebnisses an.

Hier eine Beispielkonfiguration mit zwei 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

Sie können einen Knoten aus dem Knotenpool entfernen, indem Sie seinen IP-Adresseintrag löschen:

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

Führen Sie zum Aktualisieren des Clusters den folgenden Befehl für die selbstverwalteten Cluster aus, z. B. für Administratorcluster und für eigenständige Cluster:

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

Nachdem der Befehl bmctl update erfolgreich ausgeführt wurde, dauert es eine Weile, bis die Pods machine-init oder machine-reset ausgeführt werden.

In den folgenden Abschnitten werden einige wichtige Unterschiede bei der Aktualisierung bestimmter Knotentypen beschrieben.

Knoten der Steuerungsebene und der Load-Balancer

Die Steuerungsebene- und Load-Balancer-Knotenpoolspezifikationen für Anthos-Cluster auf Bare-Metal sind spezifisch. Diese Spezifikationen deklarieren und steuern wichtige Clusterressourcen. Die kanonische Quelle für diese Ressourcen sind die entsprechenden Abschnitte in der Cluster-Konfigurationsdatei:

  • spec.controlPlane.nodePoolSpec
  • spec.LoadBalancer.nodePoolSpec

Zum Hinzufügen oder Entfernen von Steuerungsebenen- oder Load-Balancer-Knoten bearbeiten Sie das Array von Adressen im korrespondierenden Abschnitt der Clusterkonfigurationsdatei unter nodes.

Bei einer Hochverfügbarkeitskonfiguration ist eine ungerade Anzahl von Knotenpools (drei oder mehr) der Steuerungsebene erforderlich, um ein Quorum zu erstellen. So wird sichergestellt, dass bei einem Ausfall einer Steuerungsebene auch andere übernommen werden. Wenn Sie vorübergehend eine gerade Anzahl von Knoten haben, während Sie Knoten zur Wartung oder zum Austausch hinzufügen oder entfernen, hält Ihre Bereitstellung HA aufrecht, solange Sie genügend Quorum haben.

Worker-Knoten

Mit dem Befehl bmctl können Sie Worker-Knoten direkt hinzufügen oder entfernen. Worker-Knotenpools müssen mindestens einen gewünschten Knoten haben. Sie können aber den gesamten Knotenpool mit dem Befehl kubectl entfernen. Im folgenden Beispiel löscht der Befehl einen Knotenpool namens np1, wobei die Variable für den Cluster-Namespace my-cluster lautet:

kubectl -n my-cluster delete nodepool np1

Sonstige veränderbare Felder

Neben dem Hinzufügen und Entfernen von Knoten können Sie auch mit dem Befehl bmctl update bestimmte Elemente der Clusterkonfiguration ändern. Zum Aktualisieren der Clusterressource bearbeiten Sie normalerweise die lokale Version der Clusterkonfigurationsdatei und wenden die Änderungen mit bmctl update an. Der Befehl bmctl update ähnelt dem Befehl kubectl apply.

In den folgenden Abschnitten werden einige gängige Beispiele zum Aktualisieren eines vorhandenen Clusters beschrieben, indem entweder ein Feldwert oder eine zugehörige benutzerdefinierte Ressource geändert wird.

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

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, können Sie den Cluster mit dem Befehl bmctl update aktualisieren. Er parst die Clusterkonfigurationsdatei und wendet benutzerdefinierte Ressourcen anhand des geparsten Ergebnisses an.

Für selbstverwaltete Cluster wie Administratorcluster und eigenständige Cluster führen Sie den folgenden Befehl aus:

bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG

Für Nutzercluster führen Sie den folgenden Befehl aus:

bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=ADMIN_KUBECONFIG