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

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

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

推薦する

競合他社の外部リンク分析のさまざまな側面

Baidu Webmaster Platformは、過去1年間に3回、ウェブサイトの外部リンクに対す...

オブザーバビリティサミット2023登録開始

「Observability Summit 2023」は、クラウドネイティブコミュニティが主催する技...

休息と仕事の弁証法的理解がウェブサイトの運営を改善する

ウェブマスターの中には、昼夜を問わずウェブサイトを運営している人もいますが、年末になると、休息が十分...

Baiduスナップショットのジレンマから抜け出すには、段階的に最適化を行う必要があります

ウェブマスター ツールは、すべてのウェブマスターが自分のウェブサイトの品質を分析するために不可欠なツ...

「古い3社」が語るインターネットの「新しい物語」:人材不足の電子商取引の道

最近のWeiboの投稿により、赤い牡丹柄の「国民的ベッドシーツ」が全国で人気となり、新たなノスタルジ...

変革中にBaiduのSEOポリシーが変革に従う必要があるかどうかを合理的に検討する

Baiduは6月から継続的にアルゴリズムをアップグレードし、サービス戦略を変更してきました。当初は義...

半年間のSEO学習経験から、SEOは思っているほど単純ではないことがわかります。

SEO は多くの神​​話を生み出し、SEO 初心者の私たちを SEO に夢中にさせ、SEO をしっか...

SAPコア製品を理解する

SAP は 2011 年から HANA 基盤のインメモリ データ プラットフォームを構築しており、2...

AMD Opteronプロセッサアップグレードプログラムはデータセンターにメリットをもたらす

AMD は、パートナーと顧客に AMD Opteron™ プロセッサ テクノロジーのパフォーマンスと...

ウェブサイト構造の最適化とユーザーエクスペリエンスの関係の分析

現在、インターネット上で議論されるユーザーエクスペリエンスは、コンテンツと外部リンクの2つの観点から...

2022年に人気の欧米トレンドに関する洞察

年末の販促シーズンが近づくにつれ、消費者のショッピング意欲は高まり続けています。このシーズン中にいか...

なぜ Taobao はゲームをプレイすることを要求するのでしょうか?

10年間の模索を経て、天猫双十一イベントの成長は徐々に鈍化し、増加スペースはますます小さくなっている...

最近の百度アルゴリズム調整に関する考察

Hengshui SEO は最近いくつかの問題を発見しました。最近これらの問題に遭遇しましたか? 1...

ソフトな記事を書くときは、東にフェイントをかけ、西に攻撃することを学ぶべきだ

却下の理由: 記事が読みにくい。引き続き作業を続けてください。若い頃、私はブルース・リーをとても崇拝...

Commvault と Digital China が提携し、クラウドでデータ保護サービスを提供

最近、クラウドおよびローカル環境向けのエンタープライズレベルのデータ管理ソフトウェアプロバイダーとし...