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 clusteretcd
- aggiorna il
ClusterStatus
nel kube per rimuovere ilapiEndpoint
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.
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
Attiva uno dei pod
etcd
in stato integro rimanenti:kubectl --kubeconfig CLUSTER_KUBECONFIG exec -it -n \ kube-system etcd-357b68f4ecf0 -- /bin/sh
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
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.
Cerca la sezione
ClusterStatus
nella mappa di configurazione dikubeadm-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 ...
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 comandokubectl 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 ...
Quando salvi la mappa di configurazione modificata, il nodo in errore viene rimosso dal cluster.