Si ya sabes construir una imagen con Docker y ejecutar un contenedor, tienes la mitad del camino hecho: sabes empaquetar software. Lo que Kubernetes resuelve es la otra mitad, la que aparece cuando ese contenedor deja de estar solo en tu portátil y pasa a ser uno de los cuarenta que deben estar vivos, accesibles y actualizados a las tres de la madrugada de un viernes de puente. Esta lección explica exactamente qué problema resuelve la orquestación de contenedores, de dónde viene Kubernetes, qué aporta frente a las alternativas y —muy importante— cuándo no conviene usarlo. Es la lección que da sentido a todas las demás: sin entender el problema, las soluciones de los próximos once módulos parecen complicaciones gratuitas.
Contenido
- Del contenedor suelto a la flota
- El salto desde Docker y Docker Compose
- Breve historia: de Borg a la CNCF
- Qué aporta Kubernetes exactamente
- Kubernetes frente a las alternativas
- Cuándo NO conviene usar Kubernetes
- El escenario del curso: Rutas Norte S.L.
- Del contenedor suelto a la flota
Un contenedor resuelve un problema muy concreto: empaquetar una aplicación con sus dependencias para que se ejecute igual en cualquier máquina con un runtime de contenedores. Eso es enorme, pero es solo el envase.
En cuanto pasas a producción aparecen preguntas que el contenedor, por sí mismo, no responde:
- Ubicación: tengo 5 servidores y 40 contenedores. ¿Cuál va dónde? ¿Y cuando añada el sexto servidor?
- Supervivencia: el proceso ha muerto a las 03:14. ¿Quién lo vuelve a levantar? ¿Y si la máquina entera se ha apagado?
- Escalado: hoy necesito 3 réplicas de la API y el viernes de Semana Santa necesitaré 20. ¿Quién las arranca y quién las apaga después?
- Descubrimiento: la API se ha reiniciado y ahora tiene otra IP. ¿Cómo se entera el frontend?
- Reparto de carga: si hay 20 réplicas, ¿quién decide a cuál va cada petición?
- Despliegue sin corte: quiero publicar la versión 2.4.0 sin que ningún cliente vea un error 502.
- Configuración y secretos: la contraseña de la base de datos no puede estar en la imagen ni en el
git log. - Recursos: un contenedor que se vuelve loco no puede tumbar a los otros nueve de la misma máquina.
Cada una de esas preguntas, resuelta a mano, se convierte en un script. La suma de esos scripts, mantenida por una persona que se va de vacaciones, es la razón por la que existe la orquestación de contenedores.
Un orquestador es, en una frase: un sistema al que le describes el estado que quieres y que se encarga permanentemente de que la realidad se parezca a esa descripción. Tú dices "quiero 5 réplicas de la API en la versión 2.4.0, accesibles en api.rutasnorte.example"; el orquestador se encarga de decidir dónde caben, arrancarlas, vigilarlas, sustituir las que mueran y enrutar el tráfico.
El cambio de mentalidad: imperativo frente a declarativo
Este es el concepto que más cuesta al principio y el que más rendimiento da después.
| Enfoque | Cómo se expresa | Ejemplo | Quién mantiene el estado |
|---|---|---|---|
| Imperativo | Secuencia de órdenes | "arranca este contenedor", "para aquel", "copia este fichero" | Tú, mentalmente y con scripts |
| Declarativo | Descripción del resultado | "debe haber 5 réplicas de esta imagen con esta configuración" | El sistema, en un bucle continuo |
Docker es fundamentalmente imperativo (docker run). Kubernetes es fundamentalmente declarativo: escribes un fichero que describe lo que quieres, lo entregas al clúster, y a partir de ahí el clúster trabaja para ti de forma permanente. Si alguien borra un contenedor, vuelve. Si un servidor se cae, sus cargas reaparecen en otro. A este mecanismo se le llama bucle de reconciliación y lo estudiaremos a fondo en la lección Arquitectura de Kubernetes.
- El salto desde Docker y Docker Compose
Conviene aclarar una confusión muy habitual: Kubernetes no sustituye a Docker, sustituye a lo que hacías alrededor de Docker.
- Docker (o cualquier herramienta compatible con OCI) sigue siendo lo que usas para construir imágenes.
- El registro de imágenes sigue existiendo.
- Lo que cambia es quién ejecuta y gobierna esos contenedores.
Docker Compose es el paso intermedio natural. Con un docker-compose.yml describes varios servicios, sus redes y volúmenes, y con un comando levantas todo el stack. Es declarativo... dentro de una sola máquina. Ahí está su techo:
# docker-compose.yml simplificado del entorno actual de Rutas Norte
# Funciona perfectamente... en UNA máquina.
services:
tienda-web:
image: registry.rutasnorte.example/tienda-web:1.8.0
ports: ["80:80"]
api-reservas:
image: registry.rutasnorte.example/api-reservas:2.3.1
environment:
DB_HOST: postgres-reservas
postgres-reservas:
image: postgres:16
volumes: ["datos:/var/lib/postgresql/data"]
volumes:
datos:Lo que este fichero no puede hacer:
- Repartir esos servicios entre 5 máquinas.
- Volver a arrancar el stack en otro servidor si el actual se apaga.
- Escalar
api-reservasa 20 réplicas repartidas y balanceadas. - Sustituir la imagen
2.3.1por la2.4.0de forma progresiva y con vuelta atrás automática si falla. - Aislar entornos (
dev,pre,pro) con permisos y cuotas distintos.
Kubernetes hace exactamente esas cinco cosas, y ese es el salto. El precio es una curva de aprendizaje y una capa de conceptos nuevos, que es justamente lo que este curso te va a dar.
- Breve historia: de Borg a la CNCF
Kubernetes no nació como un experimento. Es la tercera generación de una idea probada durante más de una década.
| Etapa | Qué pasó | Por qué importa |
|---|---|---|
| ~2003–2014 | Google opera internamente Borg, y después Omega, sistemas que ejecutan miles de millones de contenedores semanales | Kubernetes hereda sus ideas: pods, etiquetas, controladores, planificador central |
| 2013 | Docker populariza los contenedores para todo el mundo | Aparece el envase estándar; falta el gobierno |
| Junio 2014 | Google libera Kubernetes como proyecto de código abierto | El nombre viene del griego κυβερνήτης, "timonel". De ahí el abreviado K8s (K + 8 letras + s) |
| Julio 2015 | Versión 1.0 y donación a la CNCF (Cloud Native Computing Foundation), bajo la Linux Foundation | Deja de ser "de Google": gobernanza neutral, lo que permitió su adopción por AWS, Microsoft, Red Hat, VMware... |
| 2016–2018 | Docker Swarm, Mesos y otros compiten; el ecosistema converge en Kubernetes | Se convierte en el estándar de facto |
| 2020–hoy | Se retira dockershim, el runtime pasa a hablarse vía CRI (containerd, CRI-O). Ciclo de ~3 versiones menores al año |
Explica por qué hoy se dice "Kubernetes ya no usa Docker" (usa containerd directamente) |
El dato relevante para ti como profesional: al estar bajo la CNCF con gobernanza neutral, Kubernetes es la única capa de orquestación que se ejecuta prácticamente igual en tu portátil, en un centro de datos propio y en AWS, Azure o Google Cloud. Esa portabilidad es un argumento de negocio, no solo técnico.
- Qué aporta Kubernetes exactamente
Vamos a concretar las capacidades, porque "orquestar" es demasiado vago.
4.1. Estado declarativo y reconciliación
Describes el resultado en un fichero YAML y el clúster lo mantiene. No ejecutas pasos: publicas intenciones. Todo lo demás de esta lista se deriva de aquí.
4.2. Autorreparación
- Si un contenedor termina con error, se reinicia.
- Si un contenedor está vivo pero no responde (lo detectan las sondas, módulo 7), se reinicia.
- Si un nodo entero deja de responder, sus cargas se recrean en otros nodos.
- Si alguien borra una réplica a mano, vuelve a aparecer.
4.3. Escalado horizontal, manual y automático
Puedes pasar de 3 a 20 réplicas con un comando, o dejar que el clúster lo haga solo según CPU, memoria o métricas de negocio (módulo 9). Para Rutas Norte, cuyos picos de tráfico se concentran en puentes y vacaciones, esto es directamente dinero: no se paga capacidad ociosa en febrero para sobrevivir a agosto.
4.4. Descubrimiento de servicios y balanceo
Las réplicas nacen y mueren con IPs distintas. Kubernetes te da un nombre estable (api-reservas) que resuelve por DNS interno y reparte el tráfico entre las réplicas sanas. El frontend nunca conoce IPs. Lo verás en el módulo 4.
4.5. Despliegues progresivos y sin corte
Cambias la versión de la imagen y el clúster sustituye las réplicas poco a poco, comprobando que las nuevas están sanas antes de retirar las viejas. Si algo va mal, rollback a la versión anterior. Módulo 2.
4.6. Gestión de configuración y secretos
La configuración se separa de la imagen (ConfigMaps) y las credenciales se gestionan aparte, con control de acceso (Secrets). Como postgres-reservas guarda datos personales de clientes, esto no es opcional para Rutas Norte: es cumplimiento normativo. Módulo 3.
4.7. Portabilidad
Los mismos manifiestos funcionan en minikube, en un clúster propio con kubeadm o en EKS/AKS/GKE. Cambian los detalles de infraestructura (tipo de almacenamiento, balanceador), no la descripción de la aplicación.
4.8. Extensibilidad
Puedes añadir tus propios tipos de objeto (CRDs) y tu propia lógica de reconciliación (operadores, módulo 6). Kubernetes no es solo un orquestador: es una plataforma para construir plataformas.
- Kubernetes frente a las alternativas
Ninguna herramienta es la mejor en abstracto. Esta tabla te sirve para justificar una decisión ante un equipo o un cliente.
| Criterio | Kubernetes | Docker Compose | Docker Swarm | HashiCorp Nomad | PaaS (Heroku, App Engine, Cloud Run) |
|---|---|---|---|---|---|
| Ámbito | Clúster multinodo | Una máquina | Clúster multinodo | Clúster multinodo | Servicio gestionado |
| Curva de aprendizaje | Alta | Muy baja | Baja | Media | Muy baja |
| Autorreparación | Sí, completa | No (solo restart) |
Sí, básica | Sí | Sí (opaca) |
| Autoescalado | Sí (pods, nodos, eventos) | No | No nativo | Con integraciones | Sí, gestionado |
| Cargas no contenedorizadas | No (solo contenedores) | No | No | Sí (binarios, Java, QEMU) | No |
| Ecosistema y comunidad | Enorme (CNCF) | Grande pero acotado | En declive | Modesto | Cerrado por proveedor |
| Portabilidad entre nubes | Muy alta | Alta (pero sin clúster) | Media | Alta | Nula: dependencia del proveedor |
| Coste operativo | Alto | Casi nulo | Bajo | Medio | Bajo (se paga en factura) |
| Control fino (red, almacenamiento, seguridad) | Total | Escaso | Limitado | Bueno | Escaso |
| Encaje típico | Producción seria, varios equipos y servicios | Desarrollo local y demos | Stacks pequeños que ya lo usan | Entornos mixtos contenedor + no contenedor | Equipos pequeños que priorizan velocidad |
Lecturas rápidas de la tabla:
- Docker Compose no compite con Kubernetes: convive. Seguirás usándolo en local.
- Swarm es más simple, pero su comunidad y su ecosistema se han reducido drásticamente; empezar un proyecto nuevo con Swarm hoy es asumir una deuda.
- Nomad es la alternativa seria si tienes cargas que no son contenedores.
- Un PaaS puede ser la respuesta correcta, y no es un fracaso admitirlo. Se paga más por unidad de cómputo, pero se ahorra en personas.
- Cuándo NO conviene usar Kubernetes
Un profesional se distingue por saber cuándo no aplicar la herramienta. Señales claras de que Kubernetes es excesivo:
- Equipo pequeño sin perfil de plataforma. Kubernetes necesita alguien que lo cuide: actualizaciones cada pocos meses, certificados, monitorización, permisos. Si nadie tiene ese tiempo asignado, el clúster se degrada.
- Una sola aplicación monolítica con tráfico estable. Si dos máquinas y un balanceador cubren tu carga todo el año, el clúster solo añade piezas que pueden fallar.
- Cargas triviales o efímeras. Un cron diario que tarda 40 segundos no justifica un plano de control.
- Necesidad de resultados inmediatos. La migración es un proyecto de semanas o meses. Si el negocio necesita entregar en dos semanas, un PaaS entrega antes.
- Aplicaciones fuertemente ligadas a un servidor concreto (licencias por máquina, hardware especial, estado en disco local sin réplica). Se puede hacer, pero luchas contra el diseño.
- Coste real mal calculado. Un clúster gestionado tiene coste de plano de control, nodos con capacidad reservada, tráfico y almacenamiento. Para tres contenedores, sale caro.
Regla práctica: Kubernetes empieza a rentar cuando tienes varios servicios, varios entornos y más de una persona desplegando. Antes de eso, suele ser una solución buscando un problema.
- El escenario del curso: Rutas Norte S.L.
Todo el curso gira alrededor de una empresa ficticia: Rutas Norte S.L., que vende billetes de autobús por internet a través de la plataforma Rutas Norte. Aquí solo la presentamos; el detalle completo está en la lección El Proyecto del Curso: la Plataforma Rutas Norte.
Su situación de partida es la de muchísimas empresas reales:
- La plataforma corre con Docker Compose sobre dos máquinas alquiladas.
- Los despliegues son manuales: alguien entra por SSH, hace
docker compose pullyup -d. Hay corte de servicio de uno o dos minutos, así que se despliega de noche. - En puentes y vacaciones el tráfico se multiplica; la web se ralentiza y algunas reservas se pierden. La única respuesta es contratar una máquina más grande y dejarla ociosa el resto del año.
- Cuando un contenedor muere de madrugada, nadie lo levanta hasta la mañana siguiente.
- La contraseña de la base de datos está en un fichero
.envque se ha copiado por correo más veces de las que nadie quiere admitir; y esa base de datos guarda datos personales de clientes.
La dirección técnica ha decidido migrar a Kubernetes por cuatro razones, que son exactamente las capacidades de la sección 4:
| Problema actual | Capacidad que lo resuelve | Módulo donde se aborda |
|---|---|---|
| Caídas nocturnas sin respuesta | Autorreparación | 2 y 7 |
| Picos de puentes y vacaciones | Autoescalado horizontal | 9 |
| Despliegues con corte de servicio | Actualizaciones progresivas y rollback | 2 y 11 |
| Credenciales y datos personales expuestos | Secrets, RBAC y políticas de red | 3, 4 y 8 |
A partir de la próxima lección iremos construyendo esa plataforma pieza a pieza, y cada concepto nuevo se justificará con una necesidad concreta de Rutas Norte.
Errores Comunes y Consejos
- "Kubernetes sustituye a Docker". No. Sigues construyendo imágenes igual. Lo que Kubernetes sustituye es
docker run, los scripts de arranque y el balanceador manual. Desde la versión 1.24 el clúster habla con containerd o CRI-O a través de la interfaz CRI, no con el demonio de Docker: por eso desapareciódockershim. - Traducir
docker-compose.ymlmecánicamente. Existen herramientas de conversión, pero el resultado suele ser un mal despliegue: no aprovecha sondas, ni límites de recursos, ni configuración externalizada. Conviene rediseñar, no traducir. - Empezar por el clúster de producción. El orden correcto es: entorno local (módulo 1), entender objetos (módulos 2 y 3), y solo entonces plantear producción.
- Creer que Kubernetes te hace la aplicación resiliente. El clúster reinicia contenedores; no arregla una aplicación que pierde datos al reiniciarse o que no tolera tener varias instancias. Kubernetes premia las aplicaciones bien diseñadas y castiga las que no lo están.
- Ignorar el coste de las personas. El presupuesto de un clúster no es solo infraestructura: es formación, guardias y mantenimiento. Ponlo por escrito antes de proponer la migración.
- Consejo de vocabulario: acostúmbrate desde hoy a decir "estado deseado" y "reconciliación". Cuando algo no funcione en el clúster, la pregunta correcta casi siempre es: ¿qué estado he declarado y por qué el clúster no puede alcanzarlo?
Ejercicios
Ejercicio 1: Diagnóstico del escenario
Sin escribir ningún manifiesto, elabora una tabla con los cinco problemas operativos que sufre Rutas Norte hoy y, para cada uno, indica: (a) qué capacidad de Kubernetes lo resolvería, y (b) qué pasaría si la empresa decidiera no migrar y simplemente contratar servidores más grandes.
Ejercicio 2: Decisión de arquitectura
Para cada uno de estos tres casos, decide si recomendarías Kubernetes, un PaaS o Docker Compose, y justifica la decisión en tres líneas:
- Una startup de dos personas con una aplicación web y una base de datos, que necesita salir al mercado en un mes.
- Una aseguradora con 60 microservicios, tres entornos, requisitos de auditoría y equipos en dos países.
- Un blog corporativo estático con 200 visitas al día.
Ejercicio 3: Argumentario para dirección
Escribe un párrafo de un máximo de 150 palabras dirigido a la dirección no técnica de Rutas Norte explicando por qué migrar a Kubernetes, sin usar las palabras "pod", "contenedor" ni "clúster". Debe mencionar coste, disponibilidad y datos de clientes.
Soluciones
Solución 1
| Problema actual | Capacidad de Kubernetes | Si no se migra y solo se agranda el servidor |
|---|---|---|
| Contenedor caído de madrugada sin recuperación | Autorreparación: reinicio y recreación automática | Un servidor más grande no reinicia nada: la caída dura igual |
| Picos en puentes y vacaciones | Autoescalado horizontal | Se paga todo el año la capacidad del pico; sigue habiendo un techo fijo |
| Despliegue con corte de servicio | Actualización progresiva con comprobación de salud y rollback | El corte se mantiene; solo cambia de máquina |
Credenciales en .env compartido |
Secrets con control de acceso y RBAC | No mejora en absoluto; es un problema de proceso, no de tamaño |
| Punto único de fallo (dos máquinas) | Reprogramación de cargas en otros nodos | Un servidor grande es un punto único de fallo mayor |
Solución 2
- PaaS. Dos personas no pueden mantener un clúster y salir al mercado en un mes. La prioridad es entregar; la dependencia del proveedor es un problema aceptable que se resuelve más adelante si el producto funciona.
- Kubernetes. 60 microservicios, tres entornos y auditoría son exactamente el punto donde el coste operativo se amortiza: RBAC, namespaces por entorno, políticas de red y despliegues homogéneos entre equipos y países.
- Ninguno de los tres, o Docker Compose como mucho. 200 visitas al día en un sitio estático se sirven con alojamiento estático o una CDN. Cualquier orquestador es coste puro sin beneficio.
Solución 3 (ejemplo de respuesta válida)
Hoy la venta de billetes depende de dos máquinas que gestionamos a mano. Cuando algo falla de noche, no se recupera hasta la mañana siguiente, y en puentes y vacaciones —justo cuando más vendemos— la web se ralentiza y perdemos reservas. Además, pagamos todo el año una capacidad que solo necesitamos unas semanas. La nueva plataforma que proponemos vigila el servicio de forma continua y lo restablece sola si falla, amplía la capacidad automáticamente cuando sube la demanda y la reduce cuando baja, y permite publicar mejoras sin cerrar la web. También separa las claves de acceso a los datos de nuestros clientes del código y registra quién puede consultarlos, lo que refuerza nuestra posición ante una auditoría de protección de datos. El coste inicial es de formación y puesta en marcha; el ahorro está en capacidad no desperdiciada y en ventas que hoy se pierden.
Conclusión
Kubernetes es un orquestador de contenedores: un sistema al que declaras el estado que quieres y que trabaja de forma continua para mantenerlo, aportando autorreparación, escalado, descubrimiento de servicios, despliegues sin corte y portabilidad entre nubes. Nació de la experiencia de Google con Borg, es hoy un proyecto neutral de la CNCF y se ha convertido en el estándar de facto, pero tiene un coste operativo real que lo desaconseja para equipos pequeños y cargas triviales. Rutas Norte encaja de lleno en el perfil que sí lo justifica: varios servicios, varios entornos, picos de demanda pronunciados y datos personales que proteger.
Ya sabes qué hace Kubernetes. La siguiente pregunta es cómo lo hace: qué piezas componen un clúster, cuál es el bucle de reconciliación que sostiene todo el modelo declarativo y qué ocurre exactamente, paso a paso, desde que envías un manifiesto hasta que hay un contenedor corriendo en un nodo. Eso es lo que veremos en Arquitectura de Kubernetes.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- La CLI de Kubernetes: kubectl
- Objetos, Manifiestos YAML y el Modelo Declarativo
- El Proyecto del Curso: la Plataforma Rutas Norte
Módulo 2: Componentes Principales de Kubernetes
- Pods
- ReplicaSets
- Deployments
- Actualizaciones, Rollbacks y Estrategias de Despliegue
- Servicios
- Namespaces
- Etiquetas, Selectores y Anotaciones
Módulo 3: Gestión de Configuración y Secretos
- ConfigMaps
- Secrets
- Variables de Entorno
- Cuotas y Límites de Recursos
- LimitRanges y Clases de Calidad de Servicio (QoS)
- ServiceAccounts y Acceso a la API desde los Pods
Módulo 4: Redes en Kubernetes
- Redes de Clúster
- Tipos de Servicios
- DNS Interno y Descubrimiento de Servicios
- Controladores de Ingress
- TLS y Gestión de Certificados con cert-manager
- Políticas de Red
Módulo 5: Almacenamiento en Kubernetes
- Volúmenes
- Volúmenes Persistentes
- Reclamaciones de Volúmenes Persistentes
- Clases de Almacenamiento
- Aprovisionamiento Dinámico, Expansión y Snapshots
- Copias de Seguridad y Restauración de Datos
Módulo 6: Conceptos Avanzados de Kubernetes
- StatefulSets
- DaemonSets
- Trabajos y CronJobs
- Init Containers, Sidecars y Patrones Multi-Contenedor
- Planificación: Afinidad, Taints y Tolerations
- Definiciones de Recursos Personalizados (CRDs)
- Operadores y el Patrón Controlador
Módulo 7: Monitoreo y Registro
- Verificaciones de Salud y Sondas
- Servidor de Métricas y kubectl top
- Monitoreo con Prometheus
- Visualización y Alertas con Grafana y Alertmanager
- Registro Centralizado con Elasticsearch, Fluentd y Kibana (EFK)
- Depuración de Aplicaciones y Eventos del Clúster
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Contextos de Seguridad y Endurecimiento del Contenedor
- Políticas de Seguridad de Pods y Pod Security Standards
- Seguridad de Red
- Seguridad de Imágenes
- Auditoría, Escaneo y Gestión de Vulnerabilidades
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Escalado por Eventos y Métricas Personalizadas con KEDA
- Alta Disponibilidad: PodDisruptionBudgets y Topología
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
- Minikube y Entornos Locales con kind
- Kubeadm
- Helm
- Kustomize
- GitOps con Argo CD y Flux
- Kubernetes Gestionado: EKS, AKS y GKE
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- Ejecución de Aplicaciones con Estado
- CI/CD con Kubernetes
- Estrategias de Despliegue: Blue-Green y Canary
- Gestión Multi-Clúster
- Operación en Producción: Incidencias, Runbooks y Costes
