私たちの製品はサーバー上のKubernetesクラスターにあります。まだ本番環境にはないので、クラスター内でさまざまな目的で実行されている複数のインスタンスがあり、それぞれが独自の名前空間にあります。名前空間の1つでいくつかの負荷テストを実行する必要があり、その間CPU使用率を監視する必要があります。監視用にPrometheusとGrafanaがあります。
これらのテストの目的の1つは、CPU使用率を最大にするための負荷を知ることです。
そこで、名前空間のCPU使用率をパーセンテージとしてクエリする方法を探しています。
以下は、例に基づいて私がまとめたものです。
sum (rate (container_cpu_usage_seconds_total{namespace="$Namespace"}[1m])) / sum(kube_pod_container_resource_limits{resource="cpu", unit="core", namespace="$Namespace"}) * 100
ただし、場合によっては100%を超える値がダッシュボードに表示されるため、このソリューションに問題があるはずです。単位は異なるはずだと考え、これらのメトリックの正確な仕様を調べようとしましたが、成功しませんでした。
(残念ながら、CPU使用率の計算方法や、100%が実際に何を意味するかについてはあまり知りません。)
cAdvisor 、 Node 、 kube-state-metrics などのいくつかのエクスポーターを通じて、この問題に使用できるメトリックを検索しました。私の注意を引いた this 一見網羅的な記事でも、私が探しているメトリックは重要なものであると述べられていますが、それをクエリする方法は提供されていません。
どんな助けでも感謝します、ありがとう。
上記で引用したメトリックを使用できない理由がわかりました。それは通常、CPU制限の設定さえあるポッドが数個しかないためです。これは一般的に必要ではなく、クラスターを不格好にします。
そう
sum(kube_pod_container_resource_limits{resource="cpu", unit="core", namespace="$Namespace"})
名前空間のポッドに対する既存の制限をすべて合計しますが、それは名前空間の理論的な100%CPU使用率ではありません。これが、100%を超えるパーセンテージが時々現れる理由です。
ただし、理論的には、名前空間がクラスターのノードに委任されたすべてのリソースを使い果たす可能性があることを知りました。また、私たちの製品は、本番環境のこのテストサーバーと非常によく似たマシンで実行される可能性が高いことも学びました。したがって、CPU使用率をパーセンテージで取得するには、私のラッキーケースでnamespace CPU usage / available CPU in cluster
を計算することが有効です。
ここに私がそれをする方法があります:
sum (rate (container_cpu_usage_seconds_total{namespace="$Namespace"}[1m])) / sum(machine_cpu_cores) * 100
ここで、$Namespace
は名前空間の名前です。
(メモリ使用量も同様です。)
これが、負荷テストとストレステストの実行中に監視するものです。
Prometheusで任意のラベルを使用して、ネームスペースのCPU使用率を確認できます。 その記事 には、何をする必要があるかを完全に記述しています。式は次のようになります。
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エクスポーター を使用することです。これにより、名前空間、ノード、ノードプールごとのCPU使用率を簡単に取得できます。