gorealis/docs/Getting_Started.md
Renan DelValle 7aa6c07c66 Cleaned up the README and added new information to Getting_Started.
Made client point to new location of docker-compose-executor release
2016-08-10 11:46:08 -07:00

7.9 KiB

Running custom executors on Aurora

In this document, we will be using the docker-compose executor to demonstrate how Aurora can use multiple executors on a single Scheduler. For this guide, we will be using a vagrant instance to demonstrate the setup process. Many of the same steps also apply to an Aurora installation made via a package manager. Differences in how to configure the cluster between the vagrant image and the package manager will be clarified when necessary.

Spinning up an Aurora instance with Vagrant

Follow the guide at the Aurora repository in order to spin up a local cluster.

Configuring Scheduler to use Docker-Compose executor

In order use the docker compose executor with Aurora, we must first give the scheduler a configuration file that contains information on how to run the executor.

Configuration file

The configuration is a JSON file that contains where to find the executor and how to run it.

More information about how an executor may be configured for consumption by Aurora can be found here under the custom executors section.

A sample config file for the docker-compose executor looks like this:

[  
  {  
    "executor":{  
      "command":{  
        "value":"java -jar docker-compose-executor_0.1.0.jar",
        "shell":"true",
        "uris":[  
          {  
            "cache":false,
            "executable":true,
            "extract":false,
            "value":"https://github.com/mesos/docker-compose-executor/releases/download/0.1.0/docker-compose-executor_0.1.0.jar"
          }
        ]
      },
      "name":"docker-compose-executor",
      "resources":[]
    },
    "task_prefix":"compose-"
  }
]

Configuring Scheduler to run custom executor

Setting the proper flags -custom_executor_config flag and enabling mesos fetcher on jobs

Some flags need to be set on the Aurora scheduler in order for custom executors to work properly.

The --custom_executor_config flag must point to the location of the JSON blob.

The --enable_mesos_fetcher flag must be set to true in order to allow jobs to fetch resources.

On vagrant

  • Log into the vagrant image by going to the folder at which the Aurora repository was cloned and running:
$ vagrant ssh
  • Write the sample JSON blob provided above to a file inside the vagrant image.

  • Inside the vagrant image, modify the file /etc/init/aurora-scheduler.conf to include:

   --custom_executor_config=<Location of JSON blob> \
   --enable_mesos_fetcher=true

On a scheduler installed via package manager

  • Write the sample JSON blob provided above to a file on the same machine where the scheduler is running.

  • Modify the file /etc/default/aurora-scheduler.conf to include:

  AURORA_EXTRA_ARGS="--custom_executor_config=<Location of JSON blob> \
   --enable_mesos_fetcher=true"

Using a custom client

Pystachio does yet support launching tasks using a custom executors. Therefore, a custom client must be used in order to launch tasks using a custom executor. In this case, we will be using gorealis to launch a task with the compose executor on Aurora.

Configuring the system to run the custom client and docker-compose executor

Installing Go

Linux

Ubuntu

Adding a PPA and install via apt-get
$ sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable
$ sudo apt-get update
$ sudo apt-get install golang
Setting the GOPATH

Configure the environment to be able to compile and run Go code.

$ mkdir $HOME/go
$ echo export GOPATH=$HOME/go >> $HOME/.bashrc
$ echo export PATH=$PATH:$GOPATH/bin >> $HOME/.bashrc
$ echo export PATH=$PATH:$GOROOT/bin >> $HOME/.bashrc

Finally we must reload the .bashrc configuration:

$ source $HOME/.bashrc

OS X

One way to install go on OS X is by using Homebrew

Installing Homebrew

Run the following command from the terminal to install Hombrew:

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Installing Go using Hombrew

Run the following command from the terminal to install Go:

$ brew install go

Setting the GOPATH

Configure the environment to be able to compile and run Go code.

$ mkdir $HOME/go
$ echo export GOPATH=$HOME/go >> $HOME/.profile
$ echo export GOROOT=/usr/local/opt/go/libexec >> $HOME/.profile
$ echo export PATH=$PATH:$GOPATH/bin >> $HOME/.profile
$ echo export PATH=$PATH:$GOROOT/bin >> $HOME/.profile

Windows

Download and run the msi installer from https://golang.org/dl/

Installing Docker Compose

To show Aurora's new multi executor feature, we need to use at least one custom executor. In this case we will be using the docker-compose-executor.

In order to run the docker-compose executor, each agent must have docker-compose installed on it.

This can be done using pip:

$ sudo pip install docker-compose

Downloading gorealis

Finally, we must get gorealis using the go get command:

go get github.com/rdelval/gorealis

Creating Aurora Jobs

Creating a thermos job

To demonstrate that we are able to run jobs using different executors on the same scheduler, we'll first launch a thermos job using the default Aurora Client.

We can use a sample job for this:

hello_world.aurora

hello = Process(
  name = 'hello',
  cmdline = """
    while true; do
      echo hello world
      sleep 10
    done
  """)

task = SequentialTask(
  processes = [hello],
  resources = Resources(cpu = 1.0, ram = 128*MB, disk = 128*MB))

jobs = [Service(
  task = task, cluster = 'devcluster', role = 'www-data', environment = 'prod', name = 'hello')]

Now we create the job:

aurora job create devcluster/www-data/prod/hello hello_world.aurora

Creating a docker-compose-executor job

Now that we have a thermos job running, it's time to launch a docker-compose job.

We'll be using the gorealis library sample client to send a create job request to the scheduler, specifying that we would like to use the docker-compose executor.

Furthermore, we will be specifying what resources we need to download in order to successfully run a docker compose job.

The job configuration in the sample client looks like this:

job = realis.NewJob().
    Environment("prod").
    Role("vagrant").
    Name("docker-compose").
    ExecutorName("docker-compose-executor").
    ExecutorData("{}").
    CPU(1).
    RAM(64).
    Disk(100).
    IsService(false).
    InstanceCount(1).
    AddPorts(1).
    AddLabel("fileName", "sample-app/docker-compose.yml").
    AddURI("https://dl.bintray.com/rdelvalle/mesos-compose-executor/sample-app.tar.gz", true, true)

Now we run the client sending the create job command to Aurora:

go run $GOPATH/src/github.com/rdelval/gorealis/examples/Client.go -executor=compose -url=http://192.168.33.7:8081 -cmd=create

If everything went according to plan, a new job will be shown in the Aurora UI.

We can further investigate inside the Mesos task sandbox.

Inside the sandbox, under the sample-app folder, we can find a docker-compose.yml-generated.yml.

If we inspect this file, we can find the port at which we can find the web server we launched.

Under Web->Ports, we find the port Mesos allocated. We can then navigate to: <agent address>:<assigned port>

And a message from the executor should greet us.

Cleaning up

Using the Default Client

$ aurora job killall devcluster/www-data/prod/hello
$ aurora job killall devcluster/vagrant/prod/docker-compose

Using gorealis

$ go run $GOPATH/src/github.com/rdelval/gorealis/examples/Client.go -executor=compose -url=http://192.168.33.7:8081 -cmd=kill
$ go run $GOPATH/src/github.com/rdelval/gorealis/examples/Client.go -executor=thermos -url=http://192.168.33.7:8081 -cmd=kill