¿Qué es Kubernetes?
Kubernetes (K8s) es una plataforma de orquestación de contenedores de código abierto, originalmente diseñada por Google y ahora mantenida por la Cloud Native Computing Foundation (CNCF). Permite automatizar el despliegue, escalado y operación de aplicaciones en contenedores a través de clústeres de servidores.
Kubernetes abstrae la infraestructura subyacente y ofrece una API declarativa: tú defines el estado deseado (cuántos contenedores, qué imágenes, qué puertos) y el control plane se encarga de converger el estado actual hacia ese estado deseado.
$ minikube start --driver=docker
😄 minikube v1.32.0 on Ubuntu 24.04
✨ Usando el driver docker con perfil predeterminado
👍 Iniciando control plane node minikube en clúster minikube
🏗️ Preparando Kubernetes v1.28.3…
📦 Descargando imágenes...
🤖 Listo! minikube está listo
Arquitectura de Kubernetes
Un clúster de Kubernetes se divide en dos planos principales:
- Control Plane (antes Master Node): es el cerebro del clúster. Incluye el API Server (punto de entrada REST), etcd (almacén clave-valor distribuido), Scheduler (asigna pods a nodos) y Controller Manager (vigila el estado deseado).
- Nodos Workers: máquinas donde realmente corren los contenedores. Cada worker ejecuta el kubelet (agente que se comunica con el control plane) y kube-proxy (red y balanceo).
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP
minikube Ready control-plane 5m v1.28.3 192.168.49.2
etcd es el único almacén de estado de Kubernetes. Toda la configuración del clúster, secretos, recursos y metadatos vive ahí. Por eso en producción se recomienda tener al menos 3 nodos etcd para alta disponibilidad.
Pods, Nodes y Namespaces
Tres conceptos que debes dominar desde el día uno:
- Pod: la unidad más pequeña de Kubernetes. Uno o más contenedores que comparten red y almacenamiento. Cada pod tiene su propia IP.
- Node: una máquina (física o virtual) del clúster. Puede ser control-plane o worker.
- Namespace: un clúster virtual dentro del clúster físico. Sirve para aislar equipos, entornos (dev, staging, prod) o proyectos.
kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS
kube-system coredns-5dd5756b68-abc12 1/1 Running 0
kube-system etcd-minikube 1/1 Running 0
kube-system storage-provisioner 1/1 Running 0
kubectl get namespaces
NAME STATUS AGE
default Active 6m
kube-system Active 6m
kube-public Active 6m
kube-node-lease Active 6m
Por defecto trabajamos en el namespace default. Para crear un namespace propio: kubectl create namespace midesarrollo. A partir de ahí, todos los comandos con -n midesarrollo operarán dentro de ese contexto.
