Computación en la Nube · Ingeniería de Datos

Contenedores y Kubernetes en la nube

Explicar qué es un contenedor frente a una VM y cómo un orquestador como Kubernetes despliega, escala y autorrepara cargas de trabajo.

Contenedores y Kubernetes en la nube

Empaquetar es fácil; operar a escala no El "me funciona en mi máquina" se resuelve empaquetando la aplicación con sus dependencias. A escala, el problema cambia: no es arrancar un contenedor, sino mantener vivos cientos de ellos. Ahí entra la orquestación.

Un contenedor empaqueta una aplicación junto a sus librerías y configuración en una imagen que arranca igual en cualquier lado. Es mucho más ligero que una máquina virtual porque comparte el kernel del anfitrión. Kubernetes es el sistema que despliega, escala y autorrepara miles de contenedores.

Contenedor frente a máquina virtual

El contenedor sacrifica aislamiento total a cambio de ligereza y velocidad.
AspectoMáquina virtualContenedor
AislamientoSistema operativo completoProceso aislado, kernel compartido
ArranqueSegundos o minutosMilisegundos
PesoGigabytes de imagenMegabytes
PortabilidadAtada al hipervisorMisma imagen en cualquier lado

Qué resuelve la orquestación

Diagrama de tres bandas: arriba la capa de orquestación declarativa (Deployment, Service, Config/Secret); en el centro los pods con uno o más contenedores; abajo los nodos de cómputo que los ejecutan.
Kubernetes hace converger el estado deseado de la capa alta hacia los pods repartidos en los nodos.

Piezas de Kubernetes

Declaratividad y bucles de control

No le dices a Kubernetes "arranca este contenedor"; declaras el estado deseado (tres réplicas de esta versión) y el sistema trabaja por alcanzarlo y mantenerlo. Si un nodo cae, reprograma las réplicas perdidas sin intervención.

Escalado y despliegues

El autoescalado horizontal añade réplicas cuando sube la carga. Los despliegues son progresivos (rolling update) y reversibles (rollback), lo que permite publicar sin parar el servicio y deshacer si algo sale mal.

Contenedores y datos

Para un ingeniero de datos, el contenedor hace reproducible un pipeline: el mismo job corre en el portátil y en el clúster. Spark puede ejecutarse sobre Kubernetes, y las transformaciones se empaquetan como imágenes versionadas en un registro.

Errores frecuentes

Ejemplo resuelto: un job de datos se desborda

  1. Empaquetar la transformación en una imagen con sus dependencias.
  2. Definir un Deployment con recursos acotados y número de réplicas.
  3. Publicar un Service para que otros sistemas lo llamen de forma estable.
  4. Configurar el autoescalado según la cola de trabajo pendiente.
  5. Hacer un rolling update con la siguiente versión y verificar antes de subir más.

¿Para qué sirve en la realidad?

Convertir aplicaciones en imágenes y delegar su operación a un orquestador elimina la nieve artesanal: los entornos se vuelven reproducibles, escalables y recuperables, en la nube propia o en varias a la vez.

¿Qué ventaja principal tiene un contenedor frente a una máquina virtual?

En Kubernetes declaras el estado deseado y el sistema trabaja por alcanzarlo y mantenerlo.

La unidad desplegable de Kubernetes, con uno o más contenedores que comparten red y volumen, se llama .

Clasifica cada objeto de Kubernetes según su rol.

Trabajo
Exposición y config

Une cada pieza con lo que hace.

Contenedores y K8s

Aplicación más sus dependencias en un paquete portable
contenedor
Orquestador que despliega y escala contenedores
Kubernetes
Unidad desplegable con uno o más contenedores
pod
Dirección estable para un conjunto de pods
service
Declaras el estado deseado y el sistema converge
modelo declarativo

Contenedores y orquestación con Kubernetes

# Kubernetes
## Contenedor
### imagen portable
### comparte kernel
## Objetos
### pod y deployment
### service
### config y secret
## Operacion
### declarativo
### autoscaling
### rolling y rollback

Conceptos de Kubernetes (documentación oficial)
Modelo de objetos, cargas de trabajo y el lazo de control declarativo.

Qué es un contenedor (Docker)
Explicación de referencia de contenedores frente a máquinas virtuales.

Tu equipo corre pipelines de datos en tres máquinas virtuales distintas, con entornos que divergen. ¿Qué ganarías y qué nueva complejidad introducirías al contenedorizar esos jobs y correrlos sobre un clúster gestionado?