Skip to main content

Command Palette

Search for a command to run...

Automatizando la creación de un cluster de EKS con CloudFormation

Updated
3 min read

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:

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

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

  1. 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.
  1. 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?

Containers

Part 1 of 1

More from this blog

A

Alfalfita ☁️

19 posts

Software developer motivada y apasionada por la tecnología en la nube (AWS)