как уменьшить количество экземпляров в зависимости от их времени безотказной работы с помощью apache marathon?

Я оказался в ситуации, когда мне необходимо уменьшить масштаб экземпляров контейнера в зависимости от их фактического срока службы. Похоже, что свежие экземпляры удаляются первыми при уменьшении масштаба через API марафона. Есть ли какая-либо конфигурация, о которой я не знаю, для реализации такой стратегии или политики при масштабировании экземпляров на apache marathon?

На данный момент я использую marathon-lb-autoscale для автоматической настройки числа запущенных экземпляров. Что на самом деле происходит под капотом, так это то, что marathon-lb-autoscale выполняет запрос PUT, обновляя свойство instances текущего приложения, когда req/s увеличивается или уменьшается.

scale_list.each do |app,instances|
    req = Net::HTTP::Put.new('/v2/apps/' + app)
    if [email protected]?
      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

person Ivo    schedule 25.08.2017    source источник


Ответы (1)


Можно указать killSelection непосредственно в конфигурации приложения и указать YoungestFirst, которое убивает сначала самые молодые задачи, или OldestFirst, которое убивает сначала самые старые.

Ссылка: https://mesosphere.github.io/marathon/docs/configure-task-handling.html

person Ivo    schedule 25.08.2017