DEV Community

Rubén Rodríguez for AWS Español

Posted on

2

Automatiza el despliegue de EKS y Argo CD con Terraform

Sabemos que 2024 ha sido una locura y, seamos sinceros, no hemos tenido todo el tiempo que nos gustaría para dedicarle a esas horas extras para la comunidad 😝. Pero, aprovechando los primeros días de 2025, hemos encontrado el hueco que necesitábamos para seguir dándole caña a esta serie que teníamos en mente.

En el capítulo anterior, vimos cómo Argo CD nos ayuda a gestionar nuestras aplicaciones en EKS con ese enfoque GitOps que tanto nos gusta. Sin embargo, sabemos que la teoría siempre se queda corta 🥶. Por eso, en este capítulo vamos a desplegar un clúster de EKS con Argo CD utilizando Terraform. Hablaremos de los requisitos, cómo conectar repositorios y cómo validar que todo está funcionando para que puedas empezar a hacer tus propias pruebas.

En esta ocasión, no vamos a complicarnos con pipelines de despliegue ni nos centraremos demasiado en best practices, gestión de secretos u optimización del código. Lo que buscamos aquí es entender cómo Argo CD puede hacer que nuestros despliegues sean más ágiles y los beneficios que aporta. Pero no os preocupéis, si el tiempo (y la motivación 😅) nos lo permite, ampliaremos el scope de estos posts para cubrir todos esos temas más adelante.

🛠️Requisitos🛠️

Como ya hemos comentado, el clúster de EKS con Argo CD lo desplegaremos utilizando Terraform. Para que podáis probarlo por vuestra cuenta, hemos subido el código al siguiente repositorio:
https://github.com/rnanudevops/eks-argocd-awsespanol

Este módulo ya lo utilizamos en un post anterior para el despliegue y test de Karpenter (dale un vistazo aquí: https://dev.to/aws-espanol/optimiza-tu-cluster-eks-con-karpenter-3mk1).
Esta vez, hemos añadido la configuración necesaria para incluir el despliegue de Argo CD.

Antes de utilizar este código, recomendamos revisar lo siguiente:

  • TAGS: Modifica los tags para personalizar el despliegue según tus necesidades.
  • Bucket S3: Asegúrate de configurar el bucket donde se almacenará el estado de Terraform.

Este módulo despliega todos los servicios necesarios para el despliegue de un clúster de EKS, incluyendo la configuración de networking.

Una vez desplegado el código de Terraform, veamos cómo acceder tanto al clúster EKS como a Argo CD.

En nuestro caso, hemos llamado al clúster awtwins-cluster:

EKS

Para acceder al clúster, necesitamos actualizar el contexto de kubectl mediante el siguiente comando:

aws eks --region eu-west-1 update-kubeconfig --name awtwins-cluster

Para validar que la conexión se ha establecido correctamente, podemos ejecutar:

kubectl get pods -A

Esto nos devolverá:

NAMESPACE     NAME                                                READY   STATUS    RESTARTS   AGE
argocd        argocd-application-controller-0                     1/1     Running   0          6m23s
argocd        argocd-applicationset-controller-5db4d64b99-72k5m   1/1     Running   0          6m23s
argocd        argocd-dex-server-67d695d958-4p4dt                  1/1     Running   0          6m23s
argocd        argocd-notifications-controller-5795d744fd-sxhjz    1/1     Running   0          6m23s
argocd        argocd-redis-5688bd4c9f-hg7zk                       1/1     Running   0          6m23s
argocd        argocd-repo-server-84d9d8fcfb-dsnfj                 1/1     Running   0          6m23s
argocd        argocd-server-d5f5767b6-4ffw8                       1/1     Running   0          6m23s
kube-system   aws-node-kzx4v                                      2/2     Running   0          7m28s
kube-system   aws-node-wwn2g                                      2/2     Running   0          7m23s
kube-system   coredns-844dbb9f6f-52lv9                            1/1     Running   0          9m53s
kube-system   coredns-844dbb9f6f-7khjt                            1/1     Running   0          9m53s
kube-system   kube-proxy-2dm9t                                    1/1     Running   0          7m23s
kube-system   kube-proxy-zn2lv                                    1/1     Running   0          7m28s
Enter fullscreen mode Exit fullscreen mode

El siguiente paso es obtener la dirección de Argo CD, expuesta mediante un LoadBalancer que se incluye en el código de Terraform. Para ello, ejecutamos:

kubectl -n argocd get svc argocd-server

NAME            TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)                      AGE
argocd-server   LoadBalancer   172.20.193.200   ab577983472254f28a7ae93e22a478af-2061443254.eu-west-1.elb.amazonaws.com   80:30482/TCP,443:30189/TCP   10m
Enter fullscreen mode Exit fullscreen mode

Copiaremos el valor de EXTERNAL-IP y accederemos a esta dirección desde el navegador.

Por defecto, Argo CD genera un usuario administrador (admin) y un password inicial. Para obtener este password, ejecuta el siguiente comando:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

Con estas credenciales (usuario: admin y el password generado), accedemos a Argo CD.
🚨Este usuario nunca debe usarse en entornos productivos y se recomienda deshabilitarlo.🚨

ArgoCD 2

Una vez dentro de Argo CD, el primer paso es configurar el repositorio donde almacenaremos nuestras aplicaciones. Para simplificar el escenario, utilizaremos la CLI de Argo CD. Esto nos permitirá realizar la configuración de forma sencilla y eficiente.

Primero, conectamos la CLI a Argo CD utilizando el siguiente comando e introduciendo las credenciales:

argocd login ab577983472254f28a7ae93e22a478af-2061443254.eu-west-1.elb.amazonaws.com --insecure
Username: admin
Password:
'admin:login' logged in successfully
Context 'ab577983472254f28a7ae93e22a478af-2061443254.eu-west-1.elb.amazonaws.com' updated
Enter fullscreen mode Exit fullscreen mode

En este ejemplo, utilizaremos GitHub como repositorio, pero puedes usar otros como BitBucket o GitLab. Debes generar un repositorio y un usuario con los permisos necesarios.

Una vez listo, añade el repositorio a Argo CD utilizando:

argocd repo add <URL repositorio> --username <user> --password <token/password>

Accede a Argo CD y comprueba que el repositorio aparece en la sección Settings > Repositories, confirmando que se ha conectado correctamente.

Image description

Con esto, ya hemos configurado nuestro entorno de EKS y Argo CD y hemos conectado un repositorio para empezar a gestionar nuestras aplicaciones. 🚀

En el próximo post, veremos cómo desplegar aplicaciones en Argo CD y qué estrategias y buenas prácticas podemos utilizar para nuestros despliegues.

💬 Y recuerda, tus comentarios y opiniones son más que bienvenidos. 😝

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (2)

Collapse
 
adriantunez profile image
Adri Antunez

Gracias @nanu un post muy instructivo!
Como comentario, yo pondría en el repositorio de Github un link a este post.
Quedo a la espera de más contenido de la serie!

Collapse
 
nanu profile image
Rubén Rodríguez

Gracias por tu feedback, @adriantunez 🙂
Buena idea añadir la info del post en el repositorio de GitHub. Me lo apunto para modificar el readme en cuanto tenga un hueco.
¡Un saludo!

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Immerse yourself in a wealth of knowledge with this piece, supported by the inclusive DEV Community—every developer, no matter where they are in their journey, is invited to contribute to our collective wisdom.

A simple “thank you” goes a long way—express your gratitude below in the comments!

Gathering insights enriches our journey on DEV and fortifies our community ties. Did you find this article valuable? Taking a moment to thank the author can have a significant impact.

Okay