Files
k3s/docs/arquitectura.md

127 lines
4.0 KiB
Markdown

# 🏋️ 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) y `gehena` (Torrevieja) sobre VPN, usando `zfs 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](direccionamiento.md)