Apache Aurora [1] uses a custom Python executor and supports Docker via the
containerizer. There's just one problem - the container has to have a
Python2.7 runtime inside that can run the executor PEX file [2]. So if
you're okay with that restriction you're in business (and you can use the
Aurora configuration DSL to describe setup/teardown steps).

[1] https://aurora.apache.org
[2] https://pex.readthedocs.org/en/latest/

On Tue, Aug 11, 2015 at 4:42 PM, Tim Chen <[email protected]> wrote:

> So currently there is a review out for pre-hooks (
> https://reviews.apache.org/r/36185/) before a docker container launches.
>
> We can also add a post hook, but like to see if the specified hook
> satifies what you guys are looking for.
>
> Tim
>
> On Tue, Aug 11, 2015 at 4:28 PM, Tom Fordon <[email protected]> wrote:
>
>> We ended up implementing a solution where we did the pre/post steps as
>> separate mesos tasks and adding logic to our scheduler to ensure they were
>> run on the same machine.  If anybody knows of a standard / openly available
>> DockerExecutor like what is described below, my team would be greatly
>> interested.
>>
>>
>> On Fri, Aug 7, 2015 at 4:01 AM, Kapil Malik <[email protected]> wrote:
>>
>>> Hi,
>>>
>>>
>>>
>>> We have a similar usecase while running multi-user workloads on mesos.
>>> Users provide docker images encapsulating application logic, which we (we =
>>> say some “Central API”) schedule on Chronos / Marathon. However, we need to
>>> run some standard pre / post steps for every docker submitted by users. We
>>> have following options –
>>>
>>>
>>>
>>> 1.       Ask every user to embed their logic inside a pre-defined
>>> docker template which will perform pre/post steps.
>>>
>>> è This is error prone, makes us dependent on whether the users followed
>>> template, and not very popular with users either.
>>>
>>>
>>>
>>> 2.       Extend every user docker (FROM <>) and find a way to add
>>> pre-post steps in our docker. Refer this docker when scheduling on chronos
>>> / marathon.
>>>
>>> è Building new dockers does not scale as users and applications grow
>>>
>>>
>>>
>>> 3.       Write a custom executor which will perform the pre-post steps
>>> and manage the user docker lifetime.
>>>
>>> è Deals with user docker lifetime and is obviously complex.
>>>
>>>
>>>
>>> Is there a standard / openly available DockerExecutor which manages the
>>> docker lifetime and which I can extend to build my custom executor? This
>>> way I will be concerned only with my custom logic (pre/post steps) and
>>> still get benefits of a standard way to manage docker containers.
>>>
>>>
>>>
>>> Btw, thanks for the meaningful discussion below, it is very helpful.
>>>
>>>
>>>
>>> Thanks and regards,
>>>
>>>
>>>
>>> Kapil Malik | [email protected] | 33430 / 8800836581
>>>
>>>
>>>
>>> *From:* James DeFelice [mailto:[email protected]]
>>> *Sent:* 09 April 2015 18:12
>>> *To:* [email protected]
>>> *Subject:* Re: Custom python executor with Docker
>>>
>>>
>>>
>>> If you can run the pre/post steps in a container then I'd recommend
>>> building a Docker image that includes your pre/post step scripting + your
>>> algorithm and launching it using the built-in mesos Docker containerizer.
>>> It's much simpler than managing the lifetime of the Docker container
>>> yourself.
>>>
>>>
>>>
>>> On Thu, Apr 9, 2015 at 8:29 AM, Tom Fordon <[email protected]> wrote:
>>>
>>> Thanks for all the responses, I really appreciate the help.  Let me try
>>> to state my problem more clearly
>>>
>>>
>>>
>>> Our project is performing file-based data processing.  I would like to
>>> keep the actual algorithm as contained as possible since we are in an R&D
>>> setting and will be getting untested code.  We have some pre/post steps
>>> that need to be run on the same box as the actual algorithm:
>>> downloading/uploading files and database calls.
>>>
>>>
>>>
>>> We can run the pre/post steps and algorithm within the same container.
>>> The algorithm will be a little less contained, but it will work.
>>>
>>>
>>>
>>> Docker letting you specify a cgroup parent is really exciting.  If I
>>> invoke a docker container with the executor as the cgroup-parent are there
>>> any other steps I need to perform?  Would I need to do anything special to
>>> make mesos aware of the resource usage, or is that handled since the docker
>>> process would be in the executors cgroup?
>>>
>>>
>>>
>>> Thanks again,
>>>
>>> Tom
>>>
>>>
>>>
>>> On Tue, Apr 7, 2015 at 8:10 PM, Timothy Chen <[email protected]> wrote:
>>>
>>> Hi Tom(s),
>>>
>>> Tom Arnfeld is right, if you want to launch your own docker container
>>> in your custom executor you will have to handle all the issues
>>> yourself and not able to use the Docker containerizer at all.
>>>
>>> Alternatively, you can actually launch your custom executor in a
>>> Docker container by Mesos, by specifying the ContainerInfo in the
>>> ExecutorInfo.
>>> What this means is that your custom executor is already running in a
>>> docker container, and you can do your custom logic afterwards. This
>>> does means you can simply just launch multiple containers in the
>>> executor anymore.
>>>
>>> If there is something you want to do and doesnt' fit these let us know
>>> what you're trying to achieve and we can see what we can do.
>>>
>>> Tim
>>>
>>> On Tue, Apr 7, 2015 at 4:15 PM, Tom Arnfeld <[email protected]> wrote:
>>>
>>> > It's not possible to invoke the docker containerizer from outside of
>>> Mesos,
>>> > as far as I know.
>>> >
>>> > If you persue this route, you can run into issues with orphaned
>>> containers
>>> > as your executor may die for some unknown reason, and the container is
>>> still
>>> > running. Recovering from this can be tricky business, so it's better
>>> if you
>>> > can adapt your framework design to fit within the Mesos Task/Executor
>>> > pattern.
>>> >
>>> > --
>>> >
>>> > Tom Arnfeld
>>> > Developer // DueDil
>>> >
>>> > (+44) 7525940046
>>> > 25 Christopher Street, London, EC2A 2BS
>>> >
>>> >
>>> > On Mon, Apr 6, 2015 at 7:00 PM, Vinod Kone <[email protected]>
>>> wrote:
>>> >>
>>> >> Tim, do you want answer this?
>>> >>
>>> >> On Wed, Apr 1, 2015 at 7:27 AM, Tom Fordon <[email protected]>
>>> wrote:
>>> >>>
>>> >>> Hi.  I'm trying to understand using docker within a custom executor.
>>> For
>>> >>> each of my tasks, I would like to perform some steps on the node
>>> before
>>> >>> launching a docker container. I was planning on writing a custom
>>> python
>>> >>> executor for this, but I wasn't sure how to launch docker from
>>> within this
>>> >>> executor.
>>> >>>
>>> >>> Can I just call docker in a subprocess using the ContainerInfo from
>>> the
>>> >>> Task? If I do this, how does the Containerizer fit in?
>>> >>>
>>> >>> Thank you,
>>> >>> Tom Fordon
>>> >>
>>> >>
>>> >
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> --
>>>
>>> James DeFelice
>>> 585.241.9488 (voice)
>>> 650.649.6071 (fax)
>>>
>>
>>
>

Reply via email to