Das Entfernen von defekten Knoten in Anthos-Cluster on Bare Metal erzwingen

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 Cluster etcd ausgeführt wird.
  • Aktualisieren Sie ClusterStatus in kube, um den entsprechenden apiEndpoint 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.

  1. 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
    

  2. Führen Sie einen der verbleibenden fehlerfreien etcd-Pods aus:

    kubectl --kubeconfig CLUSTER_KUBECONFIG exec -it -n \
    kube-system etcd-357b68f4ecf0 -- /bin/sh
    
  3. 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
    
  4. 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.

  1. Suchen Sie in der ConfigMap kubeadm-config den Abschnitt ClusterStatus:

    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
    ...
    
  2. 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 Befehl kubectl 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
    ...
    
  3. Wenn Sie die bearbeitete Konfigurationszuordnung speichern, wird der ausgefallene Knoten aus dem Cluster entfernt.