mesos—如何使用ApacheMarathon根据示例的正常运行时间缩小示例的规模?

bqujaahr  于 2021-06-26  发布在  Mesos
关注(0)|答案(1)|浏览(261)

我发现自己处于这样一种情况:我有必要根据容器示例的实际生存期来缩小它们的规模。在通过marathon的api进行缩减时,似乎会首先删除新示例。在缩小apachemarathon上的示例时,是否有我不知道的实现这种策略或策略的配置?
现在我正在使用marathonlb autoscale来自动调整运行示例的数量。但实际上引擎盖下发生的是 marathon-lb-autoscale 是否执行 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
  }
}

实际

示例1
示例2 PUT /v2/apps/my-app {instances: 3} 示例1
示例2
示例3 PUT /v2/apps/my-app {instances: 2} 示例1
示例2

预期

示例1
示例2 PUT /v2/apps/my-app {instances: 3} 示例1
示例2
示例3 PUT /v2/apps/my-app {instances: 2} 示例2
示例3

1l5u6lss

1l5u6lss1#

可以指定 killSelection 直接在应用程序的配置中指定 YoungestFirst 哪个先杀死最年轻的任务 OldestFirst 先杀死最老的。
参考文献:https://mesosphere.github.io/marathon/docs/configure-task-handling.html

相关问题