Desplegar aplicaciones con ArgoCD en Kubernetes
En esta entrada sobre desplegar aplicaciones con ArgoCD en Kubernetes, vamos a ver una útil herramienta de continuous delivery.
En esta entrada veremos una Introducción a ArgoCD como herramienta de continuous delivery, la cual instalaremos haciendo uso de Kubernetes y desplegaremos una aplicación Spring Boot.
¿Qué es ArgoCD?
ArgoCD es una herramienta que podríamos decir de GitOps que nos ayuda con nuestro workflow, es decir, una herramienta para nuestro proceso de continuous delivery haciendo uso de Git.
ArgoCD nos a va a facilitar la integración desde nuestros repositorios Git a Kubernetes. Entornos, definiciones y configuraciones serán declarativas y controladas por versión. El repositorio podrá tener ramas y cada rama podrá tener una gestión para su despliegue.
¿Por qué usar ArgoCD?
ArgoCD nos ofrece una herramienta cloud native y las mejores prácticas y principios para GitOps. Lo más normal es hacer uso de repositorios Git para realizar la subida de nuestro código, desde este punto de vista, con ArgoCD tenemos un paso ganado para realizar despliegues de nuestro código a Kubernetes.
Componentes de ArgoCD
ArgoCD esta compuesto de 3 piezas principales:
API Server:
Si miras los pods, lleva como nombre argocd-server. Se encarga de controlar todas las instancias de ArgoCD, autenticación, operaciones, secrets etc…
Repository Server
Almacena y sincroniza información desde los repositorios git y genera los manifiestos de Kubernetes. Aparece como argocd-repo-server a nivel de pod.
Application Controller
Usado para la monitorización de aplicaciones en el cluster de Kubernetes. Aparece como argocd-application-controller
Instalación de ArgoCD
Vamos a comenzar con la instalación de ArgoCD, para ello necesitamos unos requisitos previos:
- Docker, es lo básico que hay que tener en un ordenador de desarrollo.
- Minikube para poder realizar la gestión de un clúster de Kubernetes, hay más distribuciones que se pueden hacer uso.
- Kubectl para poder interactúar con tu clúster de Kubernetes.
Una vez tenemos todo lo anterior configurado e instalado es el momento de comenzar la instalación de ArgoCD.
Instalación de Cluster para ArgoCD
Para proceder a la instalación de ArgoCD vamos a necesitar tener instalado dos Clúster, uno para instalar AgoCD y otro para poder desplegar la aplicación de prueba que realizaremos en Spring Boot.
En mi caso haré uso de Minikube para crear los dos cluster de Kubernetes:
minikube start -p target-k8s
Y el cluster en donde instalar ArgoCD:
minikube start -p argocd-k8s
A continuación vamos a trabajar en argocd-k8s por lo que vamos a setearlo directamente:
kubectl config use-context argocd-k8s
Instalación de ArgoCD
En la instalación propiamente dicha de ArgoCD vamos a comenzar creando un namespace en donde realizaremos la instalación:
kubectl create namespace argocd
El siguiente paso es realizar la instalación de ArgoCD y los objetos de Kubernetes asociados:
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Este proceso de instalación llevará algo de tiempo, si ves que te da errores de instalación de imágenes o descargas a veces hay que reiniciar minikube, borrar y volver a instalar.
Una vez hemos realizado la instalación de ArgoCD en nuestro cluster, tenemos que tener en cuenta que no tenemos el servicio expuesto, por lo que vamos a hacer un port-forward para exponer el servicio. Y de esta manera poder acceder a nuestra instalación de ArgoCD:
kubectl port-forward svc/argocd-server -n argocd 8080:443
Ahora nuestro ArgoCD esta instalado y expuesto en el puerto 8080, por lo que vamos acceder a través de la siguiente url: https://localhost:8080.
Para acceder a la aplicación necesitamos obtener la password, la cual viene determinada por el pod que se ha instalado, por lo que la password es dinámica. Así que para obtener la contraseña ejecutamos el siguiente comando:
kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
o si esa no te funciona prueba con:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
Y el usuario es el típico admin.
Una vez tenemos instalado ArgoCD en nuestro cluster nos vendrá muy bien y será de gran utilidad instalar su cliente.
Ahora nos faltaría un paso más para decirle a Argo cual es nuestro target para hacer deployment, por defecto lo hará en donde se ha realizado la instalación, por lo que vamos a ejecutar el siguiente comando para especificar el target.
argocd cluster add target-k8s
Instalación Cliente de ArgoCD
ArgoCD nos ofrece un cliente para poder interactuar desde nuestro terminal lo que nos será de gran utilidad. Para realizar la instalación tenemos dos maneras.
- Desde sus binarios.
- Haciendo uso de brew en Mac:
brew tap argoproj/tap && brew install argoproj/tap/argocd
Una vez instalado el cliente podremos empezar a hacer uso de el desde nuestro terminal para ello vamos a comenzar de la siguiente manera:
argocd login localhost:8080
Una vez que hemos conseguido logarnos con ArgoCD a través del cliente es momento de comenzar el despliegue de una aplicación. Para eso vamos a realizar una aplicación desde 0.
Pasos para desplegar Aplicación con ArgoCD
Vamos a realizar una simple aplicación que se conecta a una Base de Datos en memoria H2 para mostrar datos a través de un endpoint.
Para desplegar una aplicación en ArgoCD vamos a seguir los siguientes pasos:
- Subir imágen a un repositorio
- Hacer uso de Helm para crear los templates que serán invocados con ArgoCD
- Hacer deploy con ArgoCD
- Exponer el servicio.
Crear un template de Helm de nuestra aplicación
Vamos a crear un template para realizar un despliege de nginx en Kubernetes con ArgoCD:
helm create argocd-example
una vez ejecutado el comando verificamos en el directorio que se han creado las carpetas y ficheros necesarios.
Para nuestro ejemplo tan solo será necesario modificar el fichero values.yaml en el que incluiremos la imagen creada.
Desplegar aplicación en Kubernetes haciendo uso de ArgoCD
Para poder desplegar nuestra aplicación primero vamos a subirla a github, para que se pueda hacer uso de helm. Una vez subida ejecutamos el siguiente
argocd app create argocd-nginx --repo https://github.com/refactorizando-web/argoCD-example.git --path argocd-example --dest-server https://kubernetes.default.svc --dest-namespace default
Una vez ejecutado el comando anterior podemos comprobar el estado del despliegue:
argocd app get argocd-nginx
El estado OutOfSync es bastante normal porque todavía no se le ha dotado de recursos a Kubernetes, para poder realmente hacer un deploy faltaría realizar un sync:
argocd app sync argocd-nginx
Comprobar la aplicación desplegada con ArgoCD
Vamos a comprar la aplicación desplegada con ArgoCD para ello ejecutamos:
minikube service nginx
Conclusión
En este artículo sobre desplegar aplicaciones con ArgoCD en Kubernetes, hemos visto una introducción al despliegue a través de ArgoCD viendo como podemos hacer uso de Github para desplegar desde nuestro repositorio.
Si quieres descargarte el Helm que hemos creado lo puedes hacer desde aquí.
Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!