Lorsqu'un nœud est endommagé et doit être supprimé d'un cluster pour être réparé ou remplacé, vous pouvez forcer sa suppression du cluster.
Forcer la suppression des nœuds de calcul
Dans les clusters Anthos sur Bare Metal, vous pouvez ajouter une annotation pour marquer un nœud en vue de la suppression forcée.
Après avoir supprimé le nœud du pool de nœuds parent, exécutez la commande suivante pour annoter la machine défaillante correspondante avec l'annotation baremetal.cluster.gke.io/force-remove
. La valeur de l'annotation elle-même n'a pas d'importance.
kubectl --kubeconfig ADMIN_KUBECONFIG -n CLUSTER_NAMESPACE \ annotate machine 10.200.0.8 baremetal.cluster.gke.io/force-remove=true
Les clusters Anthos sur Bare Metal suppriment le nœud avec succès.
Forcer la suppression des nœuds du plan de contrôle
Forcer la suppression d'un nœud du plan de contrôle est semblable à une opération kubeadm reset
sur les nœuds du plan de contrôle et nécessite des étapes supplémentaires.
Pour forcer la suppression d'un nœud du plan de contrôle des pools de nœuds, vous devez effectuer les actions suivantes sur le cluster contenant le nœud du plan de contrôle défaillant :
- Supprimer le membre
etcd
défaillant s'exécutant sur le nœud défaillant du clusteretcd
- Mettre à jour
ClusterStatus
dans le kube pour supprimer l'objetapiEndpoint
correspondant.
Supprimer un membre etcd
défaillant
Pour supprimer le nœud du plan de contrôle défaillant, exécutez d'abord etcdctl
sur les pods etcd
opérationnels restants. Pour en savoir plus sur cette opération, consultez la documentation Kubernetes.
Dans la procédure suivante, CLUSTER_KUBECONFIG est le chemin d'accès au fichier kubeconfig
du cluster.
Recherchez le pod
etcd
à l'aide de la commande suivante :kubectl --kubeconfig CLUSTER_KUBECONFIG get \ pod -n kube-system -l component=etcd -o wide
La commande renvoie la liste de nœuds suivante. Pour cet exemple, supposons que le nœud 10.200.0.8 soit inaccessible et irrécupérable :
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
Exec sur l'un des pods
etcd
opérationnels restants :kubectl --kubeconfig CLUSTER_KUBECONFIG exec -it -n \ kube-system etcd-357b68f4ecf0 -- /bin/sh
Recherchez les membres actuels pour trouver l'ID du membre défaillant. La commande renvoie une liste :
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
Cette commande renvoie, par exemple, les données suivantes :
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
Supprimez le membre défaillant :
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
Mettre à jour ClusterStatus
et supprimer l'apiEndpoint
défaillant
Dans la procédure suivante, CLUSTER_KUBECONFIG est le chemin d'accès au fichier kubeconfig
du cluster.
Recherchez la section
ClusterStatus
dans le ConfigMapkubeadm-config
:kubectl --kubeconfig CLUSTER_KUBECONFIG describe configmap -n \ kube-system kubeadm-config
La commande renvoie des résultats semblables à ceux ci-dessous :
... 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 ...
Modifiez le ConfigMap pour supprimer la section contenant l'adresse IP défaillante (cet exemple montre les résultats de la suppression de
10.200.0.8
à l'aide de la commandekubectl edit
) :kubectl --kubeconfig CLUSTER_KUBECONFIG edit configmap \ -n kube-system kubeadm-config
Une fois la modification effectuée, le ConfigMap ressemble à ceci :
... 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 ...
Lorsque vous enregistrez le ConfigMap modifié, le nœud défaillant est supprimé du cluster.