mesosapache-aurora

Aurora file define host port


Okay, after a week, or more, my Aurora Cluster is running. This was not really easy but, nevertheless, I got it.

I have a simple aurora file

# copy frontend into the local sandbox
clone_service = Process(
  name = 'copy service',
  cmdline = 'git clone https://citrullin@bitbucket.org/jakiku/frontend.git frontend')

install_npm_deps = Process(
  name = 'install npm dependencies',
  cmdline = 'cd frontend && npm install'
)

run_server = Process(
  name = 'run server',
  cmdline = 'node server.js'
)

# describe the task
run_frontend_service = SequentialTask(
  processes = [clone_service, install_npm_deps, run_server],
  resources = Resources(cpu = 1, ram = 128*MB, disk=64*MB))

jobs = [
  Service(cluster = 'mesos-fr',
      environment = 'devel',
      role = 'www-data',
      name = 'frontend_service',
      task = run_frontend_service)
]

Nothing special. I want only define which port I need to use. I checked Resources(port = 3000) but it doesn't work. It's not really a resource, it's an attribute in mesos


Solution

  • Generally speaking you want to avoid static ports with Aurora jobs. Since any number of tasks could land on the same host, there's no good way to guarantee that multiple tasks wouldn't request the same port causing one of them to randomly fail.

    The recommended way to solve this problem is to request a port from Mesos using the thermos namespace in your aurora config. For example, if you were to do something like:

    run_server = Process(
      name = 'run server',
      cmdline = 'node server.js --port={{thermos.ports[http]}}'
    )
    

    Then Aurora will assign a random port to your task when it is assigned to a host.

    The obvious question this raises is how do other things find your service if it's running on a randomly assigned port that can change over time as your task is moved around between hosts. The answer to this is service discovery. If you add announce=Announcer() to your job configuration, then your task will be added to a ServerSet which other tasks can use to discover and communicate with it.

    Reference:

    Mesos documentation on configuring agents to offer ports.

    Aurora documentation on requesting ports here.