Introducción
fluxcd-thor-network describe todo lo que se ejecuta dentro de los clústeres de Kubernetes: la red, el ingress, los certificados, la observabilidad, Keycloak y las aplicaciones. FluxCD lee el repositorio y aplica en el clúster lo que hay en Git; cambiar algo es hacer un commit.
El clúster lo crea el stack de Kubernetes de Horizon. FluxCD se encarga de todo lo que hay dentro a partir de la entrega.
El repositorio es público y pensado para usarse de base: haz un fork, ajústalo a tu red y despliégalo en tu clúster.
Entornos
| Entorno | Clúster | Ruta | Canal de Slack |
|---|---|---|---|
| testing | tanya | clusters/testing | #fluxcd-testing |
| production | rimuru | clusters/production | #fluxcd-production |
Ambos envían su telemetría a la misma máquina de monitorización, diferenciados por la etiqueta cluster. Los ejemplos de esta documentación usan testing.
Organización
FluxCD aplica la plataforma por niveles. Cada nivel es un par de Kustomization de Flux, -controllers (el software) y después -configs (lo que lo usa), y espera al nivel anterior. Así las dependencias siempre están listas antes.
clusters/<entorno>/ lo que sigue el clúster: flux-instance.yaml, infra-level<N>.yaml, apps.yaml
infrastructure/base/<nivel>/ la definición de cada componente, compartida por los entornos
infrastructure/<entorno>/ valores, direcciones y secrets cifrados de cada entorno
apps/base/<aplicación>/ la definición de cada aplicación
apps/<entorno>/<aplicación>/ nombres y variante del chart de cada entorno
| Nivel | Componentes | Documentación |
|---|---|---|
0 · 00-bootstrap | Flux Operator, SOPS + age, notificaciones de Slack, clases de prioridad, políticas de admisión | Bootstrap |
1 · 10-networking | Calico, MetalLB, Reloader, Metrics Server | Plataforma |
2 · 20-ingress | cert-manager, Traefik (intranet y extranet) | Plataforma |
3 · 30-observability | Grafana Alloy, kube-state-metrics | Plataforma |
4 · 40-identity | Keycloak Operator y Keycloak | Plataforma |
| apps | documoon, shizen, fumi, kirin | Aplicaciones |
Reglas del clúster
Reglas que cumple todo lo desplegado, aplicadas por el propio Kubernetes y FluxCD:
| Regla | Aplicada por |
|---|---|
Sin volúmenes: crear un PersistentVolumeClaim se rechaza; el espacio temporal usa emptyDir | ValidatingAdmissionPolicy |
Todo Ingress tiene clase intranet o extranet; olvidarla o equivocarse se rechaza | ValidatingAdmissionPolicy |
Pods sin privilegios: restricted por defecto; privileged solo para lo que configura la red o lee los logs del nodo | Pod Security Admission |
| Todo pod declara sus recursos: requests medidos, límite de memoria y sin límite de CPU | Valores de cada chart |
| Una actualización fallida vuelve atrás: tres reintentos y rollback a la última versión que funcionaba | Remediación de Flux |
La plataforma sobrevive a las aplicaciones: platform-critical y platform-high; las aplicaciones no tienen prioridad y ceden primero | Clases de prioridad |
Política de versiones
Cada componente se actualiza solo dentro de un rango, y Slack avisa de cada actualización.
| Rango | Significado | Aplicado a |
|---|---|---|
<mayor>.<menor>.x | Parches automáticos, versiones menores con un commit | Lo que tumba el clúster si falla: Flux, Flux Operator, Calico, MetalLB, cert-manager, Traefik, Keycloak |
<mayor>.x | Menores y parches automáticos | Componentes acotados: Reloader, Metrics Server, la observabilidad |
Comandos habituales
# Aplicar lo que se acaba de subir, sin esperar a la siguiente comprobación
flux reconcile kustomization flux-system --with-source
# Estado de todo lo que gestiona Flux
flux get all -A
kubectl -n flux-system get fluxreport/flux -o yaml
# Editar un secret
sops infrastructure/testing/20-ingress/configs/cloudflare-api-token-secret.yaml
Documentación
Cada componente tiene su página en docs/: para qué sirve, cómo se instala, cómo se valida y cómo se actualiza.