Despliegue de Clúster Kubernetes (GKE) en Google Cloud con Terraform y Antigravity AI
El paradigma del desarrollo ha cambiado: "Stop coding, start architecting". En esta guía para Staff y Senior Engineers aprenderás a diseñar e implementar una infraestructura de producción elástica sobre Google Kubernetes Engine (GKE) en GCP mediante Infraestructura como Código (Terraform), acelerando la implementación mediante el agente inteligente Antigravity.
Lo que aprenderás en esta guía
kubectl.Matriz de Decisión Arquitectónica para Cómputo en GCP
Elegir el servicio de cómputo adecuado define la resiliencia operativa, la sobrecarga de mantenimiento y la eficiencia de costes (FinOps) de tu plataforma empresarial:
| Plataforma | Nivel de Control | Latencia de Escala | Modelo de Costes (FinOps) | Caso de Uso Óptimo |
|---|---|---|---|---|
| GKE Standard | Máximo (Control de Nodos, OS, CNI) | Media (Segundos a minutos para aprovisionar VMs) | Por Compute Engine (VMs fijas/Spot) + Gestión | Microservicios de alta concurrencia, StatefulSets y control de kernel |
| GKE Autopilot | Medio (Solo configuración de Pods) | Rápida (Pods elásticos automáticos) | Pago por recurso solicitado (vCPU / vRAM) | Equipos con foco puramente en desarrollo sin equipo de infra dedicado |
| Cloud Run | Bajo (Serveless Containers) | Ultra Rápida (Escala a cero en milisegundos) | Pago por invocación y tiempo de CPU activa | APIs REST sin estado, microservicios HTTP y webhooks esporádicos |
| Compute Engine (MIGs) | Total (Infraestructura IaaS pura) | Lenta (Inicio de imagen OS y aprovisionamiento) | Instancias dedicadas 24/7 o programadas | Cargas monolíticas heredadas sin contenedorizar |
Un error recurrente en implementaciones iniciales de GKE es utilizar la Default Compute Engine Service Account ([PROJECT_NUMBER]-compute@developer.gserviceaccount.com) con permisos de Editor en los nodos. Si un pod es comprometido, un atacante obtiene control total del proyecto GCP.
Solución: Crea siempre una Service Account dedicada con el principio de mínimo privilegio (roles/container.nodeServiceAccount) y gestiona la activación de APIs (container.googleapis.com, compute.googleapis.com) y la asociación a la cuenta de facturación mediante variables de entorno seguras de Terraform.
Implementación Práctica en Terraform (HCL)
A continuación se detalla la estructura declarativa generada para orquestar la VPC, la subred y el clúster GKE con su node pool administrado:
# variables.tf
variable "billing_account_id" {
description = "ID de la cuenta de facturacion de Google Cloud"
type = string
}
variable "project_name" {
description = "Nombre identificador del proyecto"
type = string
default = "gke-dev-env"
}
variable "region" {
description = "Region principal de despliegue"
type = string
default = "europe-west1"
}
variable "zone" {
description = "Zona dentro de la region"
type = string
default = "europe-west1-b"
}
# main.tf
terraform {
required_version = ">= 1.5.0"
required_providers {
google = {
source = "hashicorp/google"
version = "~> 5.0"
}
random = {
source = "hashicorp/random"
version = "~> 3.5"
}
}
}
resource "random_id" "project_suffix" {
byte_length = 4
}
resource "google_project" "gke_project" {
name = var.project_name
project_id = "${var.project_name}-${random_id.project_suffix.hex}"
billing_account = var.billing_account_id
}
resource "google_project_service" "enabled_apis" {
for_each = toset([
"compute.googleapis.com",
"container.googleapis.com"
])
project = google_project.gke_project.project_id
service = each.key
disable_on_destroy = false
}
resource "google_compute_network" "custom_vpc" {
name = "gke-custom-vpc"
project = google_project.gke_project.project_id
auto_create_subnetworks = false
depends_on = [google_project_service.enabled_apis]
}
resource "google_compute_subnetwork" "gke_subnet" {
name = "gke-subnet-01"
project = google_project.gke_project.project_id
region = var.region
network = google_compute_network.custom_vpc.id
ip_cidr_range = "10.10.0.0/24"
}
resource "google_container_cluster" "primary" {
name = "gke-dev-cluster"
project = google_project.gke_project.project_id
location = var.zone
network = google_compute_network.custom_vpc.name
subnetwork = google_compute_subnetwork.gke_subnet.name
# Desactivamos el pool por defecto para gestionar un node pool independiente
remove_default_node_pool = true
initial_node_count = 1
deletion_protection = false
depends_on = [google_project_service.enabled_apis]
}
resource "google_container_node_pool" "primary_nodes" {
name = "primary-node-pool"
project = google_project.gke_project.project_id
location = var.zone
cluster = google_container_cluster.primary.name
node_count = 1
node_config {
machine_type = "e2-small"
disk_size_gb = 30
oauth_scopes = [
"https://www.googleapis.com/auth/cloud-platform"
]
labels = {
environment = "development"
}
}
}
Framework de Implementación Paso a Paso
-
Configuración del Entorno de Ejecución (WSL / Linux)
Autentica tu sesión de desarrollo para que Terraform pueda consumir las credenciales del Cloud SDK:
gcloud auth application-default login -
Inicialización y Planificación de Terraform
Descarga los proveedores e inspecciona el grafo de recursos que serán creados en GCP:
terraform init terraform plan -
Aprovisionamiento del Clúster en GCP
Aplica la configuración declarativa para orquestar el proyecto, APIs, redes y nodos:
terraform apply -auto-approve -
Obtención de Credenciales y Verificación con Kubernetes
Configura el contexto de
kubectlpara interactuar de forma segura con el plano de control de GKE:gcloud container clusters get-credentials gke-dev-cluster --zone europe-west1-b --project [PROJECT_ID] kubectl get nodes kubectl create deployment hola-mundo --image=nginx kubectl get pods
Preguntas Frecuentes Técnicas (FAQ)
La integración de agentes como Antigravity permite convertir requerimientos de alto nivel en configuraciones HCL completas y sintácticamente válidas en segundos. Esto libera al arquitecto de tareas repetitivas de sintaxis y le permite concentrarse en la resiliencia, seguridad y optimización de costes.
En GKE Standard el equipo de arquitectura tiene control absoluto sobre el dimensionamiento de las instancias Compute Engine, parámetros de red y políticas de autoescalado. En GKE Autopilot, Google gestiona por completo los nodos y el cobro se basa en la reserva exacta de recursos declarada en los Pods.
Ejecutando gcloud auth application-default login se abre el flujo OAuth en el navegador y se almacena el token localmente en ~/.config/gcloud/application_default_credentials.json, permitiendo al Google Provider de Terraform actuar con tus permisos sin exponer Service Account Keys en texto plano.
