Я работаю над переносом своих приложений в Kubernetes. Я использую EKS.
Я хочу распределить свои модули по разным узлам, чтобы избежать единой точки отказа. Я читал о pod-affinity
и anti-affinity
и required
и preferred
режиме.
Этот ответ дает очень хороший способ для достижения этой цели.
Но я сомневаюсь, скажем, если у меня есть 3 узла, из которых 2 уже заполнены (с точки зрения ресурсов). Если я использую requiredDuringSchedulingIgnoredDuringExecution
, k8s раскручивает новые узлы и распределяет модули для каждого узла. И если я использую preferredDuringSchedulingIgnoredDuringExecution
, он проверит предпочтительные узлы и, не найдя другие узлы, развернет все модули только на третьем узле. В этом случае он снова станет единой точкой отказа.
Как мне решить это условие?
Один из способов, который я могу придумать, - это иметь кластер с избыточным выделением ресурсов, чтобывсегда есть некоторые дополнительные узлы.
Второй способ, я не уверен, как это сделать, но я думаю, что должен быть способ использования как requiredDuringSchedulingIgnoredDuringExecution
, так и preferredDuringSchedulingIgnoredDuringExecution
.
Кто-нибудь может мне с этим помочь? Я что-то пропустил? Как люди работают с этим условием?
Я новичок в Kubernetes, поэтому не стесняйтесь исправлять меня, если я ошибаюсь или что-то упускаю.
Заранее спасибо
Примечание:
У меня нет проблем с запуском нескольких одинаковых модулей на одном узле, просто я не хочу, чтобы все модули работали на одном и том же узле, просто потому, что было толькоодин узел доступен для развертывания.