如何根据apache marathon的正常运行时间缩小实例?

时间:2017-08-25 09:41:59

标签: mesos marathon mesosphere dcos

我发现自己处于这样一种情况,即我必须根据实际生命周期缩小容器实例。看起来新的实例在通过marathon的API缩小时首先被移除。 在扩展apache marathon上的实例时,是否有任何我不知道要实现此类策略或策略的配置?

截至目前,我正在使用marathon-lb-autoscale来自然地调整正在运行的实例数。然而,实际发生的事情是marathon-lb-autoscale在req / s增加或减少时执行PUT请求更新当前应用程序的instances属性。

scale_list.each do |app,instances|
    req = Net::HTTP::Put.new('/v2/apps/' + app)
    if !@options.marathonCredentials.empty?
      req.basic_auth(@options.marathonCredentials[0], @options.marathonCredentials[1])
    end
    req.content_type = 'application/json'
    req.body = JSON.generate({'instances'=>instances})
    Net::HTTP.new(@options.marathon.host, @options.marathon.port).start do |http|
      http.request(req)
    end
  end
end

我不知道缩小实例时是否考虑upgradeStrategy配置。使用默认设置,我无法使预期的行为起作用。

{
  "upgradeStrategy": {
    "minimumHealthCapacity": 1,
    "maximumOverCapacity": 1
  }
}

实际

  • instance 1
  • instance 2
  • PUT /v2/apps/my-app {instances: 3}
  • instance 1
  • instance 2
  • 实例3
  • PUT /v2/apps/my-app {instances: 2}
  • instance 1
  • instance 2

预期

  • instance 1
  • instance 2
  • PUT /v2/apps/my-app {instances: 3}
  • instance 1
  • instance 2
  • 实例3
  • PUT /v2/apps/my-app {instances: 2}
  • instance 2
  • 实例3

1 个答案:

答案 0 :(得分:3)

可以直接在应用程序的配置中指定killSelection,并指定YoungestFirst首先杀死最年轻的任务,或OldestFirst首先杀死最旧的任务。

参考:https://mesosphere.github.io/marathon/docs/configure-task-handling.html