Articulo en el que continuamos explicando las distintas configuraciones avanzadas que dispone el agente de mesos.
Introducción
En el articulo anterior, hemos realizado una configuración básica del agente de Apache Mesos. En este articulo, vamos a comenzar definiendo los atributos y los recursos disponibles en un agente de Apache Mesos, que es la forma que tenemos de describir un agente y de que se compone.
Atributos
Los atributos son pares clave:valor siendo el valor un elemento opcional que Apache Mesos remite a los frameworks cuando realiza la oferta de recursos. Cuando indicamos un valor, este puede ser de tres tipos: Un escalar, un rango o un texto. Los atributos se pueden considerar como información relevante y su definición es opcional aunque útil para localizar la ubicación de los agentes en un rack, conocer el sistema operativo instalado, etc. Un ejemplo quedaría de la siguiente forma:
--attributes='rack:5d;os:ubuntu1810'
Recursos
Un recurso es un elemento que representa el tipo diferente de recurso que Apache Mesos puede ofrecer. Un ejemplo de esto puede ser cantidad de memoria, cpus, gpus, etc. Estos elementos pueden ser un valor escalar, un rango o un conjunto.
En el articulo anterior hemos visto que sin realizar configuración alguna, Apache Mesos a detectado los recursos disponibles en el agente que hemos arrancado. También tenemos la opción de configurar cuantos recursos de un agente queremos que sean usados por los frameworks. Esto lo podremos hacer de varias formas:
Como opción en el arranque del agente
# Como opción de arranque del agente
--resources='cpus:16;gpus:1;mem:4096;ports:[41000-43000]
# Como opción de arranque del agente, en formato json
--resources='[{"name":"cpus","type":"SCALAR","scalar":{"value":16}},{"name":"gpus","type":"SCALAR","scalar":{"value":1}},{"name":"mem","type":"SCALAR","scalar":{"value":4096}},{"name":"ports","type":"RANGES","ranges":{"range":[{"begin":41000,"end":43000}]'
# Incluyendo el json anterior en un fichero llamado /etc/default/recursos
--resources=file:///etc/default/recursos
Aunque esto es cuestión de gustos, si tuviera que decantarme, usaría la ultima opción.
Vamos a modificar la configuración del agente3, partiendo de la configuración del anterior articulo:
Vemos que actualmente, tenemos 4 cpus y 6.8GB de memoria. Vamos a reducir la disponibilidad a la mitad:
# /etc/default/recursos
'[{"name":"cpus","type":"SCALAR","scalar":{"value":2}},{"name":"mem","type":"SCALAR","scalar":{"value":2048}}]'
Y ahora incluimos la referencia en el fichero de configuración del agente:
#/etc/default/mesos-agent
# Options to pass to mesos-agent
MESOS_AGENT=--hostname=agent3.leonvillamayor.org --ip=192.168.1.23 --log_dir=/var/log/mesos/agent --work_dir=/var/lib/mesos/agent --master=zk://192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181/mesos --containerizers=docker,mesos -1-docker=/usr/bin/docker --executor_registration_timeout=10mins --attributes='rack:3;os:ubuntu1804;ip:192.168.1.23' --resources=file:///etc/default/recursos
Por ultimo, tenemos que parar el agente y arrancarlo de nuevo. Es importante eliminar la metadata del agente antes de arrancarlo para que no tengamos problemas con el mismo:
$ sudo systemctl stop mesos-agent.service
$ sudo rm -f /var/lib/mesos/agent/meta/slaves/latest
$ sudo systemctl start mesos-agent.service
Una vez arrancado, como podemos ver en la imagen, hemos limitado los recursos disponibles en el agente.
¿Que más podemos hacer?
Hemos ampliado la configuración indicando atributos y recursos. En el siguiente articulo, vamos a ampliar el alcance profundizando un poco más y incluyendo como recurso una tarjeta grafica nvidia y a configurar el rango de puertos que puede utilizar el agente para la distribución de tareas.
Una pregunta que os podriais hacer es, bueno, tengo n agentes, con m recursos, ¿cualquier framework puede acceder a estos recursos?¿Que ocurre si mi framework termina una operativa y suelta los recursos pero a continuación quiere hacer otra operativa y el master no me ofrece recursos? La respuesta a todo esto la vemos a continuación, con el uso de los roles y isolators.
Conclusiones
Como hemos visto, podemos tunear según nuestras necesidades los agentes de Apache Mesos y como vamos a ver en posteriores artículos, su potencia es extremadamente alta, nos permite abstraer el hierro disponible posibilitando capacidades de procesamiento distribuido y paralelización. Nos vemos en el siguiente articulo.