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

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

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

推薦する

#Windows VPS# host1plus-$12.5USD/4G メモリ/100g ハードディスク/6T トラフィック/10G ポート

多くの人が信頼できるWindows VPS [安価なWindows VPS]を探しています。一般的に...

123systems - 年間 30 ドル / 4 コア / 2g メモリ / 35g ハード ドライブ / 3T トラフィック / 4 つのデータ センター

123systems は、私の記憶が正しければ、ダラスのデータセンターに常に VPS を設置してきま...

コンテンツマーケティングではコンテンツの最適化を学ぶ必要がある

従来のブログ マーケティング、フォーラム マーケティング、または現在人気のソーシャル ネットワーク ...

Google Urchin 設定: 訪問者セグメントをカスタマイズする方法

Urchin では、定義済みのセグメント (地理的地域や言語など) 別にユーザーをグループ化するだけ...

今こそクラウドでディープラーニングを行う絶好の機会です

現在、機械学習は依然として人気がありますが、そのサブセットであるディープラーニングは企業にさらなる価...

360度検索でウェブサイトの表示効果を高める方法

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています小教室:百...

マッキンゼー:パブリッククラウドの導入により、企業のビジネスはより効率的かつ革新的になる

今日では、パブリック クラウドの導入が容易になり、企業は以前に比べてそのセキュリティや有効性に対する...

人気のオリンピックイベントからトラフィックを引き寄せる最速の方法

毎年開催されるオリンピックは誰もが注目するイベントです。昔は誰もがテレビで試合を観戦していましたが、...

潜在顧客を獲得し、取引を成立させるための3つのシンプルなオンラインマーケティングプラン

本日、Pujiang は、Win インターネット マーケティング オペレーティング システムにおける...

ウェブ解析ハック: ビジネス目標を測定可能な活動に定義する

この記事は、Web 分析の第一人者である Eric T. Peterson 氏の著書「Web Sit...

#クリスマス# vsyshost: 1Gbps の帯域幅、無制限のトラフィック、苦情防止 VPS、月額わずか 10 ドル、オランダ/ウクライナ

vsys.host では、VPS のクリスマス超割引プロモーションを実施しており、月額 10 ドルか...

事例: 機械系企業ウェブサイトの基本的なSEO診断

最近、Baidu のアルゴリズムが頻繁に更新され、多数の企業ウェブサイトが、重みの低下、包含の低下、...

iovz: 韓国のクラウドサーバー/VPS、SKデータセンター、月額60元から、2Gメモリ/2コア/50Gハードディスク(Windows提供)/5M帯域幅(トラフィック無制限)

iovz は、韓国の SK データセンターにクラウド サーバーを提供しています。このサーバーは中国本...