Comprender cómo funciona Kubernetes y cómo Google lo implementa a través de Google Kubernetes Engine (GKE) es fundamental para cualquier profesional que trabaje con infraestructura moderna en la nube. A continuación se desglosan los conceptos esenciales: desde qué es un contenedor hasta cómo interactúan los comandos gcloud y kubectl con la arquitectura interna de Google.
¿Qué es Kubernetes y por qué los contenedores cambiaron la infraestructura?
Kubernetes es un orquestador de contenedores y cargas de trabajo [0:17]. Antes de hablar del orquestador, conviene entender qué resuelve un contenedor. A diferencia de las máquinas virtuales, donde un hipervisor simula un sistema operativo completo, un contenedor mantiene un único sistema operativo y solo carga las dependencias y librerías que la aplicación necesita [0:30]. Esto permite arrancar mucho más rápido porque se elimina la carga de iniciar un sistema operativo adicional.
El resultado práctico es una infraestructura más elástica y eficiente: ya no es necesario reservar una máquina virtual entera para una sola aplicación. Solo se consume lo que la aplicación realmente utiliza [1:05].
¿Cuáles son los objetos fundamentales de Kubernetes?
Kubernetes es un proyecto open source gestionado por la Cloud Native Foundation [1:35]. Toda aplicación o servicio se define mediante Kubernetes objects, que se gestionan a través de controladores.
¿Qué es un pod y por qué es la unidad mínima de ejecución?
El objeto más básico no es el contenedor, sino el pod [1:50]. Un pod agrupa uno o varios contenedores y representa la unidad de ejecución mínima. Los pods pueden destruirse o reiniciarse, por eso se consideran generalmente stateless (sin estado) [2:10].
- Servicio: abstracción de la capa de red que permite seguir consultando un pod aunque se destruya y se recree. Funciona como la puerta de entrada a tu aplicación [2:20].
- Volumen: almacenamiento que se adjunta a un pod. Puede ser disco, NAS o sistemas NFS. Cuando el pod se destruye, el volumen también se elimina [2:40].
- Namespace: mecanismo para subdividir un clúster y lograr un ambiente multitenant. Permite aislar despliegues con políticas de seguridad y despliegue diferentes, por ejemplo separando front de back [3:00].
¿Cómo funcionan los controladores en Kubernetes?
Los controladores definen cómo se gestionan los objetos:
- ReplicaSet: define cuántas réplicas de un pod deben existir. Escanea la infraestructura y garantiza la cantidad correcta [3:25]. Sin embargo, no se recomienda definir despliegues directamente con replica sets porque no escala bien: cada actualización requiere editar archivo por archivo [3:45].
- Deployment: centraliza la definición de un pod y su replica set, facilitando actualizaciones masivas desde un solo punto [4:00].
- StatefulSet: variante del deployment que mantiene trazabilidad asignando un identificador único a cada pod, útil cuando la aplicación necesita conservar estado [4:10].
- DaemonSet: despliega un pod específico en algunos o todos los nodos. Ideal para herramientas de monitoreo como Fluentd o Grafana [4:30].
- Job: levanta un replica set, ejecuta un trabajo concreto y se elimina al finalizar [4:50].
¿Cómo se relacionan gcloud, kubectl y Borg en la arquitectura de GKE?
Una confusión frecuente al empezar con GKE es por qué se usan dos comandos distintos. La clave está en la arquitectura interna: GKE corre sobre Google Compute Engine, que a su vez corre sobre Borg, el orquestador de contenedores original de Google [5:15]. Como lo describe Ian Lewis: "contenedores que se ejecutan en máquinas virtuales, que se ejecutan en contenedores".
- Cuando ejecutas
gcloud, te comunicas con la API de GKE y, por debajo, con Borg [5:40].
- Cuando ejecutas
kubectl, te conectas directamente con el nodo master de tu clúster de Kubernetes [5:50].
El flujo práctico para levantar un clúster es:
- Configurar proyecto y zona con
gcloud.
- Obtener las credenciales del clúster, que Borg entrega al archivo kubeconfig local [6:10].
- Crear un deployment con
kubectl y desplegarlo sobre el clúster.
- Exponer los puertos con
kubectl expose, enlazando un puerto interno a uno externo mediante el balanceador de cargas que GKE incorpora [6:40].
Este proceso puede ejecutarse desde Cloud Shell, la consola de Google Cloud Platform o tu máquina local. Una vez autenticado contra el nodo master, ya puedes desplegar y gestionar cualquier aplicación.
Si ya trabajas con contenedores o estás dando tus primeros pasos con GKE, comparte en los comentarios qué controlador utilizas más y cómo organizas tus namespaces.