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
deborahes el control plane de K3s y el DNS (BIND): sacarlo apaga el clúster. Hay que reconstruirlo (ver el runbook de bootstrap).invinciblees 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¶
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). El ssh entra con el acceso por SSO (opkssh login antes):
5. Inventario y DNS¶
- Borra la línea del nodo en
inventory.ini(grupo de arquitectura yk3s_agent) y su archivohost_vars/nolan.yml. - Si estaba en
reboot_schedule(group_vars/incus_cluster/k3s_install.yml), quítalo de ahí. - Regenera el DNS para quitar
nolan.mco.local:
Verificar¶
kubectl get nodes # nolan ya no aparece
ssh devops@invincible.homelab.local 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 |