Kubernetes: равномерно распределите реплики по кластеру

Мы можем использовать объект DaemonSet для развертывания одной реплики на каждом узле. Как мы можем развернуть, скажем, 2 реплики или 3 реплики на узел? Как мы можем этого добиться. пожалуйста, дайте нам знать

2 ответа

Нет никакого способа заставить x pods на узел, как это делает Daemonset. Однако при некотором планировании вы можете принудительно распределить pod по узлам, используя анти-сходство pod.

Допустим, у нас есть 10 узлов. Во-первых, нам нужен ReplicaSet (развертывание) с 30 модулями (по 3 на узел). Далее, мы хотим установить анти-сродство к pod, чтобы оно использовало "extendedDuringSchedulingIgnoredDuringExecution" с относительно большим весом и соответствовало меткам развертывания. Это приведет к тому, что планировщик предпочтет не планировать модули, где такой же модуль уже существует. Как только есть 1 модуль на узел, цикл начинается снова. Узел с 2 модулями будет иметь меньший вес, чем узел с 1 модулем, поэтому следующий модуль должен попытаться перейти туда.

Обратите внимание, что это не так точно, как DaemonSet и может столкнуться с некоторыми ограничениями, когда наступает время для увеличения или уменьшения кластера.

Более надежный способ масштабирования кластера - просто создать несколько наборов DaemonSets с разными именами, но одинаковыми во всех других отношениях. Поскольку DaemonSets будут иметь одинаковые метки, все они могут быть доступны через один и тот же сервис.

По умолчанию планировщик kubernetes предпочитает планировать пакеты на разных узлах.

  1. Планировщик kubernetes сначала определит все возможные узлы, в которых может быть развернут модуль, на основе ваших ограничений на сродство / анти-сродство / ресурсов / и т. Д.

  2. После этого планировщик найдет лучший узел, где можно развернуть модуль. Планировщик будет автоматически планировать размещение модулей в отдельных зонах доступности и на отдельных узлах, если это, конечно, возможно.

Вы можете попробовать это самостоятельно. Например, если у вас есть 3 узла, попробуйте развернуть 9 реплик модуля. Вы увидите, что на каждом узле будет запущено 2 модуля.

Другие вопросы по тегам