Hace unas semanas te hablé de Argo CD y cómo esta herramienta nos ayuda con la filosofía GitOps en nuestros entornos con Kubernetes. Hoy quiero hablarte de su mayor contrincante, Flux CD, para que tengas más opciones a la hora de adentrarte en este mundo.
Instalar la herramienta de Flux CD
Antes de comenzar a trabajar con esta herramienta, lo primero que debes hacer es instalarla en tu máquina local. En mi caso voy a utilizar Homebrew para hacerlo en MacOs:
brew install fluxcd/tap/flux
Pero aquí puedes encontrar el resto de instalaciones para otros sistemas operativos.
Generar un Personal Access Token para tu usuario de GitHub
En este ejemplo voy a utilizar GitHub para alojar los repositorios de código fuente. Es por ello que necesito unas credenciales que me permitan trabajar con ellos. Para ello necesitas el nombre de usuario y un Personal Access Token, que puedes crear yendo al menú > Settings:
y dentro de este, selecciona la opción Developer settings y Personal Access Tokens. También puedes acceder directamente desde aquí: https://github.com/settings/tokens/new
Dentro de este apartado deberías de crear un PAT con los permisos de repo:

Configura estas dos variables de entorno con tu usuario y el token generado:
# Configure GitHub variables
export GITHUB_TOKEN=<YOUR_PERSONAL_ACCESS_TOKEN>
export GITHUB_USER=<YOUR_USER_NAME>
Configurar Flux CD en tu clúster de Kubernetes
En mi ejemplo estoy usando AKS, pero también puedes usar entornos de desarrollo como kind o k3d. Una vez que tengas un clúster con el que probar, utiliza la herramienta que acabas de instalar de la siguiente manera:
flux bootstrap github \
--owner=$GITHUB_USER \
--repository=gitops-demo \
--branch=main \
--path=./clusters/aks-cluster \
--personal
Esto generará un nuevo repositorio en tu cuenta de GitHub donde alojará los archivos necesarios para el despliegue de Flux CD en tu clúster. Clona el mismo y accede a él para continuar:
git clone https://github.com/$GITHUB_USER/gitops-demo
cd gitops-demo
Si ahora compruebas el namespace flux-system verás que tienes varios recursos dentro de él:
kubectl get all -n flux-system
Ahora ya solo queda desplegar alguna aplicación para que veas cómo sería el proceso.
Desplegar aplicación de ejemplo
Para este artículo voy a aprovechar el ejemplo que te mostré con Kustomize, el cuál despliega un WordPress. Lo primero que debes hacer es dar de alta el repositorio en la configuración de Flux CD:
flux create source git kustomize-demo \
--url=https://github.com/0GiS0/kustomize-demo \
--branch=main \
--interval=30s \
--export > ./clusters/aks-cluster/apps/kustomize-demo.yaml
Esto generará un nuevo archivo en tu repositorio llamado kustomize-demo.yaml como el que sigue:
---
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
metadata:
name: kustomize-demo
namespace: flux-system
spec:
interval: 30s
ref:
branch: main
url: https://github.com/0GiS0/kustomize-demo
Ahora, para ver reflejados los cambios en tu clúster haz commit del archivo:
git add -A && git commit -m "Add kustomize demo source"
git push
Después de unos segundos, puedes comprobar a través del comando flux get all que ya está registrado en la configuración:
➜ flux get all
NAME READY MESSAGE REVISION SUSPENDED
gitrepository/flux-system True Fetched revision: main/3607aaeaca956d0e07eaa02229c51f5521892929 main/3607aaeaca956d0e07eaa02229c51f5521892929 False
gitrepository/kustomize-demo True Fetched revision: main/9840c1fc39156cc02d1aac3a92f0202c677172df main/9840c1fc39156cc02d1aac3a92f0202c677172df False
NAME READY MESSAGE REVISION SUSPENDED
kustomization/flux-system True Applied revision: main/3607aaeaca956d0e07eaa02229c51f5521892929 main/3607aaeaca956d0e07eaa02229c51f5521892929 False
Ahora que ya lo tienes, lo siguiente que necesitas es generar el manifiesto que despliegue el entorno de dev definido con Kustomize:
flux create kustomization kustomize-demo-dev \
--source=kustomize-demo \
--path="./dev" \
--prune=true \
--interval=5m \
--export > ./clusters/aks-cluster/kustomize-demo-dev.yaml
Con ello obtendrás de nuevo un YAML con la configuración definida a través de la herramienta (podrías generarlo de forma manual, pero al iniciarse es mucho más sencillo así):
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: kustomize-demo-dev
namespace: flux-system
spec:
interval: 5m0s
path: ./dev
prune: true
sourceRef:
kind: GitRepository
name: kustomize-demo
Publica los cambios en el repo:
git add -A && git commit -m "Deploy kustomize demo - dev enviroment"
git push
y utiliza el siguiente comando para saber cuándo los cambios han sido aplicados en el clúster:
flux get kustomizations --watch
La salida que verás después de unos segundos será la siguiente:
➜ flux get kustomizations --watch
NAME READY MESSAGE REVISION SUSPENDED
flux-system True Applied revision: main/3607aaeaca956d0e07eaa02229c51f5521892929 main/3607aaeaca956d0e07eaa02229c51f5521892929 False
flux-system Unknown reconciliation in progress main/3607aaeaca956d0e07eaa02229c51f5521892929 False
kustomize-demo-dev False waiting to be reconciled False
kustomize-demo-dev False waiting to be reconciled False
kustomize-demo-dev Unknown reconciliation in progress False
flux-system True Applied revision: main/31fdb000dff3d2b6c8a162f3c3fb33d9b75a8eb5 main/31fdb000dff3d2b6c8a162f3c3fb33d9b75a8eb5 False
kustomize-demo-dev True Applied revision: main/9840c1fc39156cc02d1aac3a92f0202c677172df main/9840c1fc39156cc02d1aac3a92f0202c677172df False
Ahora comprueba que efectivamente tu WordPress está correctamente desplegado en el namespace dev:
kubectl get all -n dev
A partir de ahora, cada vez que hagas cualquier cambio en el repositorio kustomize-demo, tu clúster con Flux CD estará atento y aplicará los cambios, en este caso, para la configuración del entorno dev. Lo ideal es seguir una estructura para el repositorio como la que se detalla en la documentación oficial.
A diferencia de Argo CD, Flux CD está pensando para ser utilizado a través de la línea de comandos, aunque hay una interfaz web en fase experimental que por ahora no está en las prioridades del proyecto.
¡Saludos!