Распространение модулей по кластеру

Aug 20 2020

Текущее использование политики автоматического масштабирования AWS для запуска рабочих узлов EKS (минимум + желаемое 10, максимум 15) в фиксированное время каждый день. Есть 120 подов и 30 развертываний.

Очевидно, сначала будет запущен только один узел. Потом второй узел. После этого будет запущен последний узел. По этой причине Kubernetes добавляет все модули в первые узлы. Есть ли способ, чтобы поды были равномерно распределены в сценарии?

Ответы

1 EduardoBaitello Oct 23 2020 at 21:30

Взгляните на Descheduler . Этот проект работает как задание Kubernetes, которое направлено на уничтожение подов, когда он считает, что кластер неуравновешен.

LowNodeUtilizationСтратегия кажется, подходит вашему случаю:

Эта стратегия находит узлы, которые недостаточно используются, и выселяет модули, если это возможно, из других узлов в надежде, что воссоздание удаленных модулей будет запланировано на этих недостаточно загруженных узлах.


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

Вы можете использовать расширение kubectl rollout restart my-deployment. Это намного лучше, чем просто удалить модули с помощью kubectl delete pod, поскольку развертывание обеспечит доступность во время «ребалансировки» (хотя полное удаление модулей увеличивает ваши шансы на лучшую перебалансировку).

2 joshk132 Aug 21 2020 at 09:19

Вы должны изучить сродство и анти-сродство, поскольку это позволяет вам контролировать, какие поды переходят на какой узел. Вы можете сделать так, чтобы с анти-сродством на узле был только 1 модуль каждого развертывания. Это немного излишне и не сработает для вас, хотя IIRC вы можете иметь несколько модулей на узле только с ограничением.

https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/