Saltar a contenido

Sacar o reemplazar un nodo

Retira un worker de K3s (distribución ligera de Kubernetes) y miembro de Incus: primero se vacía, después se quita de cada clúster y por último del inventario. Para reemplazar un equipo, saca el viejo con este procedimiento y agrega el nuevo con Agregar un nodo.

Nodos que no se sacan con este procedimiento

  • deborah es el control plane de K3s y el DNS (BIND): sacarlo apaga el clúster. Hay que reconstruirlo (ver el runbook de bootstrap).
  • invincible es el leader de Incus y aloja la UI (interfaz de usuario) de Incus: antes hay que mover esos roles a otro nodo.
  • Quorum de Incus: el clúster tiene 3 miembros. Con 2, sigue funcionando pero ya no tolera otra caída. Agrega el reemplazo pronto.

En los ejemplos, el nodo a sacar es nolan.

1. Vaciar el nodo en K3s

kubectl cordon nolan
kubectl drain nolan --ignore-daemonsets --delete-emptydir-data

Si el nodo aporta disco a Longhorn (node.longhorn.io/create-default-disk: "true"), en la UI de Longhorn: Node → nolan → Edit → desactiva Scheduling y marca Eviction Requested. Espera a que sus réplicas se muevan a otros nodos antes de seguir.

2. Vaciar el nodo en Incus

Desde cualquier nodo del clúster Incus:

sudo incus list --all-projects --format csv --columns nL | grep nolan   # instancias en nolan
sudo incus cluster evacuate nolan                                        # las mueve o detiene

3. Quitarlo de K3s

kubectl delete node nolan
cd ansible
ansible-playbook -i inventory.ini playbook-uninstall-k3s.yml --limit nolan

En un worker, el playbook solo quita el agent (nunca toca el control plane).

4. Quitarlo de Incus

Desde el leader (invincible):

ssh amaceo@192.168.20.6 sudo incus cluster remove nolan

5. Inventario y DNS

  1. Borra la línea del nodo en inventory.ini (grupo de arquitectura y k3s_agent) y su archivo host_vars/nolan.yml.
  2. Si estaba en reboot_schedule (group_vars/incus_cluster/k3s_install.yml), quítalo de ahí.
  3. Regenera el DNS para quitar nolan.mco.local:
ansible-playbook -i inventory.ini playbook-bind-dns.yml

Verificar

kubectl get nodes                          # nolan ya no aparece
ssh amaceo@192.168.20.6 sudo incus cluster list   # nolan ya no aparece
dig +short nolan.mco.local @192.168.20.5   # sin respuesta

En Longhorn, los volúmenes tienen que quedar Healthy (sin réplicas en nolan).

Si falla

Síntoma Revisar
drain se queda esperando Un pod con PodDisruptionBudget o sin controlador; revisa con kubectl get pods -A -o wide \| grep nolan
Volúmenes de Longhorn Degraded No esperaste la evacuación de réplicas (paso 1); vuelve a agregar el disco o espera a que Longhorn reconstruya
incus cluster remove se niega Quedan instancias en el nodo: repite incus cluster evacuate nolan
El nodo ya no enciende Salta los pasos que requieren conectarse a él y usa sudo incus cluster remove --force nolan