Contenido del curso
0:00/18:44
Qué es Kubernetes y cómo orquesta contenedores
02:21Kubernetes local con Minikube y kubectl
Suscríbete para ver másArquitectura de Kubernetes: nodos, pods y componentes clave
Suscríbete para ver máskubectl: get, describe, apply y delete
Suscríbete para ver másImperativo vs declarativo en Kubernetes
Suscríbete para ver másEscalar una aplicación en Kubernetes significa garantizar que tu sistema responda al tráfico real sin caerse ni desperdiciar recursos. Aquí aprenderás cómo funcionan los tres mecanismos de escalamiento (horizontal pod autoscaler, vertical pod autoscaler y cluster autoscaler), cuándo conviene cada uno y cómo configurarlos paso a paso en Minikube.
¿Qué opciones de escalamiento existen en Kubernetes?
Kubernetes ofrece tres formas distintas de crecer según la demanda, y cada una opera en una capa diferente de la arquitectura.
La jerarquía importa: un pod vive dentro de un ReplicaSet, y ese ReplicaSet vive dentro de un Deployment [00:34]. Sobre esa estructura, el HPA decide cuántas réplicas necesitas en cada momento.
¿Qué hace exactamente el horizontal pod autoscaler? Genera nuevos pods dentro del mismo ReplicaSet cuando una métrica (típicamente CPU o memoria) supera un umbral, por ejemplo 70% u 80% de uso.
¿Cuándo conviene escalar horizontal y cuándo vertical?
El escalamiento horizontal añade copias idénticas del pod. Si pasas de 1 usuario a 40, el HPA puede levantar 2, 10 o 20 pods para repartir la carga [02:30]. El vertical, en cambio, borra el pod actual y lo recrea más grande, con más RAM y más CPU.
Ahí está la tensión: el VPA puede dejar tu aplicación inoperativa por segundos o minutos mientras destruye y reconstruye el pod. Por eso, en la mayoría de escenarios productivos conviene el HPA, porque evita degradación del servicio.
¿Cómo se configura un HPA en un archivo YAML?
El HPA es un objeto de Kubernetes con su propio manifiesto. Usa el apiVersion autoscaling/v2 y el kind HorizontalPodAutoscaler [06:40].
En la especificación defines tres cosas clave:
Para el backend del ejemplo se fijó un umbral de 80% de CPU, con recursos request de 50 milicpus y 128 MB de RAM, y limits de 100 milicpus y 150 MB [08:10]. Para el frontend, al ser una app sencilla con NGINX sirviendo HTML y JavaScript, el umbral se bajó a 20% para forzar el escalamiento durante la demo, con un mínimo de 1 y máximo de 3 réplicas.
La diferencia entre requests y limits es la frontera con el VPA: el pod arranca con los recursos del request y puede crecer hasta el limit, pero no más allá.
¿Por qué el HPA aparece como unknown al inicio?
Cuando ejecutas kubectl get hpa justo después de aplicar los manifiestos, verás que la métrica de CPU aparece como unknown. Esto pasa porque Kubernetes necesita un componente que recolecte métricas en tiempo real.
¿Qué es el metrics server? Es un addon de Kubernetes que expone el consumo de CPU y memoria de cada pod, y sin él el HPA no puede decidir cuándo escalar.
En Minikube se habilita con un solo comando:
bash minikube addons enable metrics-server
En clústeres productivos no siempre es plug and play: muchas veces toca instalarlo con archivos YAML manuales o con un gestor de paquetes como Helm [16:20]. El pod del metrics-server puede tardar unos minutos en levantarse (en la demo tomó cerca de tres minutos) según la CPU y memoria asignadas al clúster.
Una vez activo, puedes correr kubectl top pods para ver qué pods consumen más recursos y ajustar tus requests y limits a la realidad de tu aplicación.
¿Cómo se prueba el escalamiento generando tráfico real?
Para que el HPA actúe, necesitas tráfico que mueva la aguja de CPU. El flujo de la demo fue así:
minikube tunnel para exponer el servicio LoadBalancer.watch apuntando a la URL del frontend en el puerto 80.kubectl top pods y kubectl get hpa.El resultado en la demo fue revelador: incluso bombardeando peticiones cada 0.1 segundos, el frontend solo llegó al 2% de CPU, muy lejos del 20% configurado. Razón: el frontend solo devuelve un HTML estático servido por NGINX, no hay lógica que cargue el procesador.
¿Cómo escala Kubernetes a nivel de infraestructura?
Cuando el problema ya no son los pods sino los nodos, entra el cluster autoscaler. Este componente trabaja por fuera de los objetos internos de Kubernetes y habla directamente con tu proveedor cloud.
Puede crecer en dos direcciones:
Así, una arquitectura que empezó con un solo nodo master puede pasar a tener dos, tres o cuatro, garantizando alta disponibilidad y permitiendo que tus Deployments sigan creciendo dinámicamente.
El reto natural para llevar esto más lejos es construir un backend con lógica real (un REST API) y un frontend con framework moderno como Next, React o Angular que consuma suficiente CPU para disparar el escalamiento. ¿Tú con qué stack lo armarías? Te leo en los comentarios.
Andres Felipe Vargas Gonzalez
Juan Camilo Gallego Pineda
Sura Naileth Cedeño Lopez
Team PlatziJoaquin Lopez Alvarez
Ruben Dario Hernandez Centeno
Axell Padilla
Luis Boivar
Daniel Rodrigo Lara Sanchez
Creo que se cortó la clase en el último minuto.
Si, efectivamente se cortó la clase al final.
Hola Andrés, ya solucionamos esto, muchas gracias por reportarlo :D
Estaría bien que cuando el profesor va a abrir los archivos referenciando a la estructura de la carpeta del proyecto nos movieran/desaparecieran la casilla de su imagen, en ese momento la consola y otras partes de la pantallan no tienen relevancia, pero la estructura de archivos si.
En producción por lo general no se acostumbra a usar VPA y HPA sobre el mismo deployment, se considera una mala práctica.
Un punto en contra sobre el CA (Cluster Autoscaler) no mencionado es que en la vida real se usan muchas veces nodos grandes (Ej: 12vCPU y 64GB RAM) y si tu pod tiene configuraciones de CPU: "2000m" y Memory: "2048Mi" será un desperdicio de recursos que encarece la factura de AWS.
Hay MPA tambien por lo que veo en el codigo del autoscaler
Wow el metrics-server se ve muy cool!, gran clase.
Sí, Daniel Rodrigo, se pueden combinar HPA (escalado horizontal) y VPA (escalado vertical). La clase menciona que HPA añade más pods y VPA asigna más recursos al mismo pod. Combinarlos permite optimizar el uso de recursos y la disponibilidad de la aplicación.