Могут ли kubernetes перемещать поды, у которых начинаются мешающие рабочие нагрузки?
Учтите, что у меня есть два модуля: один обслуживает веб-страницы, а другой выполняет согласованные вычисления, например сервер Flask в одном модуле и Spark Executor в другом.
Внезапно новая функция создает большой трафик для определенного маршрута на сервере Flask. Обычно Исполнитель является числовым и последовательным, а сервер Flask разрежен и ограничен памятью/IO, но это приводит к тому, что рабочие нагрузки очень похожи и останавливает ЦП на этом узле.
Может ли планировщик Kubernetes определить это и перепланировать модуль?
1 ответ
Нет, это не работает таким образом.
K8s не отслеживает процессор/память/IO модулей после того, как они запланированы. Вы сами можете измерить это и внести изменения в свое развертывание.
Я не говорю, что это невозможно сделать. Все, что я говорю, это то, что k8s не делает этого «из коробки», а также я не знаю каких-либо сторонних решений, которые бы это делали.
Вот мое предложение, что вы можете сделать:
Поскольку вы знаете, что не хотите, чтобы Flask и Spark работали вместе, вы можете использовать функцию сходства. Если быть более конкретным: podAntiAffinity
Еще одна вещь, которую вы можете сделать, — это установить ограничения/запрос ресурсов модуля .
Таким образом, вы можете быть уверены, что модуль использует только то количество ресурсов, которое ему разрешено использовать, и, как следствие, не приведет к остановке узла. Обычно считается хорошей практикой добавлять ограничения ресурсов модуля.