From 0a36e930e7eddd3723e8f1c7e9b4d1c00831fd84 Mon Sep 17 00:00:00 2001 From: xavor Date: Sun, 27 Apr 2025 22:11:52 +0000 Subject: [PATCH] actualizacion de la documentacion --- docs/arquitectura.md | 93 ++++++++++++++++++++++++---------------- docs/direccionamiento.md | 2 - 2 files changed, 55 insertions(+), 40 deletions(-) diff --git a/docs/arquitectura.md b/docs/arquitectura.md index 610b100..baaf0c9 100644 --- a/docs/arquitectura.md +++ b/docs/arquitectura.md @@ -1,12 +1,12 @@ -# 🏗️ Arquitectura del clúster K3s +# 🏋️ 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. +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 (192.168.1.7) +### 💻 tartaro (Admin: 192.168.1.11 / Storage: 192.168.3.1 / Internode: 192.168.4.1) - Rol: Control plane principal - Prioridad Keepalived: MASTER - Ejecuta: @@ -23,7 +23,7 @@ Este documento describe la arquitectura del clúster Kubernetes desplegado con K --- -### 🖥️ styx (192.168.1.8) +### 💻 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: @@ -34,76 +34,93 @@ Este documento describe la arquitectura del clúster Kubernetes desplegado con K --- -### 🖥️ niflheim (192.168.1.10) -- Rol: Nodo dedicado a almacenamiento y tareas pesadas +### 💻 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 - - Volúmenes persistentes para el resto del clúster - - ISO server (para KubeVirt) - - Posibles futuras tareas de backup, observabilidad, etc. + - ZFS + NFS Server + - NFS Client Provisioner + - ISO Server para KubeVirt + - Volúmenes persistentes para todo el clúster --- -## 🔁 Alta disponibilidad +## 📡 Red y VLANs -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. +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**: 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. +- **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** 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. +- **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** 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. +- **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 +## 💻 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). +- **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** accesible por navegador para edición remota en el clúster. -- **Scripts auxiliares** en la carpeta `docs/` para gestión de repositorios. +- **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 con `kubectl label node =` -- 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 +- Etiquetar nodos adecuadamente (`kubectl label node =`) +- 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) + diff --git a/docs/direccionamiento.md b/docs/direccionamiento.md index bdc197e..706f945 100644 --- a/docs/direccionamiento.md +++ b/docs/direccionamiento.md @@ -25,8 +25,6 @@ ## 🧭 Tabla de Direccionamiento por Dispositivo -## 🧭 Tabla de Direccionamiento por Dispositivo - | Dispositivo | VLAN 1 (Admin/Acceso) | VLAN 30 (Storage) | VLAN 40 (Internode) | Observaciones | |:----------------------------|:----------------------|:------------------|:--------------------|:--------------| | Router Ubiquiti | 192.168.1.1 | — | — | Puerta de enlace principal |