GitOps con Argo CD
Hoy he estado jugando con Argo CD, una herramienta que nos facilita GitOps que ahora está tan de moda. En este artículo te cuento cómo probarlo con un ejemplo sencillo.
Desplegar Argo CD en tu clúster de Kubernetes
Lo primero que debes hacer es desplegar Argo CD en tu clúster. Para mi ejemplo he creado uno en AKS con los siguientes comandos:
Una vez provisionado, necesito lanzar estos dos comandos para desplegar la herramienta:
Como ves, he creado un namespace y he desplegado un manifiesto que Argo CD pone a nuestra disposición para que sea lo más sencillo posible.
Ahora que ya lo tienes instalado en tu clúster, ya puedes acceder a su interfaz para ver qué pinta tiene. Como no está expuesto directamente fuera del clúster podemos hacer uso de Port Forwarding para no tener que exponerlo de manera permanente, y que solo sea accesible desde tu máquina:
kubectl port-forward svc/argocd-server -n argocd 8080:443
Ahora ya puedes acceder desde http://localhost:8080.
El usuario con el que debes iniciar sesión es admin. Para recuperar la contraseña necesitas ejecutar el siguiente comando (es recomendable cambiar esta después):
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
Al introducir las credenciales accederás a la interfaz de Argo CD pero todavía no tendrás nada que ver.
Vale y ahora ¿qué hago con esto? Pues lo siguiente que puedes hacer es desplegar unan aplicación haciendo uso de un repositorio git.
Desplegar una aplicación de ejemplo
En este caso vamos a hacer uso de uno en Github. Para este artículo he creado este 0GiS0/argocd-demo con varios archivos con diferentes recursos. Ahora, en vez de descargarlo en mi local y hacer algo como kubectl apply -f . voy a usar Argo CD para que se ocupe de desplegar todo lo que he definido en este repo. Para ello haz clic en el botón CREATE APPLICATION con esta configuración:
Antes de continuar debes indicar también el clúster de Kubernetes de destino, así como el namespace donde se va a instalar.
Nota: para tu ejemplo puedes hacer un fork de mi repo y así poder hacer los cambios que consideres.
Si la configuración es correcta, verás que el despliegue comienza:
Una vez que finalice (lo sabrás porque aparece con el status Synced y Healthy) podrás seleccionar la aplicación y verás algo como lo siguiente.
¿A qué mola? Lo que estás viendo son todos los recursos que se han desplegado provenientes de tu repositorio de Github. Ahora, la magia está en que si modifico cualquiera de los archivos de mi repositorio, por ejemplo el número de instancias que quiero que tenga el frontal de WordPress:
En cuanto haga push de los cambios a mi repo, Argo CD se dará cuenta (comprueba cambios cada 3 minutos):
Para este artículo he elegido la sincronización automática, pero también es posible que esta sea manual y poder comprobar diferencias antes de hacer cualquier cambio. Lo ideal es que tengamos un branch protegido sobre el que no se puedan hacer cambios sin haber pasado antes por una Pull Request, por ejemplo que nos permita validar que todo lo que vamos a sincronizar está en orden.
¡Bienvenido al mundo del GitOps!