Forzare la rimozione dei nodi danneggiati nei cluster Anthos su Bare Metal

Quando un nodo si rompe e deve essere rimosso da un cluster per la riparazione o la sostituzione, puoi forzarne la rimozione dal cluster.

Forzare la rimozione dei nodi worker

Nei cluster Anthos su Bare Metal, puoi aggiungere un'annotazione per contrassegnare un nodo per la rimozione forzata.

Dopo aver rimosso il nodo dal pool di nodi padre, esegui il comando seguente per annotare la macchina in errore corrispondente con l'annotazione baremetal.cluster.gke.io/force-remove. Il valore dell'annotazione stessa non è importante:

kubectl --kubeconfig ADMIN_KUBECONFIG -n CLUSTER_NAMESPACE \
  annotate machine 10.200.0.8 baremetal.cluster.gke.io/force-remove=true

I cluster Anthos su Bare Metal rimuovono correttamente il nodo.

Rimozione forzata dei nodi del piano di controllo

La rimozione forzata di un nodo del piano di controllo è simile all'esecuzione di un kubeadm reset sui nodi del piano di controllo e richiede passaggi aggiuntivi.

Per forzare la rimozione di un nodo del piano di controllo dai pool di nodi, devi eseguire le seguenti azioni nei confronti del cluster che contiene il nodo del piano di controllo non riuscito:

  • rimuovi il membro etcd in errore sul nodo in errore dal cluster etcd
  • aggiorna il ClusterStatus nel kube per rimuovere il apiEndpoint corrispondente.

Rimozione di un membro con errori etcd

Per rimuovere il nodo del piano di controllo in errore, esegui prima l'elemento etcdctl sui pod etcd rimanenti in stato integro. Per informazioni più generali su questa operazione, consulta questa documentazione di Kubernetes.

Nella procedura seguente, CLUSTER_KUBECONFIG è il percorso del file kubeconfig del cluster.

  1. Cerca il pod etcd con il comando seguente:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get \
     pod -n kube-system -l component=etcd -o wide
    

    Il comando restituisce il seguente elenco di nodi. Per questo esempio, supponiamo che il nodo 10.200.0.8 sia inaccessibile e non recuperabile:

    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. Attiva uno dei pod etcd in stato integro rimanenti:

    kubectl --kubeconfig CLUSTER_KUBECONFIG exec -it -n \
    kube-system etcd-357b68f4ecf0 -- /bin/sh
    
  3. Cerca gli attuali membri per trovare l'ID del membro in errore. Il comando restituisce un elenco:

    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
    

    Questo comando restituisce, ad esempio:

    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. Rimuovi il membro in errore:

    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
    

Aggiornamento di ClusterStatus e rimozione di apiEndpoint non riuscito

Nella procedura seguente, CLUSTER_KUBECONFIG è il percorso del file kubeconfig del cluster.

  1. Cerca la sezione ClusterStatus nella mappa di configurazione di kubeadm-config:

    kubectl --kubeconfig CLUSTER_KUBECONFIG describe configmap -n \
    kube-system kubeadm-config
    

    Il comando restituisce risultati simili a quelli mostrati di seguito:

    ...
    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. Modifica la mappa di configurazione per rimuovere la sezione che contiene l'IP in errore (questo esempio mostra i risultati della rimozione di 10.200.0.8 utilizzando il comando kubectl edit):

    kubectl --kubeconfig CLUSTER_KUBECONFIG edit configmap \
    -n kube-system kubeadm-config
    

    Dopo la modifica, la mappa di configurazione è simile alla seguente:

    ...
    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. Quando salvi la mappa di configurazione modificata, il nodo in errore viene rimosso dal cluster.