4.0 KiB
4.0 KiB
🏋️ Arquitectura del clúster K3s
Este documento describe la arquitectura actualizada del clúster Kubernetes desplegado con K3s, su distribución de roles, componentes principales, topología de red y almacenamiento.
🧱 Nodos y roles
💻 tartaro (Admin: 192.168.1.11 / Storage: 192.168.3.1 / Internode: 192.168.4.1)
- 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 (Admin: 192.168.1.12 / Storage: 192.168.3.2 / Internode: 192.168.4.2)
- 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 (Admin: 192.168.1.13 / Storage: 192.168.3.3 / Internode: 192.168.4.3)
- Rol: Nodo dedicado a almacenamiento y servicios de infraestructura
- Taint:
storage=only:NoSchedule
- Ejecuta:
- K3s (con taint para evitar pods no relacionados)
- ZFS + NFS Server
- NFS Client Provisioner
- ISO Server para KubeVirt
- Volúmenes persistentes para todo el clúster
📡 Red y VLANs
Separación de tráfico mediante bonding de interfaces (bond0
) y VLANs:
Red | VLAN | Uso |
---|---|---|
Administración | 1 (untagged) | Acceso de gestión y explotación de servicios |
Almacenamiento | 30 | Tráfico dedicado a NFS y persistencia |
Internodo | 40 | Comunicación interna de Kubernetes (control plane y pods) |
Esto permite un mejor aislamiento, rendimiento y facilita la futura expansión multi-sede.
🔀 Alta disponibilidad
- Bonding de red en todos los nodos
- IP virtual 192.168.1.10 gestionada por
keepalived
para el control plane - Redirección de puertos 80/443 a la IP flotante
- Ingress Controller como DaemonSet desplegado en todos los nodos
🧱 Almacenamiento
- Backend principal: Pool ZFS
k8spool/k8s
en Niflheim - NFS Server: Exporta
/mnt/storage/k8s
al clúster - NFS Client Provisioner: Provisión dinámica de volúmenes persistentes
- Elección de NFS por su sencillez y compatibilidad total con Kubernetes
- 🛠️ Plan futuro: replicar el almacenamiento ZFS entre
niflheim
(Valencia) ygehena
(Torrevieja) sobre VPN, usandozfs send/receive
y gestionando una IP flotante de almacenamiento mediante Keepalived
🔐 TLS e Ingress
- cert-manager: Automatiza la solicitud y renovación de certificados Let's Encrypt
- Ingress-NGINX: Gestiona el tráfico HTTP(S)
- Configuración automática de TLS para todos los servicios expuestos
🌀 GitOps
- Gitea: Servidor Git interno para almacenar todos los manifiestos
- Argo CD: Sincroniza automáticamente los repositorios Git con el clúster
- App of Apps: Orquesta todo el clúster desde un solo manifiesto maestro
💻 Virtualización
- KubeVirt: Ejecuta máquinas virtuales como recursos nativos de Kubernetes
- CDI (Containerized Data Importer): Gestiona la importación de imágenes ISO
- ISO Server: Servidor de imágenes disponible por HTTP/NFS
- Guacamole: Acceso remoto vía navegador a VMs mediante VNC, RDP o SSH
🔧 Herramientas de soporte
- VS Code Server: Entorno de edición remota accesible vía navegador
- Scripts auxiliares: Automatizan la publicación, clonación y sincronización de manifiestos en la carpeta
docs/
- Harbor: Repositorio de imágenes Docker privado desplegado en el clúster
🧪 Recomendaciones
- Etiquetar nodos adecuadamente (
kubectl label node <node> <key>=<value>
) - Usar taints para separar roles específicos (ej. almacenamiento)
- Gestionar el tráfico mediante bonding + VLANs
- Automatizar todo con GitOps (Argo CD)
- Monitorizar y respaldar los recursos críticos
📅 Documentación relacionada: Direccionamiento y VLANs