Наш продукт находится в кластере Kubernetes на нашем сервере. Он еще не запущен в производство, поэтому в кластере работает несколько экземпляров для разных целей, каждый в своем собственном пространстве имен. Мне нужно запустить несколько нагрузочных тестов в одном из пространств имен, а тем временем мне нужно отслеживать использование ЦП. У нас есть Прометей и Графана для мониторинга.
Одна из целей этих тестов - узнать, какая нагрузка приводит к максимальной загрузке ЦП.
Итак, я ищу способ запросить использование ЦП пространства имен в процентах.
Вот что я собрал на основе примеров:
sum (rate (container_cpu_usage_seconds_total{namespace="$Namespace"}[1m])) / sum(kube_pod_container_resource_limits{resource="cpu", unit="core", namespace="$Namespace"}) * 100
Однако что-то должно быть не так с этим решением, потому что иногда на панели инструментов отображаются значения, превышающие 100%. Думая, что единицы должны быть разными, я попытался найти точную спецификацию этих показателей, но мне это не удалось.
(К сожалению, я даже не знаю, как рассчитывается загрузка ЦП и что на самом деле означает 100%.)
Я искал показатели, которые можно было бы использовать для решения этой проблемы, с помощью нескольких экспортеров: cAdvisor, Узел, куб-состояние-метрики и больше. Даже в этот На вид исчерпывающая статья, которая была доведена до моего сведения, заявляет, что метрика, которую я ищу, является важной, но не предусмотрено никакого способа ее запросить.
Любая помощь будет оценена, спасибо.
Я выяснил, почему я не могу использовать указанную выше метрику. Это потому, что обычно есть только несколько модулей, у которых даже есть настройка ограничения ЦП. В общем, это не нужно и сделает кластер неповоротливым.
Так
sum(kube_pod_container_resource_limits{resource="cpu", unit="core", namespace="$Namespace"})
суммирует все существующие ограничения для модулей пространства имен, но это не теоретическое 100% использование ЦП пространства имен. Поэтому иногда появляются проценты, превышающие 100%.
Однако я узнал, что теоретически пространство имен может использовать все ресурсы, делегированные узлам кластера. Я также узнал, что наш продукт, скорее всего, будет работать на машинах, очень похожих на этот тестовый сервер в производстве. Итак, чтобы получить процент использования ЦП, можно рассчитать namespace CPU usage / available CPU in cluster
в моем счастливом случае.
Вот как я это делаю:
sum (rate (container_cpu_usage_seconds_total{namespace="$Namespace"}[1m])) / sum(machine_cpu_cores) * 100
где $Namespace
это имя пространства имен.
(То же самое касается использования памяти.)
Это то, что я собираюсь отслеживать при выполнении нагрузочных и стресс-тестов.
Вы можете проверить использование ЦП пространства имен, используя произвольные метки с Prometheus. В эта статья вы полностью опишите, что вам нужно сделать. Формула будет выглядеть примерно так:
namespace:container_cpu_usage_seconds_total:sum_rate =
sum(rate(container_cpu_usage_seconds_total{image!=""}[5m])) by (namespace)
namespace:container_memory_usage_bytes:sum =
sum(container_memory_usage_bytes{image!=""}) by (namespace)
Также другой подход - использовать Прометей экспортер что позволяет легко узнать об использовании ЦП по пространству имен, узлу или пулу узлов.