Robusta KRR - Kubernetesを最適化するためのリソース割り当てツール

Robusta KRR - Kubernetesを最適化するためのリソース割り当てツール

Robusta KRR (Kubernetes Resource Recommender) は、Kubernetes クラスター内のリソース割り当てを最適化するためのコマンドライン ツールです。 Prometheus からポッドの使用状況データを収集し、CPU とメモリの要求と制限を推奨します。これにより、コストを大幅に削減し、パフォーマンスを向上させることができます。

特徴

  • エージェントは不要: Robusta KRR はローカル マシン上で実行される CLI ツールであり、クラスター内で Pod を実行する必要はありません。
  • Prometheus 統合: 組み込みの Prometheus クエリを使用してリソース使用状況データを収集します。カスタム クエリのサポートも近日中に開始されます。
  • 拡張可能なポリシー: 独自のポリシーを簡単に作成して使用し、リソースの推奨事項を計算します。
  • 将来のサポート: 今後のバージョンでは、カスタム リソース (GPU など) とカスタム メトリックがサポートされる予定です。

Sysdig による最近の調査によると、Kubernetes クラスターには平均して次の機能があります。

  • 69% 未使用 CPU
  • 未使用メモリ 18%

KRR を使用してコンテナのサイズを適正化することで、クラウド コストを平均 69% 削減できます。

v0.10.15 以降で KRR が統合されている Robusta SaaS を使用する場合は、すべての推奨事項 (古いものも含む) を表示し、クラスター、名前空間、または名前でフィルタリングおよび並べ替えることができます。

仕組み

メトリクス収集

Robusta KRR は、使用状況データを収集するために次の Prometheus クエリを使用します。

  • CPU 使用率: sum(irate(container_cpu_usage_seconds_total{{namespace="{object.namespace}", pod="{pod}", cnotallow="{object.container}"}}[{step}]))。
  • メモリ使用量: sum(container_memory_working_set_bytes{job="kubelet", metrics_path="/metrics/cadvisor", image!="", namespace="{object.namespace}", pod="{pod}", cnotallow="{object.container}"}).

アルゴリズム

デフォルトでは、KRR は単純な戦略を使用してリソースの推奨を計算します。計算方法は次の通りです (正確な数値は CLI パラメータでカスタマイズできます)。

  • CPU の場合、リクエストを 99 パーセンタイルに設定し、制限なしに設定します。つまり、99% のケースでは、CPU 要求は十分です。残りの1%については制限を設けません。これは、ポッドがバーストして、ノード上で使用可能な任意の CPU (たとえば、他のポッドが要求したが現在使用していない CPU) を使用できることを意味します。
  • メモリについては、過去 1 週間の最大値を使用し、5% のバッファを追加します。

インストールと使用方法

MacOS/Linux ユーザーは brew を使用してワンクリックでインストールできます。

 brew tap robusta-dev/homebrew-krr brew install krr

インストールが完了したら、次のコマンドを実行して、インストールが成功したかどうかを確認できます。

 krr --help # 第一次可能会花较长时间

手動でインストールする場合は、まずマシンに Python 3.9 以上がインストールされていることを確認してください。次に、コードを複製します。

 git clone https://github.com/robusta-dev/krr cd krr

インストールの依存関係:

 pip install -r requirements.txt

最後に、次のコマンドを実行してツールを実行します。

 python krr.py --help

ソース コードを使用するには、Python スクリプトとして実行する必要があります。brew を使用してインストールすると、krr を実行できるようになります。上記のすべての例では、実行コマンドが krr ... として示されていますが、手動インストールを使用している場合は、python krr.py ... に置き換えてください。

インストールが完了したら、KRR ツールを使用できます。たとえば、次のような簡単な戦略を実行できます。

 krr simple

特定の名前空間 (default および ingress-nginx) のみが必要な場合:

 krr simple -n default -n ingress-nginx

デフォルトでは、krr は現在のコンテキストで実行されます。別のコンテキストで実行する場合:

 krr simple -c my-cluster-1 -c my-cluster-2

JSON 出力を取得する場合 (ログが結果ファイルに記録されないように --logtostderr が必要です):

 krr simple --logtostderr -f json > result.json

YAML 形式で出力を取得する場合:

 krr simple --logtostderr -f yaml > result.yaml

追加のデバッグ ログを表示する場合:

 krr simple -v

ポリシー設定の詳細については、以下を参照してください。

 krr simple --help

デフォルトでは、KRR は次のラベルをスキャンして実行中の Prometheus を自動的に検出しようとします。

 "app=kube-prometheus-stack-prometheus" "app=prometheus,compnotallow=server" "app=prometheus-server" "app=prometheus-operator-prometheus" "app=prometheus-msteams" "app=rancher-monitoring-prometheus" "app=prometheus-prometheus"

これらのラベルのいずれにも Prometheus が見つからない場合は、エラー メッセージが表示され、URL を明示的に渡す必要があります (-p フラグを使用)。

Prometheus が自動的に接続されない場合は、kubectl port-forward を使用して Prometheus を手動で転送できます。

たとえば、kube-prometheus-st-prometheus-0 という名前の Prometheus Pod がある場合、次のコマンドでそのポートを転送できます。

 kubectl port-forward pod/kube-prometheus-st-prometheus-0 9090

次に、別のターミナルを開き、明示的な Prometheus URL を指定して krr を実行します。

 krr simple -p http://127.0.0.1:9090

さらに、ニーズに応じてカスタム戦略を作成することもできます。たとえば、次のコードはカスタム戦略を作成します。

 # This is an example on how to create your own custom strategy import pydantic as pd import robusta_krr from robusta_krr.api.models import HistoryData, K8sObjectData, ResourceRecommendation, ResourceType, RunResult from robusta_krr.api.strategies import BaseStrategy, StrategySettings # Providing description to the settings will make it available in the CLI help class CustomStrategySettings(StrategySettings): param_1: float = pd.Field(99, gt=0, descriptinotallow="First example parameter") param_2: float = pd.Field(105_000, gt=0, descriptinotallow="Second example parameter") class CustomStrategy(BaseStrategy[CustomStrategySettings]): """ A custom strategy that uses the provided parameters for CPU and memory. Made only in order to demonstrate how to create a custom strategy. """ def run(self, history_data: HistoryData, object_data: K8sObjectData) -> RunResult: return { ResourceType.CPU: ResourceRecommendation(request=self.settings.param_1, limit=None), ResourceType.Memory: ResourceRecommendation(request=self.settings.param_2, limit=self.settings.param_2), } # Running this file will register the strategy and make it available to the CLI # Run it as `python ./custom_strategy.py my_strategy` if __name__ == "__main__": robusta_krr.run()

GitHub アドレス: https://github.com/robusta-dev/krr

<<:  クラウドホスティングとセルフホスティング

>>:  クラウド変革を成功させるために考慮すべき重要な要素

推薦する

中国のバレンタインデーの観点から見たオンラインマーケティング

毎年恒例の七夕祭りがまたやって来ました。朝、仕事に出かけると、街のいたるところで大きなバラの花束を持...

技術革新はあらゆる産業に利益をもたらします。 Huawei Cloudは企業がデータの価値を引き出すことを支援します

[51CTO.comからのオリジナル記事]第14次5カ年計画では、デジタル経済の内容が独立した章とし...

エンタープライズITアーキテクチャにおけるクラウドコンピューティングの応用に関する簡単な説明

クラウド コンピューティングは大手インターネット企業から生まれました。コストのプレッシャーと急激なビ...

KOC は貧しい顧客からの嘘ですか?

KOC(Key Opinion Consumer)はここ数日、白熱した議論を巻き起こしている。Goo...

「拼小全」、Pinduoduo のソーシャル ネットワーキングにおける次の戦いは?

安価なテスラ5台と合計20万元の価格差補助。Pinduoduoは「無視できる」価格で、多くの人がかけ...

新しいサイトの外部リンクを増やす方法の分析例

みなさんこんにちは。私は湖南省出身のキネスです。最近、編集者の新しいウェブサイトが19日間オンライン...

現在、WeChat マーケティングにはどのような問題があるのでしょうか?

WeChat マーケティングは、WeChat テクノロジーの発展とともに生まれた革新的なポイントツー...

Amazon EMR の紹介

Amazon EMR は、複数の動的にスケーラブルな Amazon EC2 インスタンスにわたって大...

iOS 7のバッテリー節約のヒント

9月19日の早朝、iOS 7は予定通り世界中のAppleユーザーに配信されました。 iOS 7 は、...

clouveo: 月額 2.1 ドルから、ロサンゼルス\アムステルダム、無制限のトラフィック、カスタム ISO をサポート、Windows が付属

clouveo は、現在から 7 月 23 日まで、米国ロサンゼルスとオランダのアムステルダムのデー...

greencloudvps-10g ポート VPS/Windows/5.95 USD

greencloudvps、どの VPS でも 50% オフ、割引コード: 32YWXPKGT9。購...

内部ページキーワードのランキングに影響を与える要因の簡単な分析

私は 1 か月以上にわたって内部ページ キーワード ランキングを実施してきたので、どのキーワードが効...

オンラインマーケティングにおけるよくある誤解についての2年間の経験

現在、インターネット上にはインターネットマーケティングに関する記事や研修が多すぎます。また、内容も多...

2017 雲奇北京サミット: アリババの AI 産業レイアウトを公開

[51CTO.com からのオリジナル記事] 昨年の Yunqi Conference Beijin...

CZ ウェブマスター ツールにおける Baidu からのトラフィックのソースに関するいくつかの意見

SEO実践者が毎日行うべきことは、自社サイトのキーワード順位やサイトトラフィック状況などを確認するこ...