Automatizando la creación de un cluster de EKS con CloudFormation
En un entorno de nube, donde los recursos se pueden escalar dinámicamente y las necesidades cambian rápidamente, DevOps ofrece la flexibilidad necesaria para integrar el desarrollo y las operaciones en un flujo continuo. La automatización de tareas rutinarias como la implementación y el monitoreo minimiza los errores humanos y acelera el tiempo de entrega, lo que es crucial en mercados altamente competitivo. Para automatizar el proceso, se ha realizado un flujo de trabajo de CI/CD que se acciona desde un push al repositorio hasta el despliegue de un clúster Kubernetes .

Figura 1: Conexión entre componentes. Fuente: Elaboración propia
En la imagen anterior se muestra la conexión entre los diferentes componentes. El proceso se detalla a continuación:
Los desarrolladores suben su código a GitHub.
Con GithubActions orquesta el proceso de compilación y pruebas.
CloudFormation crea y configura los recursos, como la instancia EC2 desde la que se creará mediante un script el clúster de Kubernetes en EKS.
EKS despliega aplicaciones utilizando las imágenes Docker almacenadas en ECR.
Las herramientas seleccionadas son:
Uso de GitHub como repositorio principal.
CloudFormation para gestionar la infraestructura.
EKS como plataforma de ejecución para contenedores.
S3, KMS y Secrets Manager para almacenamiento y seguridad.
Configuración de un pipeline de CI/CD
Se ha definido un pipeline de CI/CD (Integración Continua y Despliegue Continuo) como secuencia automatizada de pasos para desarrollar, probar, y desplegar infraestructura en AWS de manera eficiente y controlada. El yaml que se ha definido para el pipeline se encuentra en el repositorio
https://github.com/dicaalba/eks-cluster/blob/main/.github/workflows/github-actions.yml
En este escenario, se está utilizando GitHub Actions y AWS CloudFormation:
- Configuración de Credenciales y Parámetros:
Se configuran las credenciales de AWS (con un rol IAM) para que GitHub Actions pueda interactuar con la cuenta de AWS.
Se definen variables globales como AWS_REGION y STACK_NAME que se usan en todo el pipeline para definir la configuración de infraestructura.
- Despliegue de Infraestructura con CloudFormation:
Se emplea un archivo CloudFormation (YAML) que describe la IaC.
El pipeline verifica si ya existe el stack y lo crea/actualiza según sea necesario.
- Conexión con Instancia EC2:
- Una vez creada la infraestructura, se conecta a la instancia EC2 mediante SSH y se configura el entorno para que esté listo para ejecutar Kubernetes.
- Descarga del Kubeconfig:
- El pipeline extrae el archivo kubeconfig de la instancia EC2 para interactuar con el clúster Kubernetes localmente.

Figura 2: Ejecución de pipeline con github actions. Fuente: Github Actions
Implementación de clúster en EKS
Se ha definido un script que automatiza la creación y configuración de un clúster de Kubernetes en Amazon EKS (ver repositorio de GitHub), con todas las herramientas necesarias instaladas y configuradas para su administración y uso, eliminando la necesidad de intervenciones manuales.
Instala herramientas como Docker, kubectl, eksctl, AWS CLI, aws-iam-authenticator y Helm.
A través del script, se emplea eksctl para crear el clúster EKS, definiendo además el tipo de nodos y la cantidad de nodos.
De esta forma podemos implementar un pipeline CI/CD usando GitHub Actions y AWS CloudFormation para automatizar el aprovisionamiento y la configuración de una infraestructura reproducible y escalable.

Figura 3: Clúster de EKS. Fuente: AWS
Ahora que ya podemos levantar rápidamente un clúster de Kubernetes y administrarlo desde un bastión host, ¿ qué te parece si en próximas entradas trabajamos como levantar un sistema de monitoreo de costos sobre el clúster?
