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 Sie diese und andere Aktualisierungen für einen Cluster ausführen.
Beachten Sie jedoch, dass viele Aspekte Ihrer Clusterkonfiguration unveränderlich sind und nach dem Erstellen des Clusters nicht mehr aktualisiert werden können. Eine umfassende Liste änderbarer und unveränderlicher Felder finden Sie in der Referenz zu Feldern für die Clusterkonfiguration. 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, die dieselbe Konfiguration haben. Beachten Sie, dass ein Knoten immer zu einem Knotenpool gehört. Um einem Cluster einen neuen Knoten hinzuzufügen, müssen Sie ihn einem bestimmten Knotenpool hinzufügen. Das Entfernen eines Knotens aus einem Knotenpool entspricht dem Entfernen des Knotens aus dem Cluster.
In GKE on Bare Metal gibt es drei Arten von Knotenpools: Steuerungsebene, Load-Balancer und Worker-Knotenpools.
Sie können einen Knoten in einen Knotenpool einfügen oder daraus entfernen, indem Sie die IP-Adresse des Knotens in einem bestimmten Abschnitt der Clusterkonfigurationsdatei hinzufügen oder entfernen. Die folgende Liste zeigt, welcher Abschnitt für einen bestimmten Knotenpool bearbeitet werden muss:
- Worker-Knotenpool: Fügen Sie die IP-Adresse des Knotens im Abschnitt
spec.nodes
der SpezifikationNodePool
hinzu oder entfernen Sie sie. - Knotenpool für Steuerungsebene: Fügen Sie der Spezifikation
Cluster
im Abschnittspec.controlPlane.nodePoolSpec.nodes
die IP-Adresse des Knotens hinzu oder entfernen Sie sie. - Load-Balancer-Knotenpool: Fügen Sie die IP-Adresse des Knotens im Abschnitt
spec.loadBalancer.nodePoolSpec.nodes
der SpezifikationCluster
hinzu oder entfernen Sie sie.
Beispiel: So entfernen Sie einen Worker-Knoten
Hier ist ein Beispiel für eine Clusterkonfigurationsdatei, die die Spezifikationen von zwei Worker-Knoten zeigt:
---
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:
(Optional) Wenn auf dem zu entfernenden Knoten kritische Pods ausgeführt werden, setzen Sie den Knoten zuerst in den Wartungsmodus.
Sie können den Knotenausgleich für Worker-Knoten überwachen. Dazu rufen Sie die Felder
status.nodesDrained
undstatus.nodesDraining
der RessourceNodePool
auf.Löschen Sie in der Clusterkonfigurationsdatei den IP-Adresseintrag für den Knoten.
Aktualisieren Sie den Cluster:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG
Ersetzen Sie Folgendes:
CLUSTER_NAME
: der Name des Clusters, den Sie aktualisieren möchten.ADMIN_KUBECONFIG
: Pfad zur kubeconfig-Datei des Administratorclusters.
Nachdem der Befehl
bmctl update
erfolgreich ausgeführt wurde, dauert es einige Zeit, bis die Jobsmachine-preflight
undmachine-init
abgeschlossen sind. Sie können den Status der Knoten und ihrer jeweiligen Knotenpools anzeigen, indem Sie die im Abschnitt Updates überprüfen dieses Dokuments beschriebenen Befehle ausführen.
Entfernung eines Knotens erzwingen
Wenn der bmctl update
-Befehl einen Knoten nicht entfernen kann, müssen Sie möglicherweise das Entfernen aus dem Cluster erzwingen. Weitere Informationen finden Sie unter Entfernen fehlerhafter Knoten erzwingen.
Knoten der Steuerungsebene mit Hochverfügbarkeit ersetzen
Sie können Knoten der Steuerungsebene mit Hochverfügbarkeit in Administrator-, Nutzer-, eigenständigen 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 die IP-Adresse eines neuen Knotens derselben Clusterkonfigurationsdatei hinzu.
- Aktualisieren Sie den Cluster.
Der Rest dieses Abschnitts enthält ein Beispiel.
Hier ist 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 den zugehörigen 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 selbst verwaltender 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, wie in diesem Beispiel, ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des admin-Clusters.
Nachdem der Befehl
bmctl update
erfolgreich ausgeführt wurde, dauert es einige Zeit, bis die Jobsmachine-preflight
undmachine-init
abgeschlossen sind. Sie können den Status der Knoten und ihrer jeweiligen Knotenpools anzeigen, indem Sie die im Abschnitt Updates überprüfen dieses Dokuments beschriebenen Befehle ausführen. 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 der Steuerungsebene hinzu. Fügen Sie dazu die IP-Adresse des neuen Knotens der Steuerungsebene in den Abschnitt
spec.controlPlane.nodePoolSpec.nodes
der Clusterkonfigurationsdatei ein. 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 selbst verwaltender 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, wie in diesem Beispiel, ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des admin-Clusters.
Aktualisierungen überprüfen
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. Sie sollten warten, bis sich der Status in Reconciling=0
ändert.
Sie können den Status der Knoten in einem 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 sich 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 wenden Ihre Änderungen mit bmctl update
an.
In den folgenden Abschnitten finden Sie einige allgemeine Beispiele für das Aktualisieren eines vorhandenen Clusters durch Ändern eines Feldwerts, einer Antwortvorlage oder einer Annotation.
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.
Das Ausführen 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 selbst verwaltender 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 admin-Clusters.
Schreibgeschützten Kubelet-Port deaktivieren
Ab Version 1.15.0 deaktiviert GKE on Bare Metal standardmäßig den schreibgeschützten Kubelet-Port 10255. Alle Kundenarbeitslasten, die für das Lesen von Daten aus diesem unsicheren Kubelet-Port 10255 konfiguriert sind, sollten zum sicheren Kubelet-Port 10250 migriert werden.
Nur bei Clustern, die mit Version 1.15.0 oder höher erstellt wurden, ist dieser Port standardmäßig deaktiviert. Der schreibgeschützte Kubelet-Port 10255 bleibt für Cluster zugänglich, die mit einer niedrigeren Version als 1.15.0 erstellt wurden, auch nach einem Clusterupgrade auf Version 1.15.0 oder höher.
Diese Änderung wurde vorgenommen, weil das Kubelet Informationen mit geringer Vertraulichkeit über den nicht authentifizierten Port 10255 preisgibt. Die Informationen umfassen die vollständigen Konfigurationsinformationen für alle auf einem Knoten ausgeführten Pods, die für einen Angreifer wertvoll sein können. Außerdem werden Messwerte und Statusinformationen offengelegt, die für Ihr Unternehmen sensible Informationen liefern.
Das Deaktivieren des schreibgeschützten Kubelet-Ports wird in der CIS-Kubernetes-Benchmark empfohlen. Führen Sie die folgenden Schritte aus, um den Port in Version 1.14 manuell zu deaktivieren:
Bearbeiten Sie die Clusterkonfigurationsdatei und fügen Sie die folgende Annotation hinzu:
baremetal.cluster.gke.io/enable-kubelet-read-only-port: "false"
Das folgende Beispiel einer Clusterkonfigurationsdatei zeigt, dass diese Annotation hinzugefügt wurde:
[...] --- apiVersion: v1 kind: Namespace metadata: name: cluster-my-cluster --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: annotations: baremetal.cluster.gke.io/enable-kubelet-read-only-port: "false" name: my-cluster namespace: cluster-my-cluster [...]
Bearbeiten Sie die Clusterressource für die Cluster-Webhook-Validierung:
kubectl edit validatingwebhookconfigurations lcm-validating-webhook-configuration
Deaktivieren Sie vorübergehend die Webhook-Validierung. Löschen Sie dazu die Zeile mit dem Verb
UPDATE
:- admissionReviewVersions: - v1 clientConfig: caBundle: … service: name: lcm-webhook-service namespace: kube-system path: /validate-baremetal-cluster-gke-io-v1-cluster port: 443 failurePolicy: Fail matchPolicy: Equivalent name: vcluster.kb.io namespaceSelector: {} objectSelector: {} rules: - apiGroups: - baremetal.cluster.gke.io apiVersions: - v1 operations: - CREATE - UPDATE # <- DELETE THIS LINE - DELETE resources: - clusters scope: '*' sideEffects: None timeoutSeconds: 10
Fügen Sie der benutzerdefinierten Clusterressource die Annotation hinzu:
kubectl edit clusters CLUSTER_NAME --kubeconfig KUBECONFIG_PATH
Nehmen Sie die folgenden Änderungen vor:
- Ersetzen Sie CLUSTER_NAME durch den Namen des Clusters, den Sie aktualisieren möchten.
- Ersetzen Sie KUBECONFIG_PATH durch den Pfad zur kubeconfig-Datei des Clusters.
Fügen Sie die Annotation hinzu, wie im folgenden Beispiel einer aktualisierten benutzerdefinierten Clusterressource gezeigt:
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: annotations: baremetal.cluster.gke.io/enable-kubelet-read-only-port: "false" [...]
Speichern und schließen Sie die benutzerdefinierte Clusterressource.
Aktivieren Sie die Webhook-Validierung wieder, indem Sie das Verb
UPDATE
wieder der Clusterressource für die Cluster-Webhook-Validierung hinzufügen:kubectl edit validatingwebhookconfigurations lcm-validating-webhook-configuration
Fügen Sie in der benutzerdefinierten Ressource das Verb
UPDATE
im Abschnittoperations
wieder hinzu:- admissionReviewVersions: - v1 clientConfig: caBundle: … service: name: lcm-webhook-service namespace: kube-system path: /validate-baremetal-cluster-gke-io-v1-cluster port: 443 failurePolicy: Fail matchPolicy: Equivalent name: vcluster.kb.io namespaceSelector: {} objectSelector: {} rules: - apiGroups: - baremetal.cluster.gke.io apiVersions: - v1 operations: - CREATE - UPDATE # <- ADD THIS LINE BACK - DELETE resources: - clusters scope: '*' sideEffects: None timeoutSeconds: 10
Speichern und schließen Sie die benutzerdefinierte Clusterressource.
Diese Änderungen werden beibehalten, wenn Sie ein Upgrade auf Version 1.15.0 oder höher ausführen.