# 🏗️ Arquitectura del clúster K3s Este documento describe la arquitectura del clúster Kubernetes desplegado con K3s, su distribución de roles, y los componentes principales. --- ## 🧱 Nodos y roles ### 🖥️ tartaro (192.168.1.7) - Rol: Control plane principal - Prioridad Keepalived: MASTER - Ejecuta: - K3s (cluster-init) - Ingress Controller - cert-manager - Gitea - Argo CD - App of Apps - Guacamole - KubeVirt Operator - VS Code Server - Servicios principales del clúster --- ### 🖥️ styx (192.168.1.8) - Rol: Segundo nodo control plane - Prioridad Keepalived: BACKUP - Ejecuta: - K3s (join al control plane) - Ingress Controller (DaemonSet) - Réplicas de servicios distribuidos - Nodo tolerante a caída del master --- ### 🖥️ niflheim (192.168.1.10) - Rol: Nodo dedicado a almacenamiento y tareas pesadas - Taint: `storage=only:NoSchedule` - Ejecuta: - K3s (con taint para evitar pods no relacionados) - ZFS + NFS server - NFS client provisioner - Volúmenes persistentes para el resto del clúster - ISO server (para KubeVirt) - Posibles futuras tareas de backup, observabilidad, etc. --- ## 🔁 Alta disponibilidad Se implementa con: - **Bonding de red**: Interfaz `bond0` en todos los nodos. - **IP virtual (192.168.1.9)** gestionada por `keepalived`. - Redirección de puertos 80/443 desde el router a esta IP. - Ingress Controller desplegado como `DaemonSet` para disponibilidad inmediata en todos los nodos. --- ## 🧱 Almacenamiento - **Backend principal**: ZFS pool `k8spool/k8s` montado en `/mnt/storage/k8s` (en niflheim). - **NFS server** exporta este almacenamiento a todos los nodos. - **nfs-subdir-external-provisioner** permite provisión dinámica de volúmenes desde Kubernetes. --- ## 🔐 TLS e Ingress - **cert-manager** gestiona certificados con Let's Encrypt. - **Ingress-NGINX** funciona como controlador de entrada. - TLS completamente automatizado. - Ingress de cada aplicación define el hostname correspondiente. --- ## 🌀 GitOps - **Gitea** aloja todos los manifiestos como repositorios individuales. - **Argo CD** sincroniza automáticamente los repositorios con el clúster. - **App of Apps** en `k8s-master` gestiona la orquestación general. --- ## 🖥️ Virtualización - **KubeVirt** permite ejecutar VMs dentro de Kubernetes. - **CDI (Containerized Data Importer)** permite importar imágenes ISO. - **ISO Server** expone imágenes desde NFS o HTTP. - **Guacamole** permite acceso remoto vía navegador a VMs (VNC, RDP, SSH). --- ## 🔧 Herramientas de soporte - **VS Code Server** accesible por navegador para edición remota en el clúster. - **Scripts auxiliares** en la carpeta `docs/` para gestión de repositorios. --- ## 🧪 Recomendaciones - Etiquetar nodos con `kubectl label node =` - Usar `taints` para separar roles claramente - Separar StorageClass por aplicación si se desea control granular - Automatizar despliegue con Argo CD y sincronización automática ---