【问题标题】:how to scale down instances based on their uptime with apache marathon?如何根据 apache marathon 的正常运行时间缩减实例?
【发布时间】:2017-08-25 09:41:59
【问题描述】:

我发现自己处于需要根据容器实例的实际生命周期缩减容器实例的情况。通过 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
  }
}

实际

  • 实例 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

【问题讨论】:

    标签: mesos marathon mesosphere dcos


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2021-01-19
      • 2017-05-28
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 2015-10-13
      相关资源
      最近更新 更多