#kubernetes #high-availability
Вопрос:
Представьте, что у нас есть кластер с 10 узлами, и мы хотим запустить реплику приложения на 3 из этих узлов, как это сделать?
Я думал об этом и придумал следующие решения, но у каждого из них есть проблема:
- Пометьте эти 3 узла и используйте эту метку в приложении с репликами=3, но мы можем получить две реплики на одном узле (для обеспечения высокой доступности я хочу предотвратить это).
- Пометьте эти 3 узла и используйте набор демонов и используйте эту метку в наборе демонов, но тогда у нас будет 7 модулей в режиме ожидания.
Каково решение этой проблемы?
Комментарии:
1. Я бы создал обычное развертывание и установил
replicas: 3
; они будут запланированы где-то в кластере, и вам не нужно будет беспокоиться о том, какие узлы в частности. Есть ли что-то особенное в 3 узлах, которые вы хотите использовать?
Ответ №1:
Пометьте эти 3 узла и используйте эту метку в приложении с репликами=3, но мы можем получить две реплики на одном узле (для обеспечения высокой доступности я хочу предотвратить это).
Вы можете использовать правила подантиаффинности или ограничения Topologyspread, чтобы избежать запуска 2 модулей на одном узле
Пометьте эти 3 узла и используйте набор демонов и используйте эту метку в наборе демонов, но тогда у нас будет 7 модулей в режиме ожидания.
Если ваш выбор узлов DeamonSet совпадает с 3 узлами, планировщик будет придерживаться этих узлов. Там не должно быть стручков, застрявших в ожидании.
Оба решения звучат хорошо. Возможно, использование развертывания сходства было бы более надежным: с набором демонов, если один из ваших узлов выйдет из строя, третья реплика не будет перепланирована до тех пор, пока вы не исправите этот узел. Что может быть проблемой, а может и не быть проблемой … вам решать.