Objetivo

En este post veremos cómo desplegar el servicio de Drupal sobre Kubernetes y como automatizar el escalado de contenedores y que el servicio de Kubernetes está alojado en Azure y nos avise cada vez que se realice un escalado de contenedores.

1 Crear el servicio de Kubernetes en Azure

Empezaremos creando el servicio de Kubernetes en Azure:
Lo primero que nos pedirá serán los datos básicos tanto para Azure como para Kubernetes, que serán, la suscripción a la que va a pertenecer el cluster, el grupo de recursos donde va a ir, el nombre del mismo, su localización, la versión de kubernetes, el prefijo DNS y el tamaño de los nodos que va a tener el cluster:
El siguiente paso será definir el sistema de autenticación de la infraestructura de Kubernetes, aunque los dejaremos en la predeterminada ya que suele ser suficiente:
Ahora tocara definir las dos características de red disponibles, aunque como en el caso anterior las dejaremos por defecto, ya que estas opciones dependerán de cada proyecto:
Como nos encontramos en Azure, podemos definir un Log Analytics para reunir métricas del funcionamiento de Kubernetes, y para este caso añadiremos unos que nos servirá más adelante para las alertas de escalado:
Ya solo nos quedaran dos apartados, unos el de las etiquetas, que suele ser irrelevante y el de validación, que nos permitirá o no llevar a cabo la creación del servicio aparte de darnos un resumen del mismo:
El resultado del despliegue deberan ser tres grupos de recursos, el grupo de recursos que hemos indicado, el grupo de recursos de “MC_(NombreDefinido + NombreCluster)_(Region)” y el ultimo con el nombre DefaultresourceGroup-EUS:
El contenido del grupo “MC_(NombreDefinido + NombreCluster)_(Region)” será contener todos los recursos del cluster:
El grupo de recursos que hemos definido solo contendrá el recurso del cluster:
Si entramos dentro del recursos, podremos ver un pequeño resumen del mismo:
Si pulsamos sobre la sección de “Conclusiones (versión preliminar), podremos ver la monitorización del cluster de Kubernetes:
Si nos movemos a la pestaña de nodos podremos ver la monitorización individual de cada nodo y los contenedores que se están ejecutando sobre ellos:
En la de controladores podremos ver en un listado todos los servicios de kubernetes que se están ejecutando para que todo funcione:
En la ultima pestaña podremos ver todos los contenedores que ahora mismo están montados, así como la monitorizacion de su consumo:

2 Desplegar Drupal

Ahora volveremos a la sección de información general porque vamos a pasar a conectarnos al cluster por CLI, y para ver cómo realizar la conexión, el portal nos ofrece la siguiente ayuda si pulsamos sobre “Ver información sobre Kubernetes“:
Como vemos necesitamos abrir la consola, yo recomiendo usar la Cloud Shell de Azure y así nos quitamos de tener que instalar en local el CLI de Azure asique como los diferentes comandos que vamos a necesitar (comandos kubernetes y helm). Empezaremos ejecutando el paso 3 para conectarnos al cluster:
az aks get-credentials –resource-group “Nombre_Grupo_Recursos” –name “Nombre_Cluster”
Ahora ya estemos conectados, ahora lo que necesitamos es iniciar los helm:
helm init
Una vez que haya terminado de arrancar los comandos, tendremos que añadir el repositorio de donde vamos a sacar los archivos necesarios para instalar los contenedores de Druapal:
helm repo add stable https://kubernetes-charts.storage.googleapis.com
Ahora pasaremos a la acción, vamos a montar drupal, que se divide en dos contenedores diferentes, uno para para la base de datos y otro para la pagina web. Durante la instalación no saltara bastante información de la que podemos pasar, ya que no vamos a seguir la indicaciones:
helm install stable/drupal
Una vez desplegado drupal, deberemos comprobar que los dos contenedores se han terminado de instalar correctamente, para eso tiene que salir 1/1 en “Ready” y en “Status” “Running”:
kubectl
Ahora vamos a pasar a configurar el autoescalado y lo haremos sobre el porcentaje de CPU en uso. Usando el nombre del contenedor que queremos autoescalar definiremos el numero máximo de contenedores y el mínimo de los mismo. En este caso vamos a autoescalar el contenedor de la web de drupal cada vez que esté por encima o por debajo del 50 por ciento de uso de CPU, con un mínimo de 1 contenedor y un máximo 3:
kubectl autoscale deployment “nombre_contenedor” –cpu-percent=”1-100″ –min=? –max= 3
Y para ver esta configuración que hemos realizado, usaremos el siguiente comando:
kubectl get hpa
Ahora averiguaremos a que dirección publica nos tenemos que conectar para poder acceder a Drupal y para ello veremos los servicios activos que nos mostrara junto a ellos la dirección IP que tienen, tanto pública como privada:
kubectl get services
Accedes a la IP publica que nos indica y listo, ya tenemos configurado Drupal y listo para ser usado:

3 Crear alerta de autoescalado

Cuando creamos el cluster de Kubernetes, indicamos que se creara junto al el recurso de Log Analytics, el cual se almacena en DefaultresourceGroup-EUS, que es el grupo de recursos que  contiene todos los recursos relacionados con los logs de kubernetes:
Pulsaremos sobre el recurso de Log Analytics y abriremos el portal OMS.
Dentro buscaremos entre las diferentes posibilidades la solución “Container Monitoring Solution” y la añadiremos:
Esto es lo que nos deberá salir cuando entremos en la solución:
Por ultimo entraremos a ver todos los eventos que se generan en el cluster de kubernetes, buscaremos los de tipo “ScalingReplicaSer” con el nombre “fashionable-molly-drupal”  y pulsaremos obre el y nos dará este resultado:
let EmptyTable = datatable(Namespace_s:string, Name_s:string,Type_s:string, Reason_s:string)[]; 
union isfuzzy=true EmptyTable,KubeEvents_CL 
| where not(isempty(Namespace_s)) 
| where Name_s == "fashionable-molly-drupal" 
| where Type_s == "Normal" 
| where Reason_s == "ScalingReplicaSet"
Con este código podemos general una alerta clásica de Azure que nos avisara cada vez que el contenedor escale para arriba o para abajo.