Despliega tu primera aplicación con un GitRepository y una Kustomization
Apunta Flux a manifiestos en Git usando un recurso Kustomization y observa cómo se sincroniza.
Flux se configura con recursos de Kubernetes, como todo lo demás en el clúster. Dos de ellos hacen la mayor parte del trabajo: un source como un GitRepository dice dónde vive la configuración, y una Kustomization dice “toma los manifiestos de esta ruta de ese source y mantenlos aplicados en este clúster”. Esta guía despliega una pequeña aplicación y luego cambia Git para ver la sincronización. Asume que Flux está sometido a bootstrap contra un repositorio fleet-infra (consulta la guía anterior).
Prepara los manifiestos
En tu clon de fleet-infra, añade una carpeta de aplicación junto a la carpeta clusters creada por bootstrap:
fleet-infra/
├── clusters/
│ └── dev/
│ ├── flux-system/ # creado por bootstrap
│ └── webapp.yaml # la Kustomization de Flux (siguiente sección)
└── apps/
└── webapp/
├── namespace.yaml
├── deployment.yaml
└── service.yaml
apps/webapp/namespace.yaml:
apiVersion: v1
kind: Namespace
metadata:
name: webapp
apps/webapp/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
namespace: webapp
spec:
replicas: 2
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: nginx:1.25
ports:
- containerPort: 80
apps/webapp/service.yaml:
apiVersion: v1
kind: Service
metadata:
name: webapp
namespace: webapp
spec:
selector:
app: webapp
ports:
- port: 80
targetPort: 80
A diferencia de algunas herramientas, los manifiestos aquí nombran su namespace explícitamente, y la carpeta incluye el objeto Namespace para que Flux lo cree. No hace falta un kustomization.yaml: cuando una carpeta no contiene uno, Flux construye una lista con todos los archivos YAML que hay en ella.
Escribe la Kustomization de Flux
Bootstrap ya creó un GitRepository llamado flux-system que apunta a este mismo repositorio, así que puedes reutilizarlo. clusters/dev/webapp.yaml:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: webapp
namespace: flux-system
spec:
interval: 10m
sourceRef:
kind: GitRepository
name: flux-system
path: ./apps/webapp
prune: true
wait: true
timeout: 2m
Las partes importantes:
sourceRefes de donde viene el estado deseado. Aquí es el repositorioflux-systemque configuró bootstrap.pathes la carpeta dentro del source que se aplica.intervales con qué frecuencia Flux vuelve a aplicar los manifiestos y corrige las desviaciones, aunque Git no haya cambiado.prune: truesignifica que los objetos eliminados de Git también se eliminan del clúster. Está desactivado a menos que lo definas.waitytimeouthacen que Flux espere a que los recursos aplicados estén listos antes de informar de éxito.
Puedes generar este YAML con la CLI en lugar de escribirlo a mano:
flux create kustomization webapp \
--source=GitRepository/flux-system \
--path=./apps/webapp \
--prune=true --wait=true --timeout=2m --interval=10m \
--export > clusters/dev/webapp.yaml
Haz commit y deja que Flux lo recoja
git add -A
git commit -m "Add webapp"
git push
La Kustomization flux-system ya vigila ./clusters/dev, así que descubre la nueva Kustomization webapp en su próxima ejecución. Nunca ejecutas kubectl apply para la aplicación. Para saltarte la espera, pide a Flux que compruebe Git ahora mismo:
flux reconcile source git flux-system
flux get kustomizations --watch
Confirma el despliegue
La Kustomization webapp aparece y pasa a Ready con un mensaje que nombra la revisión aplicada. Comprueba el clúster y pide a Flux que muestre lo que posee:
kubectl get all -n webapp
flux tree kustomization webapp
Cambia Git y observa la sincronización
Edita apps/webapp/deployment.yaml, cambia la imagen a nginx:1.26, haz commit y push. Flux obtiene los repositorios según el intervalo del GitRepository (un minuto por defecto tras bootstrap) y luego aplica el cambio. Se despliega un nuevo ReplicaSet. Verifica:
flux reconcile kustomization webapp --with-source
kubectl get deploy webapp -n webapp \
-o jsonpath='{.spec.template.spec.containers[0].image}'; echo
Ese es todo el ciclo: editas Git y Flux hace converger el clúster. La siguiente guía cubre cómo controlar ese comportamiento.
Usar un repositorio distinto
No tienes que mantener los manifiestos de aplicaciones en el repositorio de bootstrap. Para desplegar desde otro, crea un GitRepository para él y haz referencia a él desde la Kustomization:
flux create source git webapp-config \
--url=https://github.com/your-org/webapp-config \
--branch=main --interval=1m \
--export > clusters/dev/webapp-source.yaml
Para un repositorio privado, añade credenciales con flux create secret git y haz referencia a ellas con --secret-ref, o usa una deploy key SSH. Luego define sourceRef.name: webapp-config en la Kustomization.
Guías populares
-
Push vs Pull: cómo entrega Flux en Kubernetes Por qué la entrega basada en pull y dirigida por Git cambia cómo despliegas, proteges y recuperas clústeres. -
Controla el comportamiento de sincronización: intervalos, prune, corrección de desviaciones y rollback Decide cuándo Flux aplica los cambios, qué elimina, cómo pausarlo y cómo deshacer un mal despliegue. -
Automatiza las actualizaciones de imágenes con Flux Image Automation Deja que Flux detecte nuevas etiquetas de imágenes de contenedor y las confirme en Git. -
Configura multiclúster con Flux Gestiona varios clústeres desde un solo repositorio, con infraestructura compartida y diferencias por clúster. -
Flux CD vs Argo CD: cómo elegir una herramienta GitOps Compara arquitectura, interfaz, Helm, secretos, multi-tenancy y automatización de imágenes para elegir la herramienta adecuada.