¿Qué es Kubernetes?
Kubernetes (frecuentemente abreviado como K8s) es una plataforma de código abierto para la orquestación de contenedores, desarrollada originalmente por Google. Automatiza el despliegue, escalado y gestión de aplicaciones en contenedores a través de clústeres de servidores.
¿Cuándo debería usar Kubernetes?
Kubernetes es una buena opción cuando necesita:
- Ejecutar múltiples contenedores en varios servidores
- Escalar aplicaciones automáticamente según la demanda
- Garantizar alta disponibilidad con despliegues sin tiempo de inactividad
- Gestionar arquitecturas de microservicios
- Automatizar despliegues y reversiones
Para aplicaciones simples que se ejecutan en un solo servidor, Kubernetes puede ser excesivo. Considere Docker Compose o un PaaS gestionado en su lugar.
Visión general de la arquitectura
Un clúster de Kubernetes consta de dos tipos de componentes:
Plano de control (Master)
El plano de control gestiona el estado general del clúster:
-
API Server (
kube-apiserver): La interfaz principal del plano de control de Kubernetes. Toda la comunicación (CLI, dashboard, componentes internos) pasa por esta API. - etcd: Un almacén de clave-valor distribuido que contiene toda la configuración y los datos de estado del clúster.
-
Scheduler (
kube-scheduler): Asigna Pods recién creados a nodos de trabajo según los requisitos de recursos y restricciones. - Controller Manager: Ejecuta controladores que supervisan el estado del clúster y realizan cambios para alcanzar el estado deseado (ej.: reiniciar Pods fallidos).
Nodos de trabajo (Workers)
Los nodos de trabajo ejecutan los contenedores de sus aplicaciones:
- kubelet: Un agente que se ejecuta en cada nodo y asegura que los contenedores estén funcionando según lo esperado.
- kube-proxy: Gestiona las reglas de red y el balanceo de carga para los Services en cada nodo.
- Runtime de contenedores: El software que ejecuta los contenedores (containerd, CRI-O, etc.).
Conceptos fundamentales
Pod
La unidad desplegable más pequeña en Kubernetes. Un Pod envuelve uno o más contenedores que comparten el mismo espacio de nombres de red y almacenamiento. En la mayoría de los casos, un Pod ejecuta un solo contenedor.
apiVersion: v1
kind: Pod
metadata:
name: mi-app
spec:
containers:
- name: app
image: nginx:latest
ports:
- containerPort: 80
Deployment
Un Deployment gestiona un conjunto de Pods idénticos (réplicas). Maneja actualizaciones progresivas, reversiones y escalado. Es la forma más común de ejecutar aplicaciones en Kubernetes.
apiVersion: apps/v1
kind: Deployment
metadata:
name: mi-app
spec:
replicas: 3
selector:
matchLabels:
app: mi-app
template:
metadata:
labels:
app: mi-app
spec:
containers:
- name: app
image: nginx:latest
ports:
- containerPort: 80
Service
Un Service proporciona un punto de acceso de red estable (IP y nombre DNS) para acceder a un grupo de Pods. Dado que los Pods son efímeros y sus IPs cambian, los Services actúan como una puerta de entrada estable.
- ClusterIP: Accesible solo dentro del clúster (predeterminado).
- NodePort: Expone el Service en un puerto estático en la IP de cada nodo.
- LoadBalancer: Provisiona un balanceador de carga externo (proveedores cloud).
Namespace
Los Namespaces proporcionan una forma de dividir los recursos del clúster entre múltiples equipos o proyectos. Actúan como clústeres virtuales dentro de un clúster físico.
ConfigMap y Secret
Los ConfigMaps almacenan datos de configuración no sensibles (variables de entorno, archivos de configuración). Los Secrets almacenan datos sensibles (contraseñas, claves API, certificados) en formato codificado.
Comandos clave
| Comando | Descripción |
|---|---|
kubectl get pods |
Listar todos los Pods en el namespace actual |
kubectl get deployments |
Listar todos los Deployments |
kubectl get services |
Listar todos los Services |
kubectl apply -f archivo.yaml |
Crear o actualizar recursos desde un archivo YAML |
kubectl logs nombre-pod |
Ver logs de un Pod |
kubectl describe pod nombre-pod |
Mostrar información detallada de un Pod |
kubectl delete pod nombre-pod |
Eliminar un Pod |
kubectl scale deployment mi-app --replicas=5 |
Escalar un Deployment a 5 réplicas |
Próximos pasos
- Pruebe los tutoriales oficiales de Kubernetes para práctica guiada.
- Aprenda sobre controladores Ingress para enrutar tráfico HTTP externo.
- Explore Helm para gestionar paquetes de aplicaciones en Kubernetes.