187 lines
6.0 KiB
Bash
Executable File
187 lines
6.0 KiB
Bash
Executable File
#!/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 '<join-command>' # 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 <<EOF | sudo tee /etc/modules-load.d/k8s.conf
|
|
overlay
|
|
br_netfilter
|
|
EOF
|
|
|
|
echo_info "Configurando parámetros de sysctl para Kubernetes..."
|
|
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
|
|
net.bridge.bridge-nf-call-ip6tables = 1
|
|
net.bridge.bridge-nf-call-iptables = 1
|
|
net.ipv4.ip_forward = 1
|
|
EOF
|
|
|
|
echo_info "Aplicando configuraciones de sysctl..."
|
|
sudo sysctl --system
|
|
|
|
# Instalar containerd
|
|
echo_info "Añadiendo repositorio de Docker..."
|
|
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
|
|
|
|
echo_info "Instalando containerd.io..."
|
|
sudo dnf install -y containerd.io
|
|
|
|
echo_info "Habilitando y arrancando containerd..."
|
|
sudo systemctl enable containerd --now
|
|
|
|
# Configurar repositorio de Kubernetes
|
|
echo_info "Configurando repositorio de Kubernetes..."
|
|
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
|
|
[kubernetes]
|
|
name=Kubernetes
|
|
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
|
|
enabled=1
|
|
gpgcheck=1
|
|
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
|
|
EOF
|
|
|
|
# Actualizar repositorios
|
|
echo_info "Actualizando repositorios de Kubernetes..."
|
|
sudo yum update -y || sudo dnf update -y
|
|
|
|
# Instalar kubelet, kubeadm y kubectl
|
|
echo_info "Instalando kubelet, kubeadm y kubectl..."
|
|
sudo dnf install -y kubelet kubeadm kubectl
|
|
|
|
echo_info "Habilitando y arrancando kubelet..."
|
|
sudo systemctl enable kubelet --now
|
|
|
|
# Cargar módulo br_netfilter
|
|
echo_info "Cargando módulo br_netfilter..."
|
|
sudo modprobe br_netfilter
|
|
|
|
echo_info "Verificando que br_netfilter esté cargado..."
|
|
lsmod | grep br_netfilter || { echo_error "br_netfilter no está cargado"; exit 1; }
|
|
|
|
# Asegurar que br_netfilter se cargue al inicio
|
|
echo_info "Asegurando que br_netfilter se cargue al inicio..."
|
|
echo "br_netfilter" | sudo tee /etc/modules-load.d/k8s.conf
|
|
|
|
# Configurar sysctl nuevamente por si hubo cambios
|
|
echo_info "Configurando sysctl para Kubernetes..."
|
|
sudo tee /etc/sysctl.d/k8s.conf <<EOF
|
|
net.bridge.bridge-nf-call-iptables = 1
|
|
net.bridge.bridge-nf-call-ip6tables = 1
|
|
net.ipv4.ip_forward = 1
|
|
EOF
|
|
|
|
echo_info "Aplicando configuraciones de sysctl..."
|
|
sudo sysctl --system
|
|
|
|
# Deshabilitar SELinux
|
|
echo_info "Deshabilitando SELinux..."
|
|
sudo setenforce 0
|
|
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
|
|
|
|
# Configurar containerd
|
|
echo_info "Generando configuración por defecto de containerd..."
|
|
sudo containerd config default | sudo tee /etc/containerd/config.toml
|
|
|
|
echo_info "Configurando SystemdCgroup en containerd..."
|
|
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
|
|
|
|
echo_info "Reiniciando containerd para aplicar cambios..."
|
|
sudo systemctl restart containerd
|
|
|
|
# Mensaje antes del reinicio
|
|
echo_info "Todos los pasos iniciales han sido completados."
|
|
echo_info "El sistema se reiniciará ahora para aplicar todas las configuraciones."
|
|
echo_info "Después del reinicio, debes ejecutar este script nuevamente con el parámetro 'post-reboot' para unir el nodo al clúster."
|
|
echo_info "Presiona Enter para continuar y reiniciar el sistema..."
|
|
read -p ""
|
|
|
|
# Reboot del sistema para aplicar todos los cambios
|
|
echo_info "Reiniciando el sistema para aplicar todas las configuraciones..."
|
|
sudo reboot
|
|
|