Как запустить один модуль на каждом узле без использования набора демонов в подгруппе всех узлов кластера?

#kubernetes #high-availability

Вопрос:

Представьте, что у нас есть кластер с 10 узлами, и мы хотим запустить реплику приложения на 3 из этих узлов, как это сделать?

Я думал об этом и придумал следующие решения, но у каждого из них есть проблема:

  • Пометьте эти 3 узла и используйте эту метку в приложении с репликами=3, но мы можем получить две реплики на одном узле (для обеспечения высокой доступности я хочу предотвратить это).
  • Пометьте эти 3 узла и используйте набор демонов и используйте эту метку в наборе демонов, но тогда у нас будет 7 модулей в режиме ожидания.

Каково решение этой проблемы?

Комментарии:

1. Я бы создал обычное развертывание и установил replicas: 3 ; они будут запланированы где-то в кластере, и вам не нужно будет беспокоиться о том, какие узлы в частности. Есть ли что-то особенное в 3 узлах, которые вы хотите использовать?

Ответ №1:

Пометьте эти 3 узла и используйте эту метку в приложении с репликами=3, но мы можем получить две реплики на одном узле (для обеспечения высокой доступности я хочу предотвратить это).

Вы можете использовать правила подантиаффинности или ограничения Topologyspread, чтобы избежать запуска 2 модулей на одном узле

Пометьте эти 3 узла и используйте набор демонов и используйте эту метку в наборе демонов, но тогда у нас будет 7 модулей в режиме ожидания.

Если ваш выбор узлов DeamonSet совпадает с 3 узлами, планировщик будет придерживаться этих узлов. Там не должно быть стручков, застрявших в ожидании.

Оба решения звучат хорошо. Возможно, использование развертывания сходства было бы более надежным: с набором демонов, если один из ваших узлов выйдет из строя, третья реплика не будет перепланирована до тех пор, пока вы не исправите этот узел. Что может быть проблемой, а может и не быть проблемой … вам решать.