Wenn ein Knoten beschädigt ist und für eine Reparatur oder einen Ersatz aus einem Cluster entfernt werden muss, können Sie das Entfernen aus dem Cluster erzwingen.
Entfernen von Knoten in Anthos-Cluster on Bare Metal 1.6.0 erzwingen
In Version 1.6.0 von Anthos on Bare Metal führt das Entfernen eines Knotens aus seinem übergeordneten Knotenpool zu folgenden Aktionen:
- Leeren des Knotens
- Entfernen des Knotens aus Kubernetes-Cluster
- Zurücksetzen der Maschine in den Zustand vor der Installation von Anthos on Bare Metal
Wenn der Knoten jedoch nicht zugänglich ist, wird das Leeren des Knotens nicht abgeschlossen. Der Controller versucht wiederholt, den Knoten zu entleeren, und macht niemals Fortschritte.
Als vorübergehende Problemumgehung können Sie die folgenden Änderungen anwenden, um die Schritte zum Entleeren und Zurücksetzen zu umgehen.
ACHTUNG: Für diesen Vorgang müssen bestimmte Implementierungsfelder in benutzerdefinierten Kubernetes-Ressourcen sorgfältig aktualisiert werden. Fahren Sie erst fort, wenn Sie sicher sind, dass der Knoten nicht wiederhergestellt werden kann.
Führen Sie diese Schritte aus, nachdem Sie den fehlerhaften Knoten aus dem Knotenpool entfernt und die Änderung im Administratorcluster angewendet haben.
Ermitteln Sie die benutzerdefinierte Ressource der Cluster-API-Maschine im Administratorcluster, wobei ADMIN_KUBECONFIG der Pfad zur Datei
kubeconfig
und CLUSTER_NAMESPACE der betroffene Cluster-Namespace ist:kubectl --kubeconfig ADMIN_KUBECONFIG \ -n CLUSTER_NAMESPACE get ma 10.200.0.8
Die vom Befehl zurückgegebenen Ergebnisse sehen in etwa so aus:
NAME PROVIDERID PHASE 10.200.0.8 baremetal://10.200.0.8 Deleting
In diesem Beispiel ist 10.200.0.8 die IP-Adresse des Knotens, der in der Löschphase festhängen.
Bearbeiten Sie die benutzerdefinierte Ressource des Computers und fügen Sie die Annotation
machine.cluster.x-k8s.io/exclude-node-draining
hinzu. Beachten Sie, dass der Annotationswert selbst keine Rolle spielt, da das Entleeren übersprungen wird, solange der Schlüssel vorhanden ist:kubectl --kubeconfig ADMIN_KUBECONFIG -n CLUSTER_NAMESPACE \ annotate ma 10.200.0.8 machine.cluster.x-k8s.io/exclude-node-draining=true
Suchen Sie im Administratorcluster die benutzerdefinierte Ressource der Bare Metal-Maschine:
kubectl --kubeconfig ADMIN_KUBECONFIG -n CLUSTER_NAMESPACE \ get baremetalmachine 10.200.0.8
Die vom Befehl zurückgegebenen Ergebnisse sehen in etwa so aus:
NAME CLUSTER READY INSTANCEID MACHINE 10.200.0.8 cluster1 true baremetal://10.200.0.8 10.200.0.8
Entfernen Sie den Finaler, um den Zurücksetzensschritt zu überspringen und die Blockierung des Knotens aufzuheben:
kubectl --kubeconfig ADMIN_KUBECONFIG -n CLUSTER_NAMESPACE \ patch baremetalmachine 10.200.0.8 --type json -p='[{"op": "remove", "path": "/metadata/finalizers"}]'
Nach einigen Sekunden wird der Knoten aus dem Cluster entfernt.
Entfernen von Knoten in Anthos-Cluster on Bare Metal 1.6.1 erzwingen
In Anthos-Cluster on Bare Metal 1.6.1 können Sie eine Anmerkung hinzufügen, um einen Knoten zum erzwungenen Entfernen zu markieren.
Führen Sie nach dem Entfernen des Knotens aus dem übergeordneten Knotenpool den folgenden Befehl aus, um den entsprechenden fehlerhaften Computer mit der Annotation baremetal.cluster.gke.io/force-remove
zu versehen. Der Wert der Annotation selbst spielt keine Rolle:
kubectl --kubeconfig ADMIN_KUBECONFIG -n CLUSTER_NAMESPACE \ annotate machine 10.200.0.8 baremetal.cluster.gke.io/force-remove=true
Anthos on Bare Metal entfernt erfolgreich den Knoten.
Entfernen von Steuerungsebenenknoten erzwingen
Das erzwungene Entfernen eines Steuerebenenknotens ähnelt dem Durchführen eines kubeadm reset
an Steuerebenenknoten und erfordert zusätzliche Schritte.
Um das Entfernen eines Steuerebenenknoten aus den Knotenpools zu erzwingen, müssen Sie die folgenden Aktionen für den Cluster ausführen, der den fehlerhaften Steuerebenenknoten enthält:
- Entfernen Sie das fehlerhafte
etcd
-Mitglied, das auf dem ausgefallenen Knoten aus dem Clusteretcd
ausgeführt wird. - Aktualisieren Sie
ClusterStatus
in kube, um den entsprechendenapiEndpoint
zu entfernen.
Fehlerhaftes etcd
-Mitglied entfernen
Führen Sie zuerst den Befehl etcdctl
für die verbleibenden fehlerfreien etcd
-Pods aus, um den ausgefallenen Steuerungsknoten zu entfernen. Weitere Informationen zu diesem Vorgang finden Sie in dieser Kubernetes-Dokumentation.
Im folgenden Verfahren ist CLUSTER_KUBECONFIG der Pfad zur Datei kubeconfig
des Clusters.
Suchen Sie mit dem folgenden Befehl den Pod
etcd
:kubectl --kubeconfig CLUSTER_KUBECONFIG get \ pod -n kube-system -l component=etcd -o wide
Der Befehl gibt die folgende Knotenliste zurück. In diesem Beispiel wird davon ausgegangen, dass der Knoten 10.200.0.8 nicht zugänglich ist und nicht wiederhergestellt werden kann:
NAME READY STATUS RESTARTS AGE IP NODE etcd-357b68f4ecf0 1/1 Running 0 9m2s 10.200.0.6 357b68f4ecf0 etcd-7d7c21db88b3 1/1 Running 0 33m 10.200.0.7 7d7c21db88b3 etcd-b049141e0802 1/1 Running 0 8m22s 10.200.0.8 b049141e0802
Führen Sie einen der verbleibenden fehlerfreien
etcd
-Pods aus:kubectl --kubeconfig CLUSTER_KUBECONFIG exec -it -n \ kube-system etcd-357b68f4ecf0 -- /bin/sh
Suchen Sie in den aktuellen Mitgliedern nach der ID des fehlerhaften Mitglieds. Der Befehl gibt eine Liste zurück:
etcdctl --endpoints=https://10.200.0.6:2379,https://10.200.0.7:2379 --key=/etc/kubernetes/pki/etcd/peer.key \ --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt member list
Dieser Befehl gibt beispielsweise Folgendes zurück:
23da9c3f2594532a, started, 7d7c21db88b3, https://10.200.0.6:2380, https://10.200.0.6:2379, false 772c1a54956b7f51, started, 357b68f4ecf0, https://10.200.0.7:2380, https://10.200.0.7:2379, false f64f66ad8d3e7960, started, b049141e0802, https://10.200.0.8:2380, https://10.200.0.8:2379, false
Entfernen Sie das fehlerhafte Mitglied:
etcdctl --endpoints=https://10.200.0.6:2379,https://10.200.0.7:2379 --key=/etc/kubernetes/pki/etcd/peer.key \ --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt \ member remove f64f66ad8d3e7960
ClusterStatus
aktualisieren und fehlerhaften apiEndpoint
entfernen
Im folgenden Verfahren ist CLUSTER_KUBECONFIG der Pfad zur Datei kubeconfig
des Clusters.
Suchen Sie in der ConfigMap
kubeadm-config
den AbschnittClusterStatus
:kubectl --kubeconfig CLUSTER_KUBECONFIG describe configmap -n \ kube-system kubeadm-config
Der Befehl gibt Ergebnisse wie die folgenden zurück:
... ClusterStatus: ---- apiEndpoints: 7d7c21db88b3: advertiseAddress: 10.200.0.6 bindPort: 6444 357b68f4ecf0: advertiseAddress: 10.200.0.7 bindPort: 6444 b049141e0802: advertiseAddress: 10.200.0.8 bindPort: 6444 apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterStatus ...
Bearbeiten Sie die Konfigurationszuordnung, um den Abschnitt zu entfernen, der die fehlerhafte IP enthält (dieses Beispiel zeigt die Ergebnisse des Entfernens von
10.200.0.8
mit dem Befehlkubectl edit
):kubectl --kubeconfig CLUSTER_KUBECONFIG edit configmap \ -n kube-system kubeadm-config
Nach der Bearbeitung sieht der Konfigurationsplan etwa so aus:
... ClusterStatus: | apiEndpoints: 7d7c21db88b3: advertiseAddress: 10.200.0.6 bindPort: 6444 357b68f4ecf0: advertiseAddress: 10.200.0.7 bindPort: 6444 apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterStatus ...
Wenn Sie die bearbeitete Konfigurationszuordnung speichern, wird der ausgefallene Knoten aus dem Cluster entfernt.