Para escalar el clúster de forma eficiente, hemos implementado Infraestructura como Código (IaC) mediante Ansible. Esto nos permite gestionar la configuración de todos los nodos de forma simultánea y centralizada desde un único “Nodo de Control”, garantizando la idempotencia en todo el entorno.
El servidor de control es el cerebro de la automatización. Para su despliegue, hemos clonado la plantilla base de Ubuntu 24.04 creada anteriormente en Proxmox.
Pasos en Proxmox:
ubuntu-2404-template -> Clone (Full Clone).Identidad: Nombre de VM: ansible-server |
VM ID: 115. |
192.168.1.115 mediante Netplan.| Parámetro | Valor Real | |
|---|---|---|
| Hostname | ansible-server |
|
| IP Estática | 192.168.1.115 |
|
| Máscara / Gateway | /24 |
192.168.1.1 |
| Recursos | 1 Core / 1 GB RAM / 40 GB Disco |
Instalación del motor de automatización:
sudo apt update && sudo apt install ansible -y
Ansible se conecta a los nodos mediante SSH. Para que el proceso sea automático, el servidor debe poder entrar en los nodos sin pedir contraseña en cada ejecución.
1. Generar par de llaves en ansible-server:
ssh-keygen -t rsa -b 4096
# Pulsar ENTER en todas las opciones (dejar la "passphrase" vacía)
2. Copiar la llave pública a todos los nodos: Es fundamental documentar que, al ejecutar estos comandos por primera vez, el sistema pedirá confirmar la autenticidad del nodo escribiendo yes y luego la contraseña del usuario asir de forma manual:
ssh-copy-id asir@192.168.1.110 # Nodo Master
ssh-copy-id asir@192.168.1.111 # Nodo Worker 01
ssh-copy-id asir@192.168.1.112 # Nodo Worker 02
ssh-copy-id asir@192.168.1.116 # Nodo Servidor NFS
[!TIP] Una vez completado, puedes verificar el acceso con
ssh asir@192.168.1.110. Si entras directamente al terminal del nodo sin que te pida contraseña, el intercambio ha sido exitoso.
Para mantener un estándar profesional, el proyecto se organiza en subcarpetas específicas. Esto facilita el crecimiento del clúster y la gestión de diferentes configuraciones.
Recomendado para entender la lógica de grupos en Ansible.
mkdir -p ~/ansible/inventory ~/ansible/playbooks ~/ansible/roles
cd ~/ansible/inventory
nano hosts.ini
Contenido del archivo hosts.ini:
[master]
k8s-master ansible_host=192.168.1.110
[workers]
k8s-worker-01 ansible_host=192.168.1.111
k8s-worker-02 ansible_host=192.168.1.112
[nfs]
nfs-server ansible_host=192.168.1.116
[k8s_cluster:children]
master
workers
Ideal para replicar el entorno exactamente como está en el repositorio de GitHub.
# 1. Crear carpetas base
mkdir -p ~/ansible/inventory ~/ansible/playbooks
# 2. Descargar archivos reales
wget -O ~/ansible/inventory/hosts.ini https://raw.githubusercontent.com/jobopaK/ProyectoIntegradoASIR/main/ansible/inventory/hosts.ini
wget -O ~/ansible/playbooks/pre-requisitos.yml https://raw.githubusercontent.com/jobopaK/ProyectoIntegradoASIR/main/ansible/playbooks/pre-requisitos.yml
Al ejecutar tareas de administración (como instalar paquetes), Ansible requiere privilegios de root mediante el uso de become: yes. Por defecto, Ubuntu solicita la contraseña de usuario para cada acción de sudo, lo que detiene la automatización con el error Missing sudo password.
Solución Implementada:
Para lograr una automatización fluida, hemos configurado los nodos para que el usuario asir pueda ejecutar comandos administrativos sin necesidad de introducir la contraseña.
Comando aplicado en cada nodo:
echo "asir ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/asir
[!IMPORTANT] Decisión de Diseño: Esta configuración se ha aplicado directamente en la Plantilla Base de Proxmox. De esta forma, cualquier nodo futuro (como un posible Worker-03) nacerá ya preparado para ser gestionado por Ansible de forma 100% automática, eliminando la intervención manual en el escalado del clúster.
Con la confianza SSH establecida y los privilegios de sudo configurados, procedemos a realizar las pruebas finales de control.
Primero, validamos que el servidor de control puede comunicarse con todos los nodos del inventario y ejecutar Python en ellos:
cd ~/ansible
ansible all -i inventory/hosts.ini -m ping

[!NOTE] Si el resultado muestra SUCCESS en verde para todos los nodos, significa que la infraestructura está lista para ser gestionada por código.
Lanzamos el script pre-requisitos.yml para automatizar la instalación de componentes esenciales (cliente NFS y módulos del kernel) en todo el clúster de forma simultánea:
ansible-playbook -i inventory/hosts.ini playbooks/pre-requisitos.yml

Análisis de los resultados:
Siguiente Paso: Fase 8: Despliegue de Aplicación Real
Proyecto Integrado de Grado Superior ASIR
© 2026 - jobopaK