Qué es Kubernetes (K8s) y cómo orquestar contenedores a escala
Arquitectura de Clúster, Primitivas de Cómputo, Red Interna y Autoescalado
En los inicios del uso de Docker, desplegar un par de contenedores en una máquina virtual era sencillo. Sin embargo, a medida que las empresas adoptaron arquitecturas de microservicios con cientos o miles de contenedores distribuidos en múltiples servidores físicos, surgieron desafíos críticos de infraestructura: ¿Qué ocurre si un servidor se apaga físicamente? ¿Cómo se balancea el tráfico entre 50 réplicas del mismo servicio? ¿Cómo se actualiza una aplicación a una nueva versión sin interrumpir a los usuarios?
Para solucionar esto, Google liberó en 2014 Kubernetes (K8s), el estándar universal de la Cloud Native Computing Foundation (CNCF) para la orquestación automatizada de contenedores: despliegue, escalado, auto-recuperación (self-healing), balanceo de carga y gestión del ciclo de vida del software.
Arquitectura de un Clúster de Kubernetes
Un clúster de K8s se divide estrictamente en dos capas:
kubectl).En la Tecnología Real (Explicación Sencilla)
502 Bad Gateway. La Solución con Kubernetes y HPA: 1. Se define un HorizontalPodAutoscaler (HPA) que monitorea la métrica de CPU y memoria en tiempo real a través del Metrics Server. 2. Al superar el umbral del 70% de CPU, el controlador de K8s escala automáticamente el Deployment de 3 a 20 Pods en menos de 35 segundos. 3. El componente ClusterIP Service distribuye equitativamente las conexiones entre los 20 Pods mediante round-robin a nivel de kernel. 4. Los chequeos de salud (Readiness Probes) evitan enviar tráfico a nuevos Pods hasta que la aplicación haya inicializado completamente sus conexiones a base de datos. 5. Cuando el pico de tráfico concluye, el clúster reduce suavemente las réplicas para ahorrar costos de cómputo.Comparativa de Primitivas Fundamentales de Kubernetes
| Primitiva K8s | Nivel de Abstracción | Propósito Operativo | Comportamiento ante Fallos |
|---|---|---|---|
| Pod | Unidad Mínima | Grupo de uno o más contenedores que comparten la misma IP y volúmenes de disco. | Efímero: Si el Pod muere, no se recupera solo a menos que esté gestionado por un Deployment. |
| Deployment | Controlador de Carga | Define el estado deseado (ej. "mantener 5 réplicas activas") y gestiona actualizaciones Rolling Updates. | Autorreparable: Si un nodo muere, el Deployment crea réplicas en otros nodos inmediatamente. |
| Service | Abstracción de Red | Provee una IP estática interna y un nombre DNS persistente para balancear tráfico hacia un conjunto de Pods. | Si los Pods cambian de IP interna, el Service actualiza dinámicamente sus Endpoints. |
| Ingress | Enrutamiento L7 | Punto de entrada HTTP/HTTPS externo con terminación de certificados TLS y enrutamiento por rutas/dominios. | Redirige el tráfico desde Internet hacia los Services internos del clúster. |
Manifiesto de Despliegue de Producción (deployment.yaml)
apiVersion: apps/v1kind: Deploymentmetadata: name: api-backend labels: app: api-backendspec: replicas: 3 selector: matchLabels: app: api-backend template: metadata: labels: app: api-backend spec: containers: - name: web-api image: miempresa/api:v2.4.0 ports: - containerPort: 3000 resources: requests: cpu: "250m" memory: "256Mi" limits: cpu: "1000m" memory: "512Mi" readinessProbe: httpGet: path: /healthz port: 3000 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: httpGet: path: /healthz port: 3000 initialDelaySeconds: 15 periodSeconds: 20---apiVersion: v1kind: Servicemetadata: name: api-backend-servicespec: type: ClusterIP selector: app: api-backend ports: - port: 80 targetPort: 3000Nota Técnica
limits.memory), el kernel de Linux enviará la señal SIGKILL y el contenedor será terminado inmediatamente por el sistema con el error `OOMKilled (Exit Code 137)`. Establece siempre un margen de seguridad razonable entre los requests y los limits.Glosario Técnico de Kubernetes
Mini Cuestionario Interactivo3 preguntas
Selecciona una opción para autoevaluarte al instante. La respuesta se califica de inmediato.
¿Cuál es la función principal de 'etcd' en un clúster de Kubernetes?
¿Qué sucede cuando un contenedor excede el límite de memoria RAM especificado en su bloque 'resources.limits'?
¿Cuál es la ventaja de usar un objeto 'Deployment' en lugar de crear 'Pods' individuales aislados?
Diagnóstico y Práctica en Arostik
Inspecciona tus puertos y latencia de red con la Terminal de Redes, formatea tus sentencias de base de datos con el Formateador SQL y valida el ancho de banda con el Test de Velocidad.