#!/bin/bash # Script para instalar un nodo worker de Kubernetes en Oracle Linux 9.4 (ol9.4) # Salir inmediatamente si ocurre un error #set -e # Funciones para mostrar mensajes echo_info() { echo -e "\e[32m[INFO]\e[0m $1" } echo_error() { echo -e "\e[31m[ERROR]\e[0m $1" >&2 } # Archivo donde se guardará el join command JOIN_CMD_FILE="/etc/kubernetes/join_command.sh" # Obtener el usuario que ejecuta el script ORIGINAL_USER="${SUDO_USER:-$(whoami)}" USER_HOME=$(getent passwd "$ORIGINAL_USER" | cut -d: -f6) # Verificar si el script se ejecuta con 'post-reboot' if [ "$1" == "post-reboot" ]; then echo_info "=== Ejecutando pasos post-reinicio para unir el nodo al clúster de Kubernetes ===" if [ ! -f "$JOIN_CMD_FILE" ]; then echo_error "No se encontró el archivo del comando de unión ($JOIN_CMD_FILE). Asegúrate de haber ejecutado el script correctamente antes del reinicio." exit 1 fi JOIN_COMMAND=$(cat "$JOIN_CMD_FILE") if [ -z "$JOIN_COMMAND" ]; then echo_error "El comando de unión está vacío. Verifica el contenido de $JOIN_CMD_FILE." exit 1 fi echo_info "Uniéndose al clúster de Kubernetes usando el comando de unión..." eval "$JOIN_COMMAND" echo_info "Verificando el estado del nodo..." sudo -u "$ORIGINAL_USER" kubectl get nodes echo_info "Eliminando el archivo del comando de unión ($JOIN_CMD_FILE)..." sudo rm -f "$JOIN_CMD_FILE" echo_info "Proceso de unión al clúster completado." exit 0 fi # Verificar si se proporcionó el comando de unión o si es post-reboot if [ "$#" -ne 1 ]; then echo_error "Debes proporcionar el comando de unión generado por el nodo master o usar 'post-reboot' después del reinicio." echo "Ejemplo de uso:" echo " sudo ./install_worker.sh '' # Antes del reinicio" echo " sudo ./install_worker.sh post-reboot # Después del reinicio" exit 1 fi # Si el primer argumento no es 'post-reboot', asume que es el join command JOIN_COMMAND="$1" # Validar el formato básico del join command if [[ ! "$JOIN_COMMAND" =~ ^kubeadm\ join ]]; then echo_error "El comando proporcionado no parece ser un comando válido de 'kubeadm join'." exit 1 fi # Guardar el join command en un archivo para usar después del reinicio echo_info "Guardando el comando de unión en $JOIN_CMD_FILE..." echo "$JOIN_COMMAND" | sudo tee "$JOIN_CMD_FILE" > /dev/null # Actualizar el sistema echo_info "Actualizando el sistema..." sudo yum update -y || sudo dnf update -y # Instalar herramientas necesarias echo_info "Instalando herramientas necesarias..." sudo yum install -y wget vim git curl || sudo dnf install -y wget vim git curl # Desactivar swap echo_info "Desactivando swap..." sudo swapoff -a echo_info "Eliminando swap del archivo /etc/fstab..." sudo sed -i '/swap/d' /etc/fstab # Configurar módulos y sysctl para Kubernetes echo_info "Configurando módulos para Kubernetes..." cat <