Re: Custom python executor with Docker

2015-08-11 Thread Tom Fordon
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 kma...@adobe.com 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 | kma...@adobe.com | 33430 / 8800836581



 *From:* James DeFelice [mailto:james.defel...@gmail.com]
 *Sent:* 09 April 2015 18:12
 *To:* user@mesos.apache.org
 *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 tom.for...@gmail.com 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 RD
 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 tnac...@gmail.com 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 t...@duedil.com 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 vinodk...@apache.org wrote:
 
  Tim, do you want answer this?
 
  On Wed, Apr 1, 2015 at 7:27 AM, Tom Fordon tom.for...@gmail.com
 wrote:
 
  Hi.  I'm trying to understand using docker within a custom executor.
 For
  each of my tasks, I would like

Custom python executor with Docker

2015-04-01 Thread Tom Fordon
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