Desplegar aplicaciones con ArgoCD en Kubernetes

introducción argoCD

introducción argoCD


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.

ArgoCD gitops | Desplegar aplicaciones con ArgoCD en Kubernetes
ArgoCD gitops

¿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.

Pantalla de Login de ArgoCD | Desplegar aplicaciones con ArgoCD en Kubernetes
Pantalla de Login de ArgoCD

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
ArgoCD status deploy
ArgoCD status deploy

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!


Deja una respuesta

Tu dirección de correo electrónico no será publicada.