Files
k3s/docs/arquitectura.md

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) 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