Antes de entender Kubernetes es necesario comprender qué es un contenedor y cómo se ejecuta.
Los contenedores permiten ejecutar aplicaciones de forma aislada, reproducible y portable.
Un contenedor incluye:
Esto permite que:
Para ejecutar contenedores se necesita un motor de contenedores.
Los más conocidos son:
| Motor | Uso principal | Comentario |
|---|---|---|
| Docker | Desarrollo y uso general | El más popular |
| Podman | Alternativa a Docker | Sin daemon, más orientado a seguridad |
| containerd | Infraestructura | Motor usado internamente por Kubernetes |
Docker fue el proyecto que popularizó los contenedores modernos.
Permite:
En muchos entornos de aprendizaje y desarrollo se utiliza Docker Compose, que permite definir aplicaciones completas de forma declarativa mediante archivos YAML.
Docker Compose introduce un concepto muy importante que también aparece después en Kubernetes:
👉 Infraestructura definida como código (modelo declarativo).
Podman es una alternativa compatible con Docker.
Diferencias principales:
En muchos casos es compatible con los comandos de Docker.
containerd es un motor de contenedores más minimalista y orientado a infraestructura.
No está pensado para ser usado directamente por usuarios.
Lo utilizan:
En Kubernetes, el nodo usa containerd para ejecutar los contenedores que el clúster decide desplegar.
Los contenedores se crean a partir de imágenes.
Una imagen es un paquete que contiene:
Es importante entender que:
Las imágenes se almacenan normalmente en repositorios llamados registries como:
También es posible crear imágenes propias mediante un Dockerfile y construirlas con:
docker build
➡️ (Ver documento específico sobre Imágenes de contenedor)
Los contenedores están aislados, pero necesitan interactuar con el exterior para ser útiles.
Hay dos mecanismos fundamentales para ello:
Los contenedores exponen puertos internos que permiten acceder a los servicios que ejecutan.
Por ejemplo:
En Docker es posible publicar esos puertos hacia el host.
Por defecto los contenedores son efímeros.
Si un contenedor se elimina, también desaparecen los datos almacenados dentro de él.
Para evitarlo se utilizan volúmenes, que permiten almacenar datos fuera del contenedor.
Esto se usa especialmente para:
Docker permite ejecutar aplicaciones en contenedores de forma sencilla, pero cuando un sistema crece empiezan a aparecer problemas.
Por ejemplo:
Docker por sí solo no resuelve estos problemas de forma nativa.
Aquí es donde aparece la necesidad de un orquestador de contenedores.
Kubernetes es un sistema diseñado para orquestar contenedores en múltiples servidores.
Permite:
En lugar de gestionar contenedores manualmente, Kubernetes permite definir cómo debe ser el estado deseado del sistema.
El clúster se encarga automáticamente de mantener ese estado.
Es importante entender que:
Docker ejecuta contenedores.
Kubernetes orquesta contenedores.
Kubernetes no ejecuta contenedores directamente.
Los nodos utilizan motores como:
containerdCRI-OUna forma natural de aprender esta tecnología es:
1️⃣ Contenedores
2️⃣ Docker / Docker Compose
3️⃣ Imágenes
4️⃣ Puertos y redes
5️⃣ Volúmenes y persistencia
6️⃣ Kubernetes
Una vez comprendidos estos conceptos, Kubernetes resulta mucho más fácil de entender.