miércoles, 4 de diciembre de 2024

AWS Creación de un cluster EKS con terraform


## Introducción

Ya hace un tiempo enseñé [cómo instalar localstack para que puedas probar terraform](https://www.ahioros.info/2024/05/how-to-install-localstack-with-docker.html). Bueno ahora voy a enseñarte una de las maneras de como crear un cluster de kubernetes (EKS) en AWS.
 
¿Cuántas maneras de crear un cluster de kubernetes (EKS) en AWS hay?

1. Con terraform escribiendo desde 0.
2. Con terraform haciendo uso del module.
3. Con cloudformation.
4. Crear un cluster de kubernetes (EKS) en AWS con eksctl (esta al final es un wrapper y hace uso de cloudformation).

Nosotros vamos a realizar la primera configuración.


Puedes ver el video aquí:

No te voy a decir todas las ventajas que tiene hacerlo con terraform (que para eso ya debes de saberlas) solo diré que no me gusta tanto hacerlos con cloudformation por que "tarda" bastante tiempo.

**Nota:** más adelante vamos a hacer el pipeline CI/CD para automatizar el deploy e ir agregándo más características, así como ir poniéndo "presentable" el proyecto.


## Crear un cluster de kubernetes (EKS) en AWS con terraform

En este ejemplo voy a enseñar cómo usar terraform para crear un cluster de kubernetes (EKS) en AWS.

**Advertencia:** el cluster queda expuesto para poder acceder desde internet, esto no es seguro pero lo hago así por que destruyo el ambiente enseguida, lo correcto es crear una instancia que tenga acceso (jump box/bastión).

## Pre-requisitos

Como este proyecto es "bastante código" lo he puesto a disposición en mi github, lo puedes descargar de [aquí](https://github.com/ahioros/terraform-aws-eks/releases/tag/1.0) estará con el tag 1.0.

El diagrama es este:


## Configuración

Abre y edita el archivo config.json y cambia los valores de la configuración según tu necesidad.

## Despliegue

Realiza el deploy de tu cluster de kubernetes (EKS) con terraform.

```bash
terraform init
```

```bash
terraform apply -var="config_key=config.json"
```

Tocará esperar alrededor de 7 minutos, y el cluster de kubernetes (EKS) estará listo para ser usado.

## Test del cluster EKS

Podemos ejecutar el siguiente comando una vez haya terminado y aunque nos sirve, es engorroso estar usando el argumento kubeconfig (ya sé que puedes crear un alias) en el siguiente apartado te digo el tip para actualizar tu kubectl con tu nuevo cluster.

```bash
kubectl --kubeconfig ./template/kubeconfig.yaml get nodes
```

## Configuración de kubectl

Actualizamos la configuración de kubectl:

```bash
aws eks update-kubeconfig --name eks-cluster --region us-east-1
```

Recuerda cambiar --name y --region por el nombre y la region de tu cluster de kubernetes (EKS).

Aunque automáticamente debe tomar el nuevo contexto puedes verificarlo con:

```bash
kubectl config get-context
```

## Destrucción del cluster EKS

```bash
terraform destroy -var="config_key=config.json" -auto-approve
```

Para eliminar el contexto de tu kubernetes realiza:

```bash
kubectl config delete-context arn:aws:eks:laregion:algúnnúmero:cluster/eks-cluster
```

**Nota:** en futuros post haremos la configuración del github actions para automatizar el deploy.

No hay comentarios.: