Fundamentos de Kubernetes y Google Kubernetes Engine

Clase 21 de 48Entrenamiento de Google Cloud Platform

Contenido del curso

Compute on Google Cloud Platform

Google Kubernetes Engine

Streaming Data Analytics

Machine Learning

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.