Nachdem Sie einen Cluster mit bmctl
erstellt haben, können Sie einige Aspekte der Clusterkonfiguration ändern. Führen Sie dazu die folgenden Aktionen aus:
Ändern Sie die Werte bestimmter Felder in der Konfigurationsdatei des Clusters, die sich standardmäßig hier befindet:
bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml
.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 Abschnittkind: NodePool
angezeigt wird. - Knotenpool der Steuerungsebene: Fügen Sie die IP-Adresse des Knotens in das Feld
spec.controlPlane.nodePoolSpec.nodes
ein, das im Abschnittkind: 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:
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
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:
- Entfernen Sie die IP-Adresse des Knotens aus der Clusterkonfigurationsdatei.
- Aktualisieren Sie den Cluster.
- Prüfen Sie den Status der Knoten im Cluster.
- Fügen Sie der Clusterkonfigurationsdatei die IP-Adresse eines neuen Knotens hinzu.
- 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:
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
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.
Nachdem der Befehl
bmctl update
erfolgreich ausgeführt wurde, dauert es einige Zeit, bis die Jobsmachine-preflight
undmachine-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.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
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.