2016-02-17 5 views
2

Я создаю приложения Marathon, используя POST на интерфейсе REST «v2/apps». Если я попытаюсь создать приложение, которое не имеет доступных ресурсов в базовом кластере mesos (в данном случае host_port), создание приложения по-прежнему возвращает S_OK, пока приложение застряло в развертывании навсегда (статус никогда не переключается на работу).Как определить неудачу развертывания приложения Marathon из-за исчерпания ресурсов через API?

Есть ли способ скомпрометировать API создания приложений, если ресурсы недоступны - или, по крайней мере, - запрашивать состояние и идентифицировать, что приложение застряло в развертывании из-за сбоя ресурса, чтобы не работать быстро?

ответ

1

Марафон - это «второй слой», планировщик работает на вершине Мезоса. Он раскрывается только для ресурсов, выделенных ему мезосом. Марафон не имеет глобального кластерного представления, и, следовательно, он не знает, доступны ли запрашиваемые ресурсы где-либо в кластере или будут доступны в будущем.

Когда вы отправляете приложение в марафон, оно проверяет запрос, принимает его и ждет подходящего предложения от Мезоса. В вашем случае вы знаете, что подходящее предложение не поступит в ближайшем будущем (я полагаю, потому что есть другая задача, использующая этот конкретный порт для этого конкретного агента), но Marathon не знает об этом.

1

Вот статусы, которые используют марафон-интерфейс: https://mesosphere.github.io/marathon/docs/marathon-ui.html#application-status-reference

Тот, который вы ищете, вероятно, waiting состояния, которое можно определить с помощью запроса v2/queue и проверок, если queueEntry.delay.overdue === true в течение длительного периода времени.

Я только что построил некоторые prometheus тревог для беспокойства для подобных вопросов, как тот, который вы описали, видит MarathonAppCantGetSuitableOffers тревоги здесь: https://github.com/bergerx/prom_marathon_app_exporter#alerts-on-prometheus