3.0 KiB
3.0 KiB
🏗️ 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 <node> <key>=<value>
- 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