Aurora文件定义主机端口

时间:2016-10-16 20:04:11

标签: mesos aurora

好的,一周或更长时间后,我的Aurora群集正在运行。这不是很容易,但是,我得到了它。

我有一个简单的极光文件

# 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)
]

没什么特别的。我只想定义我需要使用哪个端口。我检查了资源(port = 3000),但它没有工作。它不是真正的资源,它是mesos中的一个属性

1 个答案:

答案 0 :(得分:0)

一般来说,您希望避免使用Aurora作业的静态端口。由于任何数量的任务都可能落在同一主机上,因此没有什么好办法可以保证多个任务不会请求同一个端口导致其中一个任务随机失败。

解决此问题的推荐方法是使用极光配置中的thermos名称空间从Mesos请求端口。例如,如果您要执行以下操作:

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

然后,当Aurora分配给主机时,Aurora会为您的任务分配一个随机端口。

这引发的一个显而易见的问题是,如果您的服务在随机分配的端口上运行,当您的任务在主机之间移动时,这些端口可能会随时间发生变化,那么该服务如何找到您的服务。答案是service discovery。如果您将announce=Announcer()添加到job configuration,那么您的任务将被添加到ServerSet中,其他任务可以用来发现并与之通信。

参考:

Mesos documentation on configuring agents to offer ports

Aurora documentation on requesting ports here