6 min read

Tiempo de despliegue de AKS, EKS, GKE y Kubeadm


Captura de los terminales con el comando Terraform

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ísticaValor
Versión de Kubernetes1.35
CPU2vCPU
RAM4Gb
Almacenamiento30Gb
Número de nodos2

Las nubes e instancias a considerar son las siguientes:

ProveedorServicioInstanciaRegión
AmazonElastic Kubernetes Servicet3a.mediumus-east-1
GoogleGoogle Kubernetes Enginee2-mediumus-east4
MicrosoftAzure Kubernetes ServiceStandard_B2seastus
DigitalOceanKubeadm instalado en VPSs-2vcpu-4gbnyc1

Los pasos para el despliegue de cada clúster con Terraform están en los siguientes repositorios:

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

ProveedorIntento 1Intento 2Intento 3Intento 4Intento 5Promedio
Azure AKS6:17.955:23.565:36.866:51.135:38.1605:57.5
Kubeadm7:52.277:45.937:13.867:47.238:28.6307:49.6
GCP GKE8:10.8610:59.6711:00.717:43.6210:33.1609:41.6
AWS EKS14:23.9510:10.4612:02.6510:45.9310:31.1211:34.8

Gráfico de tiempo promedio de despliegue

Tiempo de destrucción del clúster

ProveedorIntento 1Intento 2Intento 3Intento 4Intento 5Promedio
Kubeadm0:25.240:26.950:26.420:26.690:25.1800:26.1
Azure AKS5:25.335:06.146:55.145:56.555:29.3205:46.5
GCP GKE7:48.138:06.077:45.237:49.688:00.4207:53.9
AWS EKS8:29.5810:29.988:44.4410:17.108:23.6609:17.0

Gráfico de tiempo promedio de destrucción

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
ProveedorPlano de controlCó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.