Conceptos clave de Kubernetes
Docker corre contenedores en una máquina. Kubernetes los reparte en varias, los reinicia si se caen, los escala y los conecta. Vos describís lo que querés; el cluster se encarga de que pase.
Arquitectura de un cluster
Un control plane que decide y nodos que ejecutan. Vos solo hablás con la API.
En tu PC (Docker Desktop, minikube, kind) el control plane y el nodo son la misma máquina. La idea es igual.
Cada Pod tiene su propia IP dentro del cluster, pero es efímera: si el Pod se recrea, cambia.
kubectl = el “docker CLI” de Kubernetes. Lee el cluster al que apunta desde ~/.kube/config.
Declarativo: estado deseado vs estado real
No decís “arrancá un contenedor”. Decís “quiero 3” y Kubernetes lo mantiene así para siempre.
Por eso si borrás un Pod de un Deployment vuelve a aparecer: el estado deseado sigue diciendo 3. Para bajarlo, cambiá el deseado (kubectl scale o editá el YAML) o borrá el Deployment.
Deployment → ReplicaSet → Pods
Vos escribís el Deployment. Lo demás lo crea Kubernetes.
Un Pod es la unidad mínima: envuelve uno (o pocos) contenedores que comparten IP y volúmenes. Casi nunca se crean Pods sueltos: se crean con un Deployment.
Glosario de objetos
Los “kinds” que vas a ver en los YAML. Entre paréntesis, el nombre corto para kubectl.
Cluster y Node (no)
El cluster es el conjunto de máquinas. Cada máquina es un nodo que corre Pods.
kubectl get nodes
Pod (po)
Uno o más contenedores que comparten red (misma IP, se hablan por localhost) y volúmenes. Efímero.
- ≈ un
docker run
Deployment (deploy)
Declara qué imagen y cuántas réplicas. Se encarga de recrear, escalar y actualizar sin cortes (rolling update).
- Para apps sin estado (APIs, frontends)
ReplicaSet (rs)
Mantiene N Pods idénticos vivos. Lo crea el Deployment; cada versión nueva genera un ReplicaSet nuevo (así funciona el rollback).
Service (svc)
IP y nombre DNS fijos delante de un grupo de Pods (elegidos por labels). Balancea entre ellos.
- Tipos:
ClusterIP,NodePort,LoadBalancer
Ingress (ing)
Entrada HTTP/HTTPS desde afuera: rutea por dominio y path hacia Services. Necesita un Ingress Controller instalado (ej. Traefik). Su sucesor es la Gateway API.
ConfigMap (cm)
Configuración no sensible (URLs, flags, archivos de config) que se inyecta como variables de entorno o archivos.
Secret
Como ConfigMap pero para contraseñas y tokens. Ojo: está en base64, no cifrado por defecto.
PersistentVolumeClaim (pvc)
Un “pedido” de disco (ej. 1Gi). El cluster lo satisface con un PersistentVolume (pv). ≈ volumen nombrado de Docker.
Namespace (ns)
Carpeta lógica para separar recursos (dev / prod / equipo). Los nombres son únicos dentro de un namespace.
- Por defecto:
default
StatefulSet (sts) · DaemonSet (ds)
StatefulSet: Pods con nombre e identidad estables y disco propio (bases de datos). DaemonSet: un Pod en cada nodo (logs, monitoreo).
Job · CronJob (cj)
Job: corre hasta terminar (migraciones, scripts). CronJob: un Job programado ("0 3 * * *").
Lo que ya sabés de Docker, en Kubernetes
Traducción directa para tus proyectos.
Docker / Compose → Kubernetes
| En Docker | En Kubernetes | Nota |
|---|---|---|
docker run | Pod | En la práctica, siempre vía Deployment |
| Un servicio del compose | Deployment + Service | El Deployment corre los Pods, el Service les da nombre |
docker-compose.yml | Manifiestos YAML (uno o varios) | Separados con --- |
docker compose up -d | kubectl apply -f k8s/ | Crea o actualiza todo lo de la carpeta |
docker compose down | kubectl delete -f k8s/ | Los PVC se borran si están en esos archivos |
ports: "3000:3000" | Service NodePort / Ingress / port-forward | Para pruebas: kubectl port-forward |
| Nombre del servicio como host | Nombre del Service como host | monguito:27017 sigue funcionando |
environment: | env / ConfigMap / Secret | Secrets para contraseñas |
volumes: mongo-data:/data/db | PVC + volumeMounts | Mismo path dentro del contenedor |
restart: unless-stopped | Automático en Deployment | Los Pods se recrean solos |
depends_on | No existe | Usar readinessProbe, reintentos o initContainers |
docker ps | kubectl get pods | |
docker logs -f | kubectl logs -f | |
docker exec -it … sh | kubectl exec -it … -- sh | Ojo con el -- |
docker build | Sigue siendo docker build | Kubernetes no construye imágenes, solo las corre |