Autoescalado con Kubernetes

Una de las funcionalidades más demandadas últimamente es el autoescalado de aplicaciones.

¿Por qué siempre se colapsa la web de venta de entradas y me tengo que quedar sin ver a Guns n’Roses? ¿Nunca podré comprar un billete barato en RENFE? En los momentos de alta interacción su web me deja en espera indefinidamente…

Para esta prueba vamos a utilizar un clúster de Kubernetes de 2 nodos y el típico ejemplo de aplicación:
servidor web (ohs) -> servidor de aplicaciones (weblogic 12c) -> BBDD (12c)

Recordad, tal y como mostramos en un post anterior sobre kubernetes, que el pod corresponde a cada instancia levantada de nuestra aplicación. Empezamos con 2 pods de ohs, 2 de weblogic y uno de BBDD.

Selection_040

Desplegamos con Ansible una sencilla aplicación en weblogic que solo hace una consulta a BBDD.

Se suele crear un autoescalado sobre la CPU cuando llega al 80%. En nuestro caso como es una prueba y debe saltar antes, lo vamos a hacer sobre el 20%. Kubernetes está en continua evolución y actualmente se están añadiendo otros criterios a parte de CPU.

Por ejemplo, para el OHS marcaremos un máximo de 10 pods:

Selection_041

Desde la línea de comandos, podremos mostrar todos los criterios de auto escalado y su estado:

Selection_042

Ahora con jmeter lanzaremos un test con 100 usuarios. Podremos ver como empieza a subir el consumo de CPU

Selection_044

Vemos como a los dos pods de OHS (situados abajo y que llevan más de 45 minutos levantados) se le añade un tercero (en la parte superior y que lleva 5 minutos levantado) para que se estabilice la carga de CPU.

Selection_057

Ahora vamos a añadir más carga con jmeter, subiremos hasta los 2.000 usuarios. Observaremos que vuelve a haber un pico, pero se levantan hasta 4 pods de OHS y la carga se vuelve a estabilizar:

Selection_061

Posteriormente la carga pasa a weblogic, la cual también se dimensiona levantando 2 pods más y estabilizando la carga:

Selection_064

Para el “des-escalado” marcaremos un criterio para ir parando las instancias, por ejemplo durante 15 minutos; de esta manera no estará continuamente levantando y parando PODs, y si la situación no es estable se volverá a producir un pico. En muchos servicios cloud, como por ejemplo amazon, se paga por el tiempo que tienes levantado el servicio, así podemos pagar sólo por picos de trabajo y no necesitaremos tener siempre los servidores levantados.

En resumen, kubernetes nos ofrece de forma muy fácil el autoescalado de aplicaciones de forma horizontal. Nos permite olvidamos de configurar la red, puertos, etc, y podremos trabajar con aplicaciones, no con servidores.

En siguientes entradas, veremos cómo ampliar el cluster de kubernetes a otro CPD o cómo desplegar otro nodo en el cloud.

Twitter
LinkedIn
Evolución, innovación y transformación
37 Service Expertise avalados por Oracle 
Our value proposition
100% Oracle posts
Follow our day-to-day activities