110 lines
3.0 KiB
Markdown
110 lines
3.0 KiB
Markdown
# 🏗️ 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
|
|
|
|
---
|
|
|