По умолчанию узлы kubernetes не будут пустыми. Вместо этого у него есть запущенные процессы еще до запуска вашей рабочей нагрузки приложений:
- kubelet выполняется (в каждом узле)
- kube-proxy работает как демон-набор (на каждом узле)
- среда выполнения контейнера (Docker) работает на каждом узле
- может быть запущен другой набор-демон (например, aws -узел DS в случае EKS ..).
Мы здесь обсуждаем рабочие узлы, а не мастера.
Итак, представьте себе все это, в конечном итоге вы выберете подходящие ресурсы для каждого узла.
Не все узлы должны быть одинакового размера. Однако вы решаете, какой размер вам нужен в соответствии с типом ваших приложений:
Если ваши приложения потребляют память больше, чем процессоры (например, Java Приложения), вам нужно будет выбрать Node of [2CPU, 8GB] лучше, чем [4CPUs, 8GB] .
Если ваши приложения потребляют CPU больше, чем память (например, рабочая нагрузка ML ), вам нужно будет выбрать противоположное; инстансы, оптимизированные для вычислений.
Золотое правило ? состоит в том, чтобы вычислить полную емкость лучше, чем рассматривать индивидуальную емкость для каждого узла.
Это означает, что 3 больших узла могут быть лучше, чем 4 средних узлов с точки зрения стоимости, но также и с точки зрения наилучшего использования емкости.
введите описание изображения здесь
В заключение ресурс узла должен быть:
- не менее 2 ЦП
- не менее 4 ГБ памяти
В противном случае следует ожидать проблем с емкостью.
Теперь мы подошли к половине ответа: определите емкость кластера.
Вторая половина касается ответа о том, как назначить ресурсы для каждого приложения (модуля) .
Это попадает в другой вопрос; Сколько потребляет ваше приложение?
Чтобы ответить на этот вопрос, вам нужно контролировать свое приложение с помощью инструментов APM, таких как Prometheus + Grafana.
Как только вы получите представление о средних показателях потребления, самое время для установки ограничений ресурсов для вашего приложения (его подов).
Лимиты могут ограничивать приложение, поэтому вам необходимо настроить наряду с другими функциями для горизонтального автоматического -scaling:
- Запуск модулей внутри развертывания для управления репликами и развертыванием.
- Автоматическое масштабирование HPA или Horizontal Pod: которое отслеживает модули развертывания, а затем масштабирует их в соответствии с пороговыми значениями (ЦП, память)
В качестве заключения для этой части мы можем сказать:
- Измерение: начать измерение для идентификации resources.limits
и resources.requests
.
- Измерение: измерение после запуска приложения для повторного определения необходимых ресурсов.
- Измерение: Сохранить измерение