Forcer la suppression des nœuds endommagés dans les clusters Anthos sur Bare Metal

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 cluster etcd
  • Mettre à jour ClusterStatus dans le kube pour supprimer l'objet apiEndpoint 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.

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

  2. Exec sur l'un des pods etcd opérationnels restants :

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

  1. Recherchez la section ClusterStatus dans le ConfigMap kubeadm-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
    ...
    
  2. 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 commande kubectl 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
    ...
    
  3. Lorsque vous enregistrez le ConfigMap modifié, le nœud défaillant est supprimé du cluster.