Aprende a automatizar el despliegue, escalado y gestión de tus aplicaciones contenedorizadas a nivel de producción.
Si Docker empaqueta una aplicación, **Kubernetes (K8s)** se encarga de que esa aplicación funcione 24/7, escalando automáticamente cuando hay picos de demanda y reiniciándola si falla.
Docker Compose es para **desarrollo** y entornos de una sola máquina. **Kubernetes** es para **producción** y clústeres de múltiples máquinas (nodos) distribuidos en la nube (AWS, Azure, GCP).
K8s ofrece funcionalidades avanzadas como balanceo de carga automático, auto-reparación y descubrimiento de servicios.
Un clúster de Kubernetes es un conjunto de máquinas (Nodos) que trabajan juntas. Se divide en dos componentes principales:
Todo lo que se despliega en Kubernetes se define a través de objetos, escritos en archivos de configuración **YAML**.
Es la unidad más pequeña y más básica que se puede desplegar. Un **Pod** siempre contiene uno o más contenedores que comparten almacenamiento, red y ciclo de vida.
Tu contenedor de ASP.NET Core siempre se ejecuta dentro de un Pod.
Define el estado deseado: cuántas réplicas del Pod quieres y cómo quieres actualizarlas (ej. *rolling update*). Si un Pod muere, el Deployment crea uno nuevo.
Proporciona una dirección IP y un nombre DNS estable para un conjunto de Pods. Asegura que el tráfico se **balancee** entre todos los Pods saludables del Deployment.
Los archivos de configuración de Kubernetes son la aplicación más avanzada de tu conocimiento sobre **YAML** (serialización de datos).
Todo manifiesto K8s requiere cuatro campos principales para definir cualquier objeto:
apiVersion:** Versión de la API de Kubernetes (Ej. `apps/v1`).kind:** Tipo de objeto (Ej. `Deployment` o `Service`).metadata:** Información del objeto (nombre, etiquetas/labels).spec:** Especificación del estado deseado (la clave donde defines el número de réplicas, la imagen Docker, etc.).Este código indica a K8s que mantenga siempre **3 réplicas** de tu imagen ASP.NET Core.
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-backend-deploy
spec:
replicas: 3 # ¡Escala a tres instancias!
selector:
matchLabels:
app: api-backend
template:
metadata:
labels:
app: api-backend
spec:
containers:
- name: aspnet-container
image: tuusuario/aspnetapi:latest # Tu imagen Docker
ports:
- containerPort: 80
Identifica y corrige el error más común al intentar exponer una aplicación al mundo exterior en Kubernetes.
Se ha creado un Deployment llamado web-app. Para permitir que el tráfico externo llegue a la aplicación, ¿cuál es el **tipo de objeto** que falta y cuál de las claves de YAML es esencial para conectarlo al Deployment?
El objeto que falta es el **Service** (`kind: Service`). Un Deployment solo crea Pods, no los expone de manera estable.
La clave esencial para la conexión es el **selector** dentro de la especificación del Service.
kind: Service
metadata:
name: web-app-service
spec:
selector:
app: web-app # ESTO DEBE COINCIDIR con las labels del Pod en el Deployment
ports:
- port: 80
targetPort: 8080 # Puerto del contenedor
type: LoadBalancer # Permite tráfico externo
**Conclusión:** El Service usa el `selector` para encontrar los Pods con las etiquetas coincidentes y balancear el tráfico hacia ellos.