
En la búsqueda de dominar la herramienta, al levantar un clúster de kubernetes se encuentran diferentes tiempos en inicializar los clústers en las diferentes nubes usando Terraform.
En este post se comparan 4 escenarios, uno por cada nube (AWS, GCP, AZURE) y un cuarto un clúster con Kubeadm. Esto nos ayudará a tener la información real sobre cuanto tiempo tardan en desplegar un clúster en un ambiente de prácticas para más adelante llevarlo a otros entornos como desarrollo, testing o producción.
Las características comunes entre los clúster serán las siguientes:
| Característica | Valor |
|---|---|
| Versión de Kubernetes | 1.35 |
| CPU | 2vCPU |
| RAM | 4Gb |
| Almacenamiento | 30Gb |
| Número de nodos | 2 |
Las nubes e instancias a considerar son las siguientes:
| Proveedor | Servicio | Instancia | Región |
|---|---|---|---|
| Amazon | Elastic Kubernetes Service | t3a.medium | us-east-1 |
| Google Kubernetes Engine | e2-medium | us-east4 | |
| Microsoft | Azure Kubernetes Service | Standard_B2s | eastus |
| DigitalOcean | Kubeadm instalado en VPS | s-2vcpu-4gb | nyc1 |
Los pasos para el despliegue de cada clúster con Terraform están en los siguientes repositorios:
- https://github.com/dalthonmh/terraform-aws-eks
- https://github.com/dalthonmh/terraform-gcp-gke
- https://github.com/dalthonmh/terraform-azure-aks
- https://github.com/dalthonmh/terraform-digitalocean-kubeadm
Procedimiento de las pruebas
- Para los 4 casos se estará ejecutando desde la misma computadora (host).
- Se levantará cada nube con Terraform.
- Para el caso de la instalación con Kubeadm se crearán dos VPS levantados con Terraform, un controlplane y un worker.
- Se ejecutarán 05 veces y se promediará el tiempo.
- El conteo lo realizará el propio comando
time, sin pasos manuales adicionales.
Comandos para realizar los conteos
Para los proveedores de nube:
# creación
time terraform apply --auto-approve
# destrucción
time terraform destroy --auto-approve
Para el clúster con kubeadm
# creación
time make up
# destrucción
time make destroy-force
Resultados
Promedio de 5 ejecuciones ordenadas por el más rápido al más lento.
Tiempo de despliegue
| Proveedor | Intento 1 | Intento 2 | Intento 3 | Intento 4 | Intento 5 | Promedio |
|---|---|---|---|---|---|---|
| Azure AKS | 6:17.95 | 5:23.56 | 5:36.86 | 6:51.13 | 5:38.16 | 05:57.5 |
| Kubeadm | 7:52.27 | 7:45.93 | 7:13.86 | 7:47.23 | 8:28.63 | 07:49.6 |
| GCP GKE | 8:10.86 | 10:59.67 | 11:00.71 | 7:43.62 | 10:33.16 | 09:41.6 |
| AWS EKS | 14:23.95 | 10:10.46 | 12:02.65 | 10:45.93 | 10:31.12 | 11:34.8 |

Tiempo de destrucción del clúster
| Proveedor | Intento 1 | Intento 2 | Intento 3 | Intento 4 | Intento 5 | Promedio |
|---|---|---|---|---|---|---|
| Kubeadm | 0:25.24 | 0:26.95 | 0:26.42 | 0:26.69 | 0:25.18 | 00:26.1 |
| Azure AKS | 5:25.33 | 5:06.14 | 6:55.14 | 5:56.55 | 5:29.32 | 05:46.5 |
| GCP GKE | 7:48.13 | 8:06.07 | 7:45.23 | 7:49.68 | 8:00.42 | 07:53.9 |
| AWS EKS | 8:29.58 | 10:29.98 | 8:44.44 | 10:17.10 | 8:23.66 | 09:17.0 |

Estimación de gasto mensual (USD)
Estos montos son hipotéticos. En las pruebas de este post los clústeres se crean y destruyen en minutos, por lo que el gasto real fue en centavos.
El cálculo se basa en la fórmula:
costo_mensual = plano_de_control + (nodos × precio_hora × 730) + almacenamiento
| Proveedor | Plano de control | Cómputo (2 nodos × 730h) | Almacenamiento (60GB) | Total estimado |
|---|---|---|---|---|
| AWS EKS | $73 | ~$55 (t3a.medium) | ~$5 | ~$133 |
| GCP GKE | $73 | ~$48 (e2-medium) | ~$6 | ~$127 |
| Azure AKS | $0 (tier free) | ~$61 (Standard_B2s) | ~$5 | ~$66 |
| Kubeadm (DO) | $0 (VPS) | $48 (2× s-2vcpu-4gb) | incluido | ~$48 |
No se consideran costos de red (egress, NAT Gateway, Load Balancers), que varían según el uso.
Salidas de los clústers
# dalthon@MacBookPro in ~/Aprendizaje/terraform/terraform-gcp-gke on git:main o [18:50:41]
$ k get nodes
NAME STATUS ROLES AGE VERSION
gke-gke-cluster-basi-gke-cluster-basi-90a3e6e8-1rqz Ready <none> 35s v1.35.5-gke.1057002
gke-gke-cluster-basi-gke-cluster-basi-90a3e6e8-fr32 Ready <none> 39s v1.35.5-gke.1057002
# dalthon@MacBookPro in ~/Aprendizaje/terraform/terraform-azure-aks on git:main x [19:43:45]
$ k get nodes
NAME STATUS ROLES AGE VERSION
aks-k8spool-26807681-vmss000000 Ready <none> 2m11s v1.35.6
aks-k8spool-26807681-vmss000001 Ready <none> 2m10s v1.35.6
# dalthon@MacBookPro in ~/Aprendizaje/terraform/terraform-aws-eks on git:main o [19:05:41]
$ k get nodes
NAME STATUS ROLES AGE VERSION
ip-10-20-0-239.ec2.internal Ready <none> 81s v1.35.6-eks-bca9cf6
ip-10-20-1-237.ec2.internal Ready <none> 80s v1.35.6-eks-bca9cf6
# dalthon@MacBookPro in ~/Aprendizaje/terraform/terraform-digitalocean-kubeadm on git:main x [22:57:37]
$ k get nodes
NAME STATUS ROLES AGE VERSION
cp01 Ready control-plane 5m7s v1.35.7
wk01 Ready <none> 4m54s v1.35.7
Conclusión
- Azure AKS es el más rápido en ambas operaciones (~6 min despliegue, ~5:46 destrucción).
- AWS EKS es el más lento en despliegue (~11:35), casi el doble que Azure.
- GCP GKE tiene un tiempo de despliegue intermedio (~9:41) en comparación con los otros clúster.
- Kubeadm destruye en 26 segundos — una diferencia significativa comparada con los clúster managed, esto debido a que solo destruye 2 VPS de DigitalOcean, mientras que los managed tienen que desmontar control plane, node groups, IAM roles, etc.