Наш продукт находится в кластере 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 , Узел , kube-state-metrics и Больше. Даже в этой , казалось бы, исчерпывающей статье, которая была доведена до моего сведения, утверждается, что метрика, которую я ищу, является важной, но не предоставляется никакого способа ее запросить.
Любая помощь будет буду признателен, спасибо.
Вы можете проверить использование ЦП пространства имен, используя произвольные метки с 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)
Также другой подход заключается в использовании экспортера Prometheus , который позволяет легко получить данные об использовании ЦП по пространству имен, узлу или пулу узлов.
Я выяснил, почему я не смог использовать метрику, которую цитировал выше. Это потому, что обычно есть только несколько капсул, у которых даже установлен лимит процессора. В общем, она не нужна, и это сделает кластер неуклюжим. Итак,
Итак,
sum(kube_pod_container_resource_limits{resource="cpu", unit="core", namespace="$Namespace"})
суммирует все существующие ограничения для подпространства имен, но это не теоретическое 100-процентное использование CPU пространства имен. Поэтому иногда появляются проценты более 100%.
Однако, я узнал, что теоретически пространство имён может использовать все ресурсы, делегированные узлам кластера. Также я узнал, что наш продукт, скорее всего, будет работать на машинах, очень похожих на этот тестовый сервер в производстве. Поэтому, чтобы получить использование CPU в процентах, в моем счастливом случае можно вычислить использование/доступность CPU в кластере
.
Вот как я это делаю:
sum (rate (container_cpu_usage_seconds_total{namespace="$Namespace"}[1m])) / sum(machine_cpu_cores) * 100
где $Namespace
- это имя пространства имен.
(То же самое относится и к использованию памяти.)
Так что это то, что я буду отслеживать во время выполнения нагрузочных и стресс-тестов.
.