Contenido del curso

Compute on Google Cloud Platform

Google Kubernetes Engine

Streaming Data Analytics

Machine Learning

Fundamentos de Kubernetes y Google Kubernetes Engine

Resumen

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:

  1. Configurar proyecto y zona con gcloud.
  2. Obtener las credenciales del clúster, que Borg entrega al archivo kubeconfig local [6:10].
  3. Crear un deployment con kubectl y desplegarlo sobre el clúster.
  4. 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.