Enunciado — Proyecto: Primeros pasos con Kubernetes (Pods, Deployments, Services)

4 min

Práctica · Módulo 07 — Kubernetes: conceptos fundamentales · Nivel principiante → intermedio

¡Inténtalo primero solo! Realiza el proyecto con este único enunciado. La corrección (manifiestos YAML comentados + comandos kubectl) está en el README.md, plegada. No la abras hasta haberlo intentado.


No hace falta minikube

No tienes que instalar nada más: Docker Desktop incluye un clúster Kubernetes integrado.

  1. Abre Docker Desktop → Settings (⚙️) → Kubernetes.
  2. Marca « Enable Kubernetes », pulsa Apply & Restart y espera a que el indicador pase a verde.
  3. Comprueba en un terminal:
    powershell
    kubectl get nodes
    Debes ver un nodo docker-desktop en estado Ready.

(Alternativas posibles: minikube start o kind create cluster. El proyecto también funciona, cargando la imagen — ver 02-COMMANDES.md.)


Objetivo

Desplegar una pequeña aplicación web en Kubernetes con varias réplicas (Pods), exponerla mediante un Service y practicar los gestos del día a día: scaling, rolling update, rollback y autorreparación.


El resultado esperado

Al recargar la página, cambia el nombre del Pod que responde: prueba de que el Service reparte la carga entre los Pods.


Trabajo a realizar

Parte 1 — Construir la imagen

  1. Retoma la app web del módulo 06 (o escribe una app que, en /, muestre su hostname = el nombre del Pod).
  2. Construye la imagen en local y nómbrala demo-k8s:1.0.

Parte 2 — El Deployment (los Pods)

  1. Escribe un manifiesto Deployment con 3 réplicas, labels coherentes (app: demo-web) y una sonda (readinessProbe / livenessProbe) en /health.
  2. Aplícalo, luego lista e inspecciona tus Pods (kubectl get pods, kubectl describe pod ..., kubectl logs ...).

Parte 3 — El Service (exponer + repartir)

  1. Escribe un Service de tipo NodePort (puerto 30080) que apunte a los Pods mediante el selector de labels.
  2. Abre http://localhost:30080 y recarga: comprueba que cambia el nombre del Pod.

Parte 4 — La configuración (ConfigMap + variables de entorno)

  1. Crea un ConfigMap que contenga APP_TITLE, APP_VERSION y BG_COLOR, e inyéctalo en los Pods (envFrom).
  2. Cambia BG_COLOR, vuelve a aplicar el ConfigMap, reinicia los Pods (kubectl rollout restart) y observa el nuevo color.

Parte 5 — Los gestos del día a día

  1. Scaling: pasa a 5 réplicas (kubectl scale) y luego vuelve a 3.
  2. Rolling update: cambia APP_VERSION, aplica y sigue el despliegue progresivo (kubectl rollout status).
  3. Rollback: vuelve a la versión anterior (kubectl rollout undo).
  4. Autorreparación: elimina un Pod a mano (kubectl delete pod ...) y comprueba que Kubernetes crea otro solo.

Preguntas de reflexión

  • ¿Cuál es la diferencia entre un Pod, un ReplicaSet y un Deployment?
  • ¿Por qué se pasa por un Service en vez de contactar un Pod directamente por su IP?
  • ¿Para qué sirve el selector de labels entre el Service y los Pods?
  • ¿Por qué separar la configuración (ConfigMap) del código (imagen Docker)?
  • ¿Qué hace Kubernetes cuando un Pod se cae? ¿Y durante un rolling update?

Entregables

  • La carpeta app/ (código + Dockerfile) y la carpeta k8s/ (configmap.yaml, deployment.yaml, service.yaml).
  • Una captura que muestre al menos 2 nombres de Pod distintos en el navegador (o vía curl).
  • La salida de kubectl get pods que muestre 3/3 Pods Running.
  • Una captura de un kubectl rollout status durante un rolling update.

Criterios de éxito

CriterioEsperado
Imagen construidademo-k8s:1.0 disponible para el clúster
Deployment3 Pods Running, sondas OK
ServicePágina accesible en localhost:30080, el nombre del Pod cambia
ConfigMapEl cambio de BG_COLOR es visible tras volver a aplicar
Ciclo de vidaScaling, rolling update, rollback y autorreparación demostrados

¿Bloqueado? El README.md contiene la corrección completa (manifiestos comentados + comandos), y la chuleta de comandos lista todo el kubectl útil — a consultar después de haberlo intentado.