Files
k3s/docs/arquitectura.md
2025-04-27 00:26:25 +00:00

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