Aunque las arquitecturas orquestadas de contenedores están para hacernos la vida más fácil gracias a su automatización y eficiencia, su puesta a punto y depuración -a priori- pueden ser un poco complejas. Por si no fuera poco, con frecuencia nos perdemos la magia porque no podemos ver de forma intuitiva lo que está pasado tras las cortinas en tiempo real.

A este respecto durante la ejecución de algunas pruebas de concepto del programa MTA de Avanade estuve utilizando el Docker Swarm Visualizer con unos resultados excelentes: podía mostrar en tiempo real y de forma muy gráfica lo que estaba ocurriendo en Docker Swarm. A continuación se puede ver como despliego la aplicación de ejemplo de votación en unos pocos segundos y como distintos contenedores se reparten entre los workers del cluster:

Sin embargo, y aunque me gustaba mucho la sencillez y facilidad de aprendizaje de Swarm, a día de hoy tenemos claro que el orquestador que está para quedarse es Kubernetes. Evidentemente Docker Swarm Visualizer esta muy ligado a Swarm y no funciona con Kubernetes... ¿no tenemos una herramienta similar?

Kubernetes dashboard

Esta es una parada obligatoria que hago antes de llegar al punto central del artículo. Kubernetes ya viene con un panel de control vistoso y muy funcional, el Kubernetes dashboard.

Si lo tenemos instalado en nuestro cluster invocarlo es fácil. En el caso de Azure Kubernetes Service, con Azure CLI la cosa se torna insultántemente sencilla:

$ az aks browse -g aks -n calnus

Donde -g especifica el grupo de recursos y -n el nombre de nuestro servicio AKS. El cliente lanzará todos los comandos por tí.

Pero si no utilizamos AKS también podemos lanzarlo de forma genérica, que también funciona en AKS:

$ kubectl proxy

Y hecho esto vamos a la URL: http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/ y podremos ver el flamante dashboard.

Aunque es potente, vistoso y altamente técnico; no tiene algunas características que hacían brillar al sencillo visualizer:

  • Vista gráfica y clara de la topología de nodos y los contenedores o pods que se ejecutan en ellos.
  • Métricas en tiempo real.

¿No había algo que se pareciera más? Desde luego que sí...

Introduciendo Weave Scope

Weave Scope es una herramienta de código abierto desarrollada por la empresa Weave Works, que no sólo cumple con las premisas anteriores, sino que va mucho más allá.

Se trata de una solución de monitorización, visualización y administración de Docker y Kubernetes que me ha sorprendido de largo por la potencia que ostenta, su facilidad de uso y sobre todo... su precio, que viene ser 0 ya que se distribuye bajo licencia Apache 2.0.

Weave Scope puede:

  • Mostrar gráficamente la topología de nuestro cluster a distintos niveles de objetos: nodos, servicios, deployments, pods...
  • Mostrar gráficamente las interconexiones de red que se suceden entre los distintos objetos.
  • Mostrar lo idem pero en tablas.
  • Ver en tiempo real lo que ocurre, igual que hacía nuestro viejo amigo visualizer.
  • Bajar a nivel de proceso y ver qué se está ejecutando.
  • Buscar rápidamente cualquier objeto del cluster.
  • ...seguramente muchas más que se me escapan.

La siguiente captura muestra los pods de mi cluster de AKS con Weave Scope.

De un vistazo ya podemos apreciar la arquitectura de la solución que estamos hospedando. Hay una serie de pods que hacen de cliente rathena-openkore que se conectan a otro pod que hace de servidor, rathena-server que a su vez se conecta a otro pod que es una base de datos, rathena-mysql.

Si os fijáis, se aprecia claramente que uno de los pods rathena-openkore no se está conectando a rathena-server. ¡En pocos segundos de un vistazo puedo diagnosticar que algo no va bien en un pod!

Tiempo real

El mismo efecto que teníamos con visualizer lo recuperamos con Weave Scope, que es la monitorización en tiempo real del estado de nuestro cluster. La siguiente animación nos muestra cómo al escalar de 5 a 10 bots Weave Scope nos muestra el cambio en tiempo real.

Nada mal ¿no?

Procesos, containers, pods, hosts, services...

Precisamente una de las potencias de Weave Scope es ver información muy visual en línea con el modelo de objetos de Kubernetes. La siguiente animación muestra un vistazo rápido por alguna de las pantallas que ofrece.

Arquitectura simplicada

El sistema se compone de dos pods:

  • El agente, que se instala en cada nodo y es el que reporta métricas e información de monitorización.
  • La aplicación, que es un único pod que se ejecuta en alguno de nuestros nodos.

Instalación de Weave Scope

Weave Scope puede instalarse en Docker o bien en cierto rango de orquestadores entre los que se incluyen Kubernetes, Apache Mesos y Amazon ECS. Entre los servicios basados en Kubernetes en los que se ejecuta podemos encontrar OpenShift, AKS, GKE y probablemente EKS.

La instalación es, como vamos a ver, insultántemente sencilla y se completa en apenas dos minutos.

Instalación en AKS

Si estás utilizando el servicio gestionado de Kubernetes de Azure y has activado el RBAC, necesitarás en primer lugar crear los permisos necesarios para que la instalación funcione. En tal caso debemos ejecutar:

$ kubectl create clusterrolebinding "cluster-admin$(whoami)" --clusterrole=cluster-admin --user=myazureusername@contoso.com

Evidentemente sustituir myazureusername@contoso.com por nuestro usuario autorizado de Azure AD.

Instalación en Kubernetes genérico

Tan insultántemente sencillo como ejecutar el siguiente comando:

$ kubectl apply -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\n')"

¡Y nada más! El sistema se instalará automáticamente en nuestro cluster y el agente de Weave Scope se ejecutará en todos los nodos que agreguemos a nuestro cluster. ¿Cómo es posible esto? Gracias al objeto DaemonSet de Kubernetes que asegura que cada nodo ejecuta al menos una copia de un Pod determinado. ¿Verdad que es útil?

Weave Scope se instala por defecto en el namespace weave. Es importante tenerlo muy presente porque sus pods no se mostrarán por defecto. Si queremos verlos será necesario hacer kubectl get pods -n weave o bien kubectl get pods --all-namespaces.

Abriendo la aplicación

Por defecto Weave Scope no está publicado hacia el exterior, configuración que encarecidamente recomiendo. Así que si queremos abrir la aplicación tendremos primero que crear un forwarding temporal muy similar al que ya hicimos anteriormente con el dashboard de Kubernetes. ¿Cómo? Con el siguiente comando:

$ kubectl port-forward -n weave "$(kubectl get -n weave pod --selector=weave-scope-component=app -o jsonpath='{.items..metadata.name}')" 4040

Una alternativa más espartana es ejecutar kubectl get pods -n weave, buscar el nombre del pod que hace las veces de aplicación y tras ello:

$ kubectl port-forward -n weave weave-scope-app-578556559-cnfdp 4040

Evidentemente sustituir weave-scope-app-578556559-cnfdp por el nombre que encontrásemos.

Hecho esto ya podemos abrir nuestro navegador en la URL http://localhost:4040 y empezar a usar la aplicación.

Solucionando problemas

En ocasiones he tenido dificultades con WeaveScope cuando he sometido mi cluster a mucha carga, pero de momento nada achacable a la propia aplicación. Recordad que al final tanto el agente como la aplicación consumen recursos de nuestros nodos y por tanto es importante gestionar adecuadamente los recursos de computación asignados a cada pod.

Conclusiones

La adopción tecnológica de Kubernetes continua imparable con más y más contribuciones interesantes tanto de la comunidad como de empresas dedicadas a los nuevos paradigmas de desarrollo de aplicaciones.

Weave Scope es una potente forma de monitorizar en tiempo real nuestro cluster de Kubernetes que podemos poner a punto con unos sencillos comandos de nuestro amigo kubectl.

Happy k8s!