actualizacion de la documentacion
This commit is contained in:
@ -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 <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
|
||||
- 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)
|
||||
|
||||
|
@ -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 |
|
||||
|
Reference in New Issue
Block a user