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 Worker-Knoten erzwingen
In Anthos-Clustern auf Bare-Metal können Sie eine Annotation 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.