Flux CD Flux CD

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.

12 min Principiante

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:

  • sourceRef es de donde viene el estado deseado. Aquí es el repositorio flux-system que configuró bootstrap.
  • path es la carpeta dentro del source que se aplica.
  • interval es con qué frecuencia Flux vuelve a aplicar los manifiestos y corrige las desviaciones, aunque Git no haya cambiado.
  • prune: true significa que los objetos eliminados de Git también se eliminan del clúster. Está desactivado a menos que lo definas.
  • wait y timeout hacen 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