Infraestructura de Alta Disponibilidad y Orquestación de Contenedores con Kubernetes sobre Proxmox
En el escenario tecnológico actual, la administración de sistemas informáticos ha experimentado una transformación radical. Hemos pasado de gestionar servidores físicos individuales con aplicaciones monolíticas a orquestar ecosistemas complejos basados en microservicios y contenedores. Este cambio no es caprichoso; responde a la necesidad de las empresas de obtener una mayor agilidad, escalabilidad y, sobre todo, disponibilidad.
Este proyecto integrado nace en el marco del ciclo formativo de grado superior en Administración de Sistemas Informáticos en Red (ASIR). Se centra en la creación de una infraestructura on-premise profesional que utiliza la virtualización de alto rendimiento con Proxmox VE para sostener un clúster de Kubernetes (K8s). Esta combinación permite aprovechar el hardware local para ofrecer servicios con un nivel de resiliencia y automatización que, tradicionalmente, solo estaba al alcance de grandes centros de datos o proveedores de nube pública.
La motivación técnica de este trabajo surge de la identificación de problemas reales en las arquitecturas IT convencionales:
Para resolver esto, se propone una solución basada en la orquestación de contenedores. Kubernetes permite que, si un nodo falla, las aplicaciones se reprogramen automáticamente en otros nodos sanos, garantizando la continuidad del negocio. Además, la implementación de la Infraestructura como Código (IaC) mediante Ansible asegura que el crecimiento del sistema sea rápido, consistente y libre de errores humanos.
Diseñar, implementar y documentar una infraestructura virtualizada de alta disponibilidad capaz de orquestar servicios contenerizados mediante Kubernetes, garantizando la persistencia de datos y el balanceo de carga automático en una red local.
Para alcanzar el objetivo general, se han definido los siguientes hitos técnicos:
containerd como runtime de bajo nivel.systemd.El alcance del proyecto abarca desde el montaje del hardware y la configuración de la BIOS (activación de SVM/VT-x) hasta el despliegue de aplicaciones reales como WordPress o juegos estáticos (3 en Raya), pasando por toda la capa de red y almacenamiento.
La metodología de trabajo empleada ha sido Kanban, gestionada a través de GitHub Projects. Este enfoque ha permitido una visualización clara del flujo de trabajo, dividiendo la implementación en fases secuenciales que garantizan que cada componente (red, almacenamiento, orquestación) sea estable antes de avanzar al siguiente nivel.
El proyecto se sitúa en un entorno corporativo ficticio bajo la entidad “DevOps Solutions S.L.”, la cual enfrenta los retos típicos de las infraestructuras tradicionales basadas en servidores independientes. Los principales problemas detectados que justifican esta implementación son:
La solución propuesta es la migración a una arquitectura de microservicios orquestada por Kubernetes. Se elige esta tecnología por ser el estándar de facto en la industria, ofreciendo portabilidad y una gestión declarativa de los recursos.
La viabilidad técnica ha quedado demostrada tras la resolución exitosa de la fase de inicialización del clúster. El hardware utilizado (procesador Ryzen 7 con soporte SVM) permite ejecutar el stack propuesto con un rendimiento nativo. Se ha validado la compatibilidad de containerd como motor de ejecución (runtime) bajo la jerarquía de Cgroups de sistema en Ubuntu 24.04. Asimismo, la resolución de conflictos específicos de red (Netplan y DNS) asegura la estabilidad del plugin CNI Flannel.
El coste de adquisición de software para este proyecto es de 0€. Se ha apostado íntegramente por soluciones Open Source con licencias permisivas (GPL, Apache 2.0, MIT):
El proyecto se ha estructurado en 9 fases secuenciales. La resolución temprana de los problemas de red y kernel en las primeras etapas ha reducido significativamente el riesgo de retrasos en el despliegue de los servicios superiores como MetalLB, Ingress y persistencia NFS.
El sistema debe cumplir con las siguientes capacidades operativas:
Para asegurar la calidad del entorno profesional, se establecen los siguientes parámetros:
systemd como driver de Cgroup para una integración profunda con el kernel de Ubuntu 24.04.| Categoría | Tecnología / Herramienta |
|---|---|
| Hipervisor | Proxmox VE 9.x |
| Sistemas Operativos | Ubuntu Server 24.04 LTS |
| Orquestación y Runtime | Kubernetes v1.30, Containerd |
| Red y Balanceo | Flannel (CNI), MetalLB, Nginx Ingress |
| Almacenamiento | Servidor NFS (Network File System) |
| Automatización | Ansible (Infraestructura como Código) |
La arquitectura de este proyecto se ha diseñado bajo un enfoque modular de microservicios y alta disponibilidad. El sistema se organiza en cuatro niveles lógicos que interactúan entre sí, garantizando que el fallo en una capa superior no comprometa la integridad de los datos en las capas inferiores.

La base de la infraestructura es un servidor físico que ejecuta Proxmox VE. Se ha seleccionado esta plataforma frente a alternativas propietarias por su flexibilidad para gestionar máquinas virtuales (KVM) y su base sólida en Debian Linux.
Sobre el hipervisor se despliega un clúster de Kubernetes v1.30. El diseño contempla la separación de roles entre el plano de control (Control Plane) y el plano de datos (Worker Nodes).
Se ha diseñado una topología de red estática para evitar interrupciones por renovaciones de concesiones DHCP. Todas las máquinas virtuales utilizan Ubuntu Server 24.04 LTS como sistema operativo base.
| Nodo | Función | Recursos (vCPU/RAM) | IP Estática |
|---|---|---|---|
| k8s-master | Cerebro del clúster (API, etcd, Scheduler) | 2 vCPUs / 2 GB | 192.168.1.110 |
| k8s-worker-01 | Ejecución de Pods y servicios | 2 vCPUs / 2 GB | 192.168.1.111 |
| k8s-worker-02 | Redundancia de cargas de trabajo | 2 vCPUs / 2 GB | 192.168.1.112 |
| ansible-server | Gestión de Infraestructura como Código (IaC) | 1 vCPU / 1 GB | 192.168.1.115 |
| nfs-server | Almacenamiento persistente centralizado | 1 vCPU / 1 GB | 192.168.1.116 |
Nota sobre Alta Disponibilidad (HA): El diseño actual centra la HA en los nodos Worker. Debido a limitaciones de hardware, se utiliza un único nodo Master, aunque se reconoce que en entornos de producción crítica se requeriría un Control Plane redundante para eliminar el punto único de fallo en la gestión.
La comunicación entre los pods se realiza mediante el plugin Flannel, utilizando una red de overlay en el rango 10.244.0.0/16. Esto permite que cada contenedor tenga su propia IP interna, independientemente del nodo en el que resida.
El diseño soluciona la carencia de balanceadores nativos en entornos bare-metal mediante dos componentes clave:
strictARP: true para anunciar y asignar IPs reales de la red local (rango 192.168.1.200 - 192.168.1.250) a los servicios del clúster.hosts) hacia diferentes servicios internos utilizando una única IP externa.Para garantizar que los datos de aplicaciones como WordPress no se pierdan, se ha diseñado un sistema de almacenamiento desacoplado:
/srv/nfs/kubedata.NFS-Subdirectory-External-Provisioner. Este define una StorageClass que automatiza la creación de volúmenes (PV) y reclamos (PVC), eliminando la necesidad de intervención manual por cada nueva aplicación.El diseño incluye un servidor de Ansible que actúa como orquestador de la configuración. Mediante el uso de archivos de inventario (hosts.ini) y Playbooks, se asegura que cualquier nuevo nodo (como el Worker 03) se configure con los mismos parámetros de red, módulos del kernel (br_netfilter) y drivers de Cgroup que el resto del clúster.
La fase de implementación se ejecutó de forma secuencial, partiendo desde el aprovisionamiento del hardware físico hasta la automatización completa del clúster. Cada etapa fue validada antes de proceder a la siguiente para garantizar la estabilidad de la red y el almacenamiento.
La implementación comenzó con la instalación de Proxmox VE 9.x en el servidor físico. Un paso crítico documentado fue el ajuste de la BIOS, habilitando el SVM Mode para permitir que el procesador Ryzen 7 gestionara las instrucciones de virtualización de forma nativa, reduciendo drásticamente la sobrecarga de software.

Para optimizar el despliegue, se creó una máquina virtual “maestra” con Ubuntu Server 24.04 LTS. Esta plantilla incluía:

Una vez clonados los nodos (Master y Workers), se procedió a la configuración de red estática. Un reto técnico resuelto fue la transición en Netplan para Ubuntu 24.04, donde se descartó el parámetro gateway4 en favor de rutas explícitas (routes: to: default), evitando así pérdidas de conectividad externa tras la asignación de la IP fija.
Antes de inicializar Kubernetes, se realizaron ajustes profundos en el sistema operativo de cada nodo:
overlay y br_netfilter para permitir el puenteo de red entre pods.SystemdCgroup = true en el archivo config.toml. Esto asegura que el proceso kubelet y el sistema operativo utilicen el mismo controlador de recursos, evitando inestabilidades bajo carga.
La creación del clúster se realizó mediante kubeadm init. Se definió un CIDR específico para los pods (10.244.0.0/16) compatible con Flannel, el plugin CNI seleccionado por su ligereza.
Para la unión de los nodos Workers, se aplicó una “Lección Aprendida” crítica: la vinculación manual de la IP interna mediante el archivo /etc/default/kubelet con la flag --node-ip. Este ajuste fue necesario para evitar que Kubernetes seleccionara interfaces de red erróneas durante el proceso de arranque.

Con el clúster en estado Ready, se desplegó la infraestructura de acceso:
192.168.1.200 - 192.168.1.250 de la red física. Se ajustó el ConfigMap de kube-proxy para activar strictARP, requisito indispensable para que MetalLB anuncie las IPs correctamente mediante ARP.wordpress.asir.local.
Se implementó un servidor NFS dedicado (IP 192.168.1.116) con la directiva no_root_squash, permitiendo que Kubernetes gestionara permisos de archivos de forma remota.
La automatización se completó con el NFS Subdir External Provisioner, que crea dinámicamente carpetas en el servidor NFS para cada aplicación, garantizando que el almacenamiento sea elástico y desacoplado del ciclo de vida del contenedor.

La implementación culminó con la creación del entorno de Ansible. Se configuró el acceso SSH mediante llaves y se aplicó la directiva NOPASSWD en el archivo sudoers de la plantilla base.
ansible-vault para cifrar datos sensibles, como el token de unión al clúster (token_k8s.txt) y las credenciales de acceso, asegurando buenas prácticas de seguridad corporativa.
Con la infraestructura base operativa, se procedió a desplegar una aplicación de arquitectura Stateful. Se utilizó WordPress respaldado por una base de datos MySQL, conectando ambos servicios al servidor NFS para garantizar la persistencia de datos. Finalmente, se expuso la web al exterior mediante el Ingress Controller y se aplicaron Kubernetes Secrets para la gestión segura de contraseñas.

Esta fase tiene como objetivo validar que la infraestructura cumple con los requisitos de diseño. Se han realizado pruebas de despliegue, estrés y tolerancia a fallos para asegurar que el sistema es apto para un entorno de producción real.
Se han desplegado tres tipos de cargas de trabajo para testear diferentes protocolos y necesidades de almacenamiento:
Se desplegó un sitio de WordPress utilizando un Deployment para la aplicación y otro para la base de datos MySQL.
PersistentVolumeClaims (PVC) vinculados a la StorageClass de NFS.wordpress.asir.local en la IP 192.168.1.200.
Para probar la ligereza y el balanceo, se desplegó una web estática (HTML/CSS/JS).
El test definitivo de resiliencia consistió en la simulación de un fallo crítico de hardware.
NotReady del nodo. Inmediatamente, el Ingress Controller dejó de enviar tráfico a los pods de ese nodo.Se puso a prueba la capacidad de crecimiento del sistema utilizando el nuevo nodo añadido mediante Ansible (k8s-worker-03).
kubectl scale deployment apache-web --replicas=5 -n 3enRaya.
Se verificó que el NFS Subdir External Provisioner gestiona correctamente el almacenamiento físico en el servidor NFS (192.168.1.116).
/srv/nfs/kubedata/.3enraya-3enraya-pvc-pvc-xxxx) creadas automáticamente por el clúster.Tras la finalización del proyecto, se confirma el cumplimiento íntegro de los objetivos planteados en la fase de análisis. Se ha logrado desplegar una infraestructura on-premise profesional que integra virtualización de alto nivel con orquestación moderna de contenedores. El sistema es capaz de gestionar servicios web de forma balanceada y resiliente, eliminando los puntos únicos de fallo en la capa de aplicaciones.
La implementación ha demostrado que es posible construir un entorno de producción de alta fidelidad sin costes de licenciamiento mediante el uso estratégico de software Open Source.
El desarrollo de este proyecto ha supuesto un reto técnico significativo, especialmente en la resolución de problemas de red en entornos bare-metal virtualizados.
systemd, conocimientos altamente demandados en el mercado laboral actual de administración de sistemas.Aunque el núcleo de la infraestructura es estable y funcional, el diseño permite una evolución continua:
Este proyecto representa la culminación práctica de los conocimientos adquiridos en el ciclo de ASIR. No solo demuestra capacidad técnica en redes, seguridad y servidores, sino también una mentalidad orientada a la automatización y la resiliencia. La infraestructura resultante es una plataforma robusta, lista para sostener aplicaciones críticas en un entorno empresarial real, combinando el control del hardware local con la flexibilidad de la nube.
Proyecto Integrado de Grado Superior ASIR
© 2026 - jobopaK