Files
kubernetes/script_limpieza.md
2025-08-03 12:28:55 +02:00

3.4 KiB

Manual: Reinicio completo (modo nuclear) de un nodo Kubernetes

Este script permite realizar un reseteo completo de un nodo Kubernetes, eliminando su configuración, interfaces de red sobrantes, y preparándolo para un kubeadm join limpio. Es útil cuando el nodo ha quedado en estado inconsistente o se desea reutilizar desde cero.


Contenido del script reset_nodo.sh

#!/bin/bash

echo "=============================="
echo " K8s HARD RESET (modo nuclear)"
echo "=============================="

# Obtener nombre del nodo
NODENAME=$(hostname)
echo "Nodo detectado: $NODENAME"

# Eliminar nodo del clúster
echo "1. Eliminando el nodo del clúster..."
kubectl delete node "$NODENAME" || echo "⚠️ No se pudo eliminar el nodo. ¿Está desconectado del clúster?"

# Guardar kubeconfig local si no existe
if [ ! -f "$HOME/.kube/config" ]; then
  echo "2. Guardando credenciales kubeconfig en ~/.kube/config..."
  mkdir -p "$HOME/.kube"
  sudo cp /etc/kubernetes/admin.conf "$HOME/.kube/config" 2>/dev/null || echo "⚠️ No se pudo copiar kubeconfig (¿es un nodo worker?)"
  sudo chown "$(id -u):$(id -g)" "$HOME/.kube/config"
fi

# Reset kubeadm
echo "3. Ejecutando kubeadm reset..."
sudo kubeadm reset -f

# Parar servicios
echo "4. Parando servicios kubelet y containerd..."
sudo systemctl stop kubelet
sudo systemctl stop containerd

# Limpiar configuraciones
echo "5. Borrando configuraciones CNI, kubelet, pods y logs..."
sudo rm -rf /etc/cni/net.d/*
sudo rm -rf /var/lib/cni/
sudo rm -rf /run/flannel/*
sudo rm -rf /run/docker/netns/*
sudo rm -rf /var/lib/kubelet/*
sudo rm -rf /etc/kubernetes/*
sudo rm -rf /var/log/pods/*
sudo rm -rf /var/log/containers/*

# Borrar interfaces sobrantes
echo "6. Eliminando interfaces virtuales (ignora errores si no existen)..."
sudo ip link delete flannel.1 2>/dev/null
sudo ip link delete cni0 2>/dev/null
sudo ip link delete docker0 2>/dev/null

# Reiniciar servicios
echo "7. Reiniciando containerd y kubelet..."
sudo systemctl restart containerd
sudo systemctl restart kubelet

# Preguntar si desea reiniciar
echo "======================================"
read -p "¿Deseas reiniciar el nodo ahora? [s/N]: " confirm
if [[ "$confirm" =~ ^[Ss]$ ]]; then
  echo "Reiniciando..."
  sudo reboot
else
  echo "No se reiniciará. Ejecútalo manualmente cuando estés listo."
  echo "    sudo reboot"
fi
echo "======================================"
echo "        RESET COMPLETADO              "
echo "======================================"

Cómo usar el script

1. Guardar el archivo:

Guarda el contenido anterior en un archivo llamado reset_nodo.sh

nano reset_nodo.sh

2. Dar permisos de ejecución:

chmod +x reset_nodo.sh

3. Ejecutar el script:

./reset_nodo.sh

Asegúrate de tener permisos sudo, ya que muchos comandos requieren privilegios de root.

4. Reinicio (opcional):

El script preguntará al final si deseas reiniciar el nodo. Se recomienda decir que sí (s) para garantizar una limpieza total.


⚠️ Advertencia

Este script elimina todos los datos y configuraciones de Kubernetes y CNI del nodo. Asegúrate de:

  • Eliminar el nodo primero del clúster (kubectl delete node) o dejar que el script lo haga.
  • Tener backup de cualquier dato o log importante.

Ideal para casos de limpieza completa o reinstalación. No recomendado si solo necesitas reintegrar un nodo sano. En ese caso, usa kubeadm reset y kubeadm join directamente.