Skip to content

jobopaK/ProyectoIntegradoASIR

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

111 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Infraestructura de Alta Disponibilidad y Orquestación con Kubernetes sobre Proxmox

K8s Version Proxmox Ansible Ubuntu License


📖 1. Descripción del Proyecto

Este proyecto consiste en el diseño e implementación de una infraestructura virtualizada on-premise para el despliegue de servicios contenerizados. Se simula un entorno de producción real garantizando Alta Disponibilidad (HA), escalabilidad y gestión centralizada mediante un clúster de Kubernetes robusto.

Important

Puedes consultar más detalles en el:


🏗️ 2. Arquitectura

🌐 Infraestructura Física

  • Host: Servidor dedicado con Proxmox VE.
  • Gestión: Acceso remoto seguro vía Web/SSH.

🖥️ Topología Lógica (Máquinas Virtuales)

Icono Rol SO Función IP Estática
🛡️ K8s Control Plane Ubuntu Server Gestión del clúster (API, Etcd, Scheduler) 192.168.1.110
👷 K8s Worker 1 Ubuntu Server Ejecución de cargas de trabajo 192.168.1.111
👷 K8s Worker 2 Ubuntu Server Redundancia y HA 192.168.1.112
🤖 Servidor Ansible Ubuntu Server Automatización y aprovisionamiento (IaC) 192.168.1.115
💾 Servidor NFS Ubuntu Server Almacenamiento persistente (PV/PVC) 192.168.1.116
💻 Cliente Linux Desktop Pruebas de usuario final y validación de red DHCP

📚 3. Documentación y Guías de Despliegue

Se han elaborado manuales técnicos detallados para replicar la infraestructura paso a paso:

Tip

Se recomienda seguir las guías en orden secuencial para garantizar la correcta visibilidad de red entre los componentes del clúster.


🛠️ 4. Stack Tecnológico

  • Orquestación: Kubernetes v1.30 ☸️
  • Runtime: containerd 📦
  • Red (CNI): Flannel 🕸️
  • Red y Balanceo:
    • MetalLB: Load Balancer Bare-Metal (Capa 2).
    • Ingress Controller: Nginx (Gestión de tráfico HTTP/S).
  • Almacenamiento: NFS (Persistent Volumes) 💾
  • Automatización: Ansible 🤖
  • Control de Versiones: Git + GitHub 🐙

🗺️ 5. Hoja de Ruta (Roadmap)

  • 📐 Definición de arquitectura y análisis de viabilidad.
  • 📁 Estructura del repositorio y documentación base.
  • 🌐 Instalación y optimización de Proxmox VE.
  • 🖥️ Despliegue de VMs y configuración de red estática.
  • 🛡️ Inicialización del Clúster Kubernetes (Control Plane).
  • 👷 Unión de nodos Worker y configuración de CNI (Flannel).
  • ⚖️ Implementación de MetalLB e Ingress Controller (Nginx).
  • 💾 Configuración de Servidor NFS y Aprovisionamiento Dinámico.
  • 🤖 Automatización completa con Ansible (IaC).
  • 🚀 Despliegue de App con persistencia.
  • 🛡️ Pruebas de Alta Disponibilidad (Fallo de Nodos).
  • 📊 Monitorización con Prometheus y Grafana (Opcional).

🔧 6. Notas de Implementación y Troubleshooting

Durante el despliegue se resolvieron retos técnicos críticos documentados para futuras referencias:

Caution

Gestión de Red: Desactivación obligatoria de IPv6 a nivel de kernel para evitar conflictos en el Control Plane.

  • Configuración del Runtime: Ajuste del driver de Cgroup a systemd en containerd para asegurar la estabilidad del proceso kubelet.
  • Vinculación de IP: Uso estricto de la flag --node-ip en la configuración de kubelet para forzar la interfaz IPv4 correcta sobre el hardware virtualizado.
  • Conectividad Externa (Netplan): Se detectó que los nodos perdían conectividad con internet al configurar IPs estáticas. Se corrigió definiendo explícitamente la ruta por defecto (routes: to: default via 192.168.1.1) en lugar del parámetro obsoleto gateway4.
  • Identidad de Nodo (Kubelet): Para evitar que el clúster usara interfaces erróneas, se forzó la vinculación de IP mediante la creación del archivo /etc/default/kubelet con el parámetro KUBELET_EXTRA_ARGS="--node-ip=<IP_ESTATICA>".
  • Módulos del Kernel (Networking): El plugin de red Flannel entraba en CrashLoopBackOff por la ausencia del módulo br_netfilter. Se solucionó cargando el módulo manualmente y asegurando su persistencia en /etc/modules-load.d/k8s.conf.
  • Persistencia de Red (CNI): Resolución de errores NetworkPluginNotReady mediante la limpieza manual de interfaces residuales (cni0, flannel.1) y el reinicio de containerd.
  • Balanceo de Carga (MetalLB): Modificación del ConfigMap de kube-proxy para activar strictARP: true, requisito indispensable para el correcto enrutamiento en Capa 2.
  • Liberación de IPs (MetalLB/Ingress): Precaución al eliminar despliegues de prueba (LoadBalancer) para asegurar que MetalLB devuelva la IP externa (192.168.1.200) al pool, dejándola disponible para el controlador Ingress.

Proyecto Integrado de Grado Superior ASIR
© 2026 - jobopaK

About

Infraestructura de Alta Disponibilidad y Orquestación con Kubernetes sobre Proxmox con Ansible

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors