Skip to content

Orquestación con Kubernetes

Prólogo

Docker resolvió el problema de "empaquetar", Kubernetes resuelve el problema de "gestionar". Cuando tienes decenas o cientos de contenedores que desplegar, escalar y recuperar ante fallos, la gestión manual es inviable. Kubernetes (K8s) es el "sistema operativo" de los contenedores: automatiza el despliegue, escalado y operación de aplicaciones contenerizadas.

¿Qué aprenderás en este artículo?

Al terminar este capítulo, habrás aprendido:

  • Comprensión de la arquitectura: dominarás la composición del plano de control y los nodos de trabajo de K8s
  • Recursos principales: te familiarizarás con conceptos clave como Pod, Deployment, Service
  • Gestión declarativa: entenderás la filosofía de "declarar el estado deseado, el sistema converge automáticamente"
  • Capacidad operativa: conocerás mecanismos como rolling update, autoescalado y health checks
  • Introducción práctica: podrás desplegar una aplicación completa con kubectl y YAML
CapítuloContenidoConceptos clave
Capítulo 1Por qué necesitas K8sLos desafíos de la orquestación de contenedores
Capítulo 2Arquitectura de K8sPlano de control, nodos de trabajo, etcd
Capítulo 3Recursos principalesPod, Deployment, Service, Ingress
Capítulo 4Gestión declarativaYAML, kubectl, bucle de reconciliación
Capítulo 5Prácticas operativasRolling update, HPA, health checks

1. ¿Por qué necesitas Kubernetes?

Docker facilita el empaquetado y ejecución de contenedores individuales, pero cuando te enfrentas a los siguientes escenarios, la gestión manual resulta insuficiente:

DesafíoDescripciónSolución de K8s
Despliegue multi-instanciaUn servicio necesita ejecutar 10 réplicasDeployment gestiona automáticamente el número de réplicas
Recuperación ante fallosUn contenedor se cae y necesita reiniciarseEl controlador detecta y recrea el Pod automáticamente
Descubrimiento de serviciosLas IPs de los contenedores cambian, ¿cómo encontrarlos?Service proporciona DNS e IP estables
Rolling updateActualizar la versión sin interrumpir el servicioReemplazo gradual de Pods antiguos, cero downtime
Escalado elásticoAutoescalar en picos de tráficoHPA ajusta automáticamente las réplicas según CPU/memoria
Planificación de recursosColocar contenedores en las máquinas más adecuadasScheduler con planificación inteligente

La idea central de K8s: declarativo

No necesitas decirle a K8s "inicia 3 contenedores" (imperativo), sino "quiero 3 réplicas en ejecución" (declarativo). K8s monitoriza continuamente para asegurar que el estado real coincida con el estado deseado que declaraste. Si un Pod se cae, automáticamente crea uno nuevo para reemplazarlo.


2. Arquitectura de Kubernetes

Un clúster de K8s está compuesto por el plano de control (Control Plane) y los nodos de trabajo (Worker Node).

Kubernetes Architecture
Click a component to inspect the details
Control Plane
API Server
etcd
Scheduler
Controller Manager
Worker Node x N
kubelet
kube-proxy
Container runtime
API Server
The front door of Kubernetes. All operations from kubectl, dashboards, and internal components go through the API Server. It handles authentication, authorization, admission control, and acts as the single entry point for the cluster.
Analogy:A company reception desk where every visitor and delivery is checked in

Ruta completa de una petición

Petición del usuario → Ingress Controller → Service → kube-proxy → Pod (contenedor)

                                    Lista de Endpoints (mantenida por Service)

3. Objetos de recursos principales

K8s describe el estado deseado del clúster mediante diversos "objetos de recursos".

K8s Core Resources
Click a resource type to inspect the explanation and YAML example
Pod
Smallest scheduling unit
A Pod is the smallest deployable unit in K8s. It contains one or more tightly related containers. Containers inside the same Pod share networking and storage, so they can communicate through localhost.
YAML example
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app
      image: my-app:1.0
      ports:
        - containerPort: 3000
Tip:Production workloads rarely create Pods directly; they are usually managed by Deployments.

Clasificación de objetos de recursos

CategoríaRecursoPropósito
Carga de trabajoPod, Deployment, StatefulSet, DaemonSet, JobEjecutar aplicaciones
RedService, Ingress, NetworkPolicyDescubrimiento de servicios y gestión de tráfico
ConfiguraciónConfigMap, SecretGestión de configuración y datos sensibles
AlmacenamientoPersistentVolume, PersistentVolumeClaimAlmacenamiento persistente
PlanificaciónNode, Namespace, ResourceQuotaAislamiento y límites de recursos

4. Gestión declarativa y kubectl

Bucle de reconciliación (Reconciliation Loop)

El mecanismo de trabajo central de K8s es el bucle de reconciliación:

Observar (Observe) → Comparar (Diff) → Actuar (Act) → Observar...
     ↓                ↓              ↓
  Leer estado real  Comparar con    Ejecutar acción
                    estado deseado  correctiva

Declaras replicas: 3, el controlador detecta que solo hay 2 Pods en ejecución y crea 1 nuevo. Este bucle se ejecuta cada pocos segundos, asegurando que el sistema siempre converja hacia el estado deseado.

Comandos comunes de kubectl

ComandoFunciónEjemplo
kubectl apply -fAplicar configuración YAMLkubectl apply -f deployment.yaml
kubectl getVer lista de recursoskubectl get pods -o wide
kubectl describeVer detalles de un recursokubectl describe pod my-app-xxx
kubectl logsVer logs de un Podkubectl logs -f my-app-xxx
kubectl execEntrar en la terminal de un Podkubectl exec -it my-app-xxx -- sh
kubectl deleteEliminar recursokubectl delete -f deployment.yaml
kubectl scaleEscalar manualmentekubectl scale deploy my-app --replicas=5

apply vs create

kubectl create es imperativo: "crea este recurso", si ya existe da error. kubectl apply es declarativo: "asegura que el recurso tenga este estado", si no existe lo crea, si ya existe lo actualiza. En entornos de producción siempre debes usar apply.


5. Prácticas operativas

5.1 Rolling update y rollback

Deployment usa por defecto la estrategia de rolling update: crea gradualmente Pods de la nueva versión mientras termina gradualmente los Pods de la versión antigua.

yaml
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1        # Máximo 1 Pod adicional
      maxUnavailable: 0   # No se permite ningún Pod no disponible
OperaciónComando
Actualizar imagenkubectl set image deploy/my-app app=my-app:2.0
Ver estado de actualizaciónkubectl rollout status deploy/my-app
Ver historial de versioneskubectl rollout history deploy/my-app
Revertir a versión anteriorkubectl rollout undo deploy/my-app

5.2 Autoescalado (HPA)

HPA (Horizontal Pod Autoscaler) ajusta automáticamente el número de réplicas de Pod según CPU, memoria o métricas personalizadas.

yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

5.3 Health checks (Probes)

K8s monitoriza el estado de salud de los Pods mediante tres tipos de sondas:

SondaFunciónConsecuencia del fallo
livenessProbeDetecta si el contenedor está vivoReinicia el contenedor
readinessProbeDetecta si el contenedor está listoLo retira del Service, no recibe tráfico
startupProbeDetecta si el contenedor ha terminado de iniciarDurante el inicio no se ejecutan otras sondas

Importancia de las sondas

Sin health checks configurados, K8s solo puede juzgar la salud de un Pod por si el proceso existe. Pero muchas veces el proceso sigue corriendo aunque el servicio ya no responda (por ejemplo, deadlock, al borde de OOM). Configurar livenessProbe permite a K8s reiniciar automáticamente estos contenedores "zombi".


Resumen

Kubernetes es el estándar de facto para la orquestación de contenedores. Comprender sus conceptos fundamentales es la base del desarrollo cloud native.

Puntos clave de este capítulo:

  1. Gestión declarativa: dile a K8s "qué quiero", no "cómo hacerlo", el bucle de reconciliación converge automáticamente
  2. Arquitectura en capas: el plano de control toma decisiones, los nodos de trabajo ejecutan, etcd almacena el estado
  3. Recursos principales: Pod (unidad mínima), Deployment (gestión de réplicas), Service (descubrimiento de servicios), Ingress (entrada externa)
  4. Automatización operativa: rolling update sin downtime, HPA para escalado elástico, sondas para recuperación automática ante fallos
  5. Separación de configuración: ConfigMap y Secret desacoplan la configuración de la imagen

Lecturas adicionales