Cuando un nodo está roto y se debe quitar de un clúster para su reparación o reemplazo, puedes forzar su eliminación del clúster.
Fuerza la eliminación de nodos trabajadores
En los clústeres de Anthos en equipos físicos, puedes agregar una anotación a fin de marcar un nodo para forzar la eliminación.
Después de quitar el nodo del grupo de nodos superior, ejecuta el siguiente comando para anotar la máquina con errores correspondiente con la anotación baremetal.cluster.gke.io/force-remove
. El valor de la anotación en sí no tiene importancia:
kubectl --kubeconfig ADMIN_KUBECONFIG -n CLUSTER_NAMESPACE \ annotate machine 10.200.0.8 baremetal.cluster.gke.io/force-remove=true
Los clústeres de Anthos de equipos físicos quitan el nodo correctamente.
Fuerza la eliminación de los nodos del plano de control
La eliminación automática de un nodo del plano de control es similar a realizar un kubeadm reset
en los nodos del plano de control, y requiere pasos adicionales.
Para forzar la eliminación del nodo del plano de control de los grupos de nodos, debes realizar las siguientes acciones en el clúster que contiene el nodo del plano de control con errores:
- Quita el miembro
etcd
con errores que se ejecuta en el nodo con errores del clústeretcd
- actualice el
ClusterStatus
en kube para quitar elapiEndpoint
correspondiente.
Quita un miembro etcd
con errores
Para quitar el nodo del plan de control con fallas, primero ejecuta etcdctl
en los Pods etcd
en buen estado restantes. Para obtener más información general sobre esta operación, consulta esta documentación de Kubernetes.
En el siguiente procedimiento, CLUSTER_KUBECONFIG es la ruta al archivo kubeconfig
del clúster.
Busca el Pod
etcd
con el siguiente comando:kubectl --kubeconfig CLUSTER_KUBECONFIG get \ pod -n kube-system -l component=etcd -o wide
El comando muestra la siguiente lista de nodos. Para este ejemplo, supongamos que el nodo 10.200.0.8 es inaccesible y no se puede recuperar:
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
Ejecuta uno de los Pods
etcd
en buen estado restantes:kubectl --kubeconfig CLUSTER_KUBECONFIG exec -it -n \ kube-system etcd-357b68f4ecf0 -- /bin/sh
Busca los miembros actuales para encontrar el ID del miembro con errores. El comando mostrará una lista:
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
Este comando muestra, por ejemplo, lo siguiente:
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
Quita el miembro que falla:
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
Actualiza ClusterStatus
y quita el apiEndpoint
con errores
En el siguiente procedimiento, CLUSTER_KUBECONFIG es la ruta al archivo kubeconfig
del clúster.
Busca la sección
ClusterStatus
dentro del mapa de configuraciónkubeadm-config
:kubectl --kubeconfig CLUSTER_KUBECONFIG describe configmap -n \ kube-system kubeadm-config
El comando muestra resultados similares a los que se muestran a continuación:
... 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 ...
Edita el mapa de configuración para quitar la sección que contiene la IP con errores (en este ejemplo, se muestran los resultados de la eliminación de
10.200.0.8
con el comandokubectl edit
):kubectl --kubeconfig CLUSTER_KUBECONFIG edit configmap \ -n kube-system kubeadm-config
Después de la edición, el mapa de configuración es similar al siguiente:
... 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 ...
Cuando guardas el mapa de configuración editado, el nodo que falla se quita del clúster.