mesos

Apache Mesos Programadores y Ejecutores por ejemplo



dc/os (3)

¡Grandes preguntas! Creo que sería muy útil echar un vistazo a un marco de muestra como Rendler . Esto probablemente responderá a la mayoría de sus preguntas y le dará una idea del marco interno.

Permítanme ahora intentar responder a la pregunta que podría estar abierta después de esto.

  • Ubicación del programador

Los programadores no están activados en ningún nodo especial, pero tenga en cuenta que los programadores también pueden conmutar por error (como cualquier parte en un sistema distribuido).

  • Funcionalidad del programador

Eche un vistazo a Rendler o en la guía de desarrollo del marco .

  • Funcionalidad Ejecutor / Tarea

Creo que Rendler es un buen ejemplo para entender la relación Tarea / Ejecutor. Simplemente comienza a leer el archivo README / description en la página principal de github.

  • Pinchar ejecutor

Los ejecutores se inician en cada nodo cuando la primera Tarea que requiere dicho ejecutor se envía a este nodo. Después de esto permanecerá en ese nodo.

Espero que esto haya ayudado!

Estoy tratando de entender cómo los diferentes componentes de Mesos trabajan juntos, y encontré este excelente tutorial que contiene la siguiente descripción arquitectónica:

Tengo algunas dudas sobre esto que no están claras (ni en el artículo ni en los documentos oficiales de Mesos ):

  • ¿Dónde se ejecutan los programadores ? ¿Hay "nodos del programador" donde solo se deben ejecutar los programadores?
  • Si estuviera escribiendo mi propio marco de trabajo de Mesos, ¿qué funcionalidad de Scheduler necesitaría implementar? ¿Es solo un binario sí / no o aceptar / rechazar para Ofertas enviadas por el Maestro? ¿Algún ejemplo concreto?
  • Si estuviera escribiendo mi propio marco de trabajo de Mesos, ¿qué funcionalidad de Executor necesitaría implementar? ¿Algún ejemplo concreto?
  • ¿Cuál es un ejemplo concreto de una tarea que se enviaría a un Ejecutor?
  • ¿Están los Ejecutores "fijados" (instalados permanentemente en) los Esclavos, o flotan alrededor de una manera "a pedido", siendo instalados y ejecutados dinámicamente / sobre la marcha?

Para agregar a la excelente respuesta de js84,

  • Ubicación del programador : a muchos usuarios les gusta iniciar los programadores a través de otro marco como Marathon para asegurarse de que si el programador o su nodo muere, se puede reiniciar en otro lugar.
  • Funcionalidad del programador : después de registrarse en Mesos, su programador comenzará a recibir ofertas de recursos en la devolución de llamada de resourceOffers() , en la que su programador debe iniciar (al menos) una tarea en un subconjunto (o todos) de los recursos ofrecidos. Probablemente también querrá implementar la devolución de llamada statusUpdate() para manejar la finalización / falla de la tarea. Tenga en cuenta que es posible que ni siquiera necesite implementar su propio planificador si un marco existente como Marathon / Chronos / Aurora / Kubernetes podría ser suficiente.
  • Funcionalidad del ejecutor : por lo general, no es necesario crear un ejecutor personalizado si solo desea iniciar un proceso de Linux o un contenedor de la ventana acoplable y saber cuándo se completa. Puede usar el ejecutor de mesos predeterminado (especificando un CommandInfo directamente en TaskInfo , en lugar de incrustado dentro de un ExecutorInfo ). Si, sin embargo, desea crear un ejecutor personalizado, como mínimo necesita implementar launchTask() , e idealmente también killTask() .
  • Ejemplo de tarea : una tarea de ejemplo podría ser un simple comando de Linux como sleep 1000 o echo "Hello World" , o un contenedor docker (a través de ContainerInfo ) como image : ''mysql'' . O, si usa un ejecutor personalizado, entonces el ejecutor define qué es una tarea y cómo ejecutarlo, por lo que una tarea podría ejecutarse como otro hilo en el proceso del ejecutor, o simplemente convertirse en un elemento de una cola en una sola ejecutor roscado.
  • Fijación del ejecutor: El ejecutor se distribuye a través de los URI de CommandInfo, como cualquier binario de tareas, por lo que no es necesario que estén preinstalados en los nodos. Mesos buscará y lo ejecutará por ti.

Programadores: son algunas estrategias para aceptar o rechazar la oferta. Los programadores podemos escribir los nuestros o podemos usar alguno existente como los chronos. En el programador debemos evaluar los recursos disponibles y luego aceptar o rechazar.

Funcionalidad del programador: el ejemplo podría ser como supongamos que digamos que u tiene una tarea que necesita 8 CPU para ejecutar, pero la oferta de mesos puede ser de 6 CPU que no responderá a la necesidad en este caso u puede rechazar.

Funcionalidad del ejecutor: El ejecutor maneja la información relacionada con el estado de su tarea. Conjunto de API que necesita implementar, como cuál es el estado de la tarea asignada en mesos slave. ¿Cuál es el número de CPU actualmente disponibles en mesos slave donde se ejecuta el ejecutor?

Ejemplo concreto para ejecutor: chronos.

se instala y ejecuta dinámicamente / sobre la marcha: estos no son posibles, es necesario configurar previamente los ejecutores. Sin embargo, puede replicar los ejecutores utilizando autoescalado.