現在、Kubernetes の Pod Horizontal Autoscaler (HPA) が業界で広く使用されています。ただし、一部の特殊な Pod (一部のステートフル Pod など) の場合、HPA ではリソース不足の問題をうまく解決できません。ここで、Vertical Pod Autoscaler (VPA) について説明します。この記事では主に、Kubernetes コミュニティの Vertical Pod Autoscaler コンポーネントの開発計画について紹介します。
VPA の定義 Vertical Pod Autoscaler (VPA) は、履歴データ、クラスター内の使用可能なリソースの数、リアルタイム イベント (OMM、つまりメモリ不足など) に基づいて、Pod に必要なリソースを自動的に設定し、実行時にリソースを自動的に調整できる基本サービスです。 導入 背景
ターゲット VPA には 2 つの目標があります。
関連機能 水平ポッドオートスケーラー (HPA) HPA は、リアルタイムの CPU 使用率やその他の特定のシグナルに基づいて、レプリケーション コントローラー内の Pod の数を動的に調整する基本サービスです。 通常、ユーザーはステートレス ワークロードには HPA を選択し、ステートフル ワークロードには VPA を選択します。組み合わせて使用されるシナリオもいくつかあります。 クラスターオートスケーラー クラスターの自動スケーリングは、クラスターの全体的なリソース使用率に基づいて Kubernetes クラスターのサイズを動的に調整します。 クラスターの自動スケーリング、HPA、および VPA は、完全な自動スケーリング ソリューションを提供します。 初期リソース 初期リソースは、履歴リソース使用率に基づいて初期リソース要求を提供します。これは Pod が作成された場合にのみトリガーされ、VPA はこの機能を継承して使用することを目的としています。 インプレース更新 インプレース アップグレードは、ノードに十分なリソースがある場合に、既存のコンテナを強制終了せずにリソース要求と制限を調整する計画された機能です。 VPA はこの機能から大きな恩恵を受けますが、最小限の実行可能な製品 (MVP) の妨げになるとは考えられていません。 リソースの見積もり リソース推定は、実行中のコンテナから未使用のリソースを一時的に再利用することでリソース使用率を向上させることができるもう 1 つの計画されている機能です。 リソース推定は、より短いタイムライン(ローカルの短期履歴データのみに基づく)に基づいており、回復後の品質が低く、初期のリソース予測を提供しないという点で、VPA とは異なります。 VPA とリソース推定は補完的です。 必要 関数
互換性がある。具体的には:
可用性 重量級コンポーネント (データベースまたはレコメンダー) の障害によって、既存の Pod の再作成がブロックされることはありません。 Pod 作成パスにとって重要なコンポーネントは、高可用性になるように設計する必要があります。 スケーラビリティ インプレース アップグレード コンポーネントが開発されると、VPA はそれを使用できるようになります。 デザイン 概要
システムアーキテクチャ VPA アーキテクチャ図 API 私たちは、容量拡張ターゲット、つまり Pod を一致させるために使用されるラベル セレクターと、更新ポリシーとリソース ポリシーの 2 つのポリシー モジュールを含む、新しいタイプの API オブジェクト VertialPodAutoscaler を提案します。さらに、彼は VPA 計算に関する最新の推奨事項を保持しています。 VPA API オブジェクトの概要
ラベルセレクター ラベル セレクターは、指定された VPA 戦略に基づいて、どのポッドをスケーリングする必要があるかを決定します。 Recommender は、特定の VPA に一致するすべてのシグナルを集約するため、ユーザーはラベルを設定して、同様の動作をするポッドを 1 つの VPA の下にグループ化することが重要です。 ポッドが複数の VPA ポリシーに同時に一致する場合など、競合をどのように処理するかはまだ決定されていません。 更新ポリシー 更新ポリシーは、VPA が変更を適用する方法を制御します。 MVPでは、モードという1つのフィールドのみが含まれます。
設定できるモードは 3 つあります。
次のいずれかの方法で VPA をオフにできます。
注: VPA を無効にすると、Pod はそれ以上の変更を行うことができなくなりますが、ユーザーが手動で更新するまで Pod の元のリソース状態は復元されません。
リソースポリシー リソース ポリシーは、VPA が推奨リソースを計算する方法を制御します。 MVP では、各コンテナー要求にオプションの上限と下限が含まれます。リソース戦略は後で追加のスイッチを使用して拡張でき、ユーザーは特定のシナリオに合わせて推奨アルゴリズムを調整できます。
おすすめ VPA リソースには、Recommender によって生成された最新の推奨事項を保持する出力専用フィールドがあります。このフィールドは、レコメンダーが一時的に利用できない場合に最新の推奨事項を取得するために使用できます。この推奨事項には、推奨されるターゲット リソースの量と範囲 (最大、最小) が含まれており、Updater はこれを使用して、Pod をいつ更新するかを決定できます。リソースが不足した場合、Updater は Pod リソースを推奨される最小限まで削減することを決定する場合があります。範囲の幅も推奨される信頼区間に影響します。
入場管理者 VPA アドミッション コントローラーは、ポッド作成リクエストをインターセプトします。 Pod が VPA 構成と一致し、モードがオフに設定されていない場合、コントローラーは提案されたリソースを Pod 仕様に適用してリソース要求を書き換えます。それ以外の場合、Pod 仕様は変更されません。 コントローラーは、Recommender の /recommendedPodResources から推奨リソースを取得します。呼び出しがタイムアウトするか失敗した場合、コントローラーは VPA オブジェクトにキャッシュされた提案にフォールバックします。これも利用できない場合は、コントローラはリソース要求を許可して、最初に指定されたリソースを配信します。 注: 将来的には、Pod に VPA が必要であるとマークすることで、VPA の使用を強制することができます (オプション)。これにより、対応する VPA 構成が作成されるまで、Pod のスケジュールが無効になります。一致する VPA 構成が見つからない場合、アドミッション コントローラはそのようなポッドを拒否します。この機能は、VPA 構成を作成して Pod を送信するユーザーにとって非常に便利です。 VPA アドミッション コントローラは、外部アドミッション フックとして実装されます。ただし、これは Webhook アドミッション コントローラーの変更に依存することに注意してください。 推薦者 Recommender は VPA の主要コンポーネントです。推奨リソースを計算する役割を担います。起動時に、Recommender はすべての Pod (VPA を使用しているかどうかに関係なく) の履歴リソース使用率と、履歴ストア内の Pod OOM イベントの履歴を取得します。このデータを集約し、メモリに保存します。 通常の操作中、Recommender は Metrics API を介して Metrics Server からリソース使用率と新しいイベントに関するリアルタイムの更新を取得します。さらに、クラスター内のすべてのポッドとすべての VPA オブジェクトを監視します。何らかの VPA セレクターに一致する各ポッドについて、Recommender は推奨リソースを計算し、VPA オブジェクトに推奨事項を設定します。 各 VPA オブジェクトには推奨事項があることを認識することが非常に重要です。ユーザーは、VPA を使用して、同様のリソース使用パターンを持つポッド (通常は単一のワークロードのレプリカまたはシャードのグループ) を制御する必要があります。 Recommender は拡張 API サーバーとして機能し、Podspec と Pod メタデータを取得して推奨リソースを返す同期メソッドを公開します。 レコメンダー API
この API は、既存の Pod だけでなく、まだ作成されていない Pod からも呼び出すことができることに注意してください。 アップデータ VPA Updater は、既存の Pod に推奨リソースを適用するコンポーネントです。クラスター内のすべての VPA オブジェクトと Pod を監視し、Recommender API を呼び出して、VPA によって制御される Pod の推奨事項を定期的に取得します。推奨されるリソースが実際に構成されたリソースと大幅に異なる場合、Updater は Pod を更新することを決定する場合があります。 MVP では (Pod リソースのインプレース アップグレードが利用可能になるまで)、これは既存の Pod を削除し、推奨リソースを使用して再作成することを意味します。 Updater は、レプリカ セットなどの他のメカニズムに依存して、削除された Pod を再作成します。ただし、そのようなメカニズムが実際に Pod に設定されているかどうかは確認されません。このようなチェックは CLI に実装でき、VPA が Pod と一致する場合にユーザーに警告しますが、Pod は自動的に再起動されません。 Pod を終了することは混乱を招き、一般的には望ましくありませんが、次のような場合には合理的な場合もあります。
Updater は、updatePolicy.mod が Auto に設定されている場合にのみ Pod を構成します。 クラスターの現在の状態 (割り当て、ノードで使用可能なスペース、その他のスケジュール制約など) に応じて、Updater は推奨事項をポッドに適用する前に調整する方法も理解する必要があります。そうしないと、ポッドが永久にキャンセルされる可能性があります。そのようなメカニズムはまだ設計されていません。 推奨モデル VPA はコンテナのリソース要求 (メモリと CPU) を制御します。 MVP では、リソース制限は常に無限に設定されます。 VPA を使用してリソース制限を設定するユースケースがあるかどうかは明らかではありません。 リソース要求は、コンテナーの現在の実行と以前の実行、および同様の属性 (名前、イメージ、コマンド、引数) を持つ他のコンテナーの分析に基づいて計算されます。推奨モデル (MVP) では、メモリと CPU の消費量が、過去 N 日間に観測されたものと等しい分布を持つ独立したランダム変数であると想定しています (週ごとのピークを捕捉するには、N の推奨値は N = 8 です)。将来的には、より高度なモデルが、傾向、周期性、その他の時間関連のパターンを検出しようとするかもしれません。 CPU の場合、目標は、コンテナによって使用される CPU が、コンテナの要求された CPU リソースを高い割合 (95% など) で超過し、特定のしきい値を下回ること (コンテナの CPU 使用率が要求された CPU リソースの 95% を超える時間が 1% のみであることなど) を保証することです。このモデルでは、「CPU 使用率」は短い時間間隔で測定された平均値として定義されます。測定間隔が短いほど、スパイクが多くレイテンシの影響を受けやすいワークロードに対する推奨事項の品質が向上します。最小の適切な間隔は 1 分あたり 1 回であり、1 秒あたり 1 回が推奨されます。 メモリの場合、目標は、特定の時間枠内でコンテナによって使用されるメモリがコンテナによって要求されたメモリ リソースを超える確率を、特定のしきい値未満 (たとえば、24 時間以内に 1% 未満) に保つことです。 OOM によるエビクションがサービス アプリケーションの可用性とバッチ計算の進行に大きな影響を与えないようにするには、ウィンドウを長く (24 時間以上) する必要があります (より高度なモデルでは、ユーザーが SLO を指定してこれを制御できます)。 OOMの処理 使用可能なメモリを超えたためにコンテナが削除された場合、実際のメモリ要件は不明です (消費量によって下限が明らかに決まります)。これは、最後に観測された使用量に「安全マージン」乗数を適用して、OOM イベントを人工的なメモリ使用量サンプルに変換することによってモデル化されます。 履歴ストレージ VPA は、履歴イベントおよびリソース使用率のプロバイダー向けのデータ アクセス API を定義します。当初は、少なくともリソース使用率の部分については、この API のリファレンス実装として Prometheus を使用し、履歴イベントは Infrastore などの別のソリューションでバックアップできます。ユーザーは独自の実装をプラグインできるようになります。 履歴ストレージには、Recommender と同様に、リアルタイムで更新されたリソース使用率とイベントが継続的に入力されます。少なくとも 8 日間のデータが保持されます。このデータは、起動時にレコメンダーを初期化するためにのみ使用されます。 未解決の質問 複数の VPA オブジェクトが Pod と一致する場合、競合がどのように解決されるか。 特定のコンテナに適用する前に、クラスターの現在の状態 (クォータ、ノードで使用可能なスペース、その他のスケジュール制約など) に基づいて推奨事項を調整する方法。 今後の仕事 Pod の起動時に VPA を統合する 現在の提案では、ポッドのアドミッション時間内にポッドに一致する VPA 構成がない場合、ポッドは元々構成されたリソースを使用してスケジュールされます。これはユーザーが望む動作ではない可能性があります。特に、ユーザーは VPA 構成を作成し、それを同時に Pod に送信したい場合があります。これにより競合状態が発生する可能性があります。結果は、どのリソース (VPA または Pod) が最初に処理されるかによって異なります。 この問題に対処するために、Pod に特別な注釈 (VPA が必要) を付けてマークし、対応する VPA が利用できない場合はアドミッション コントローラーが Pod を許可しないようにすることを提案します。 もう 1 つのアプローチは、同じ目的を果たす VPA 初期化子を導入することです。 垂直スケーリングと水平スケーリングを組み合わせる 原則として、2 つのメカニズムが異なるリソースで動作する限り、単一のワークロード (Pod のグループ) に対して垂直スケーリングと水平スケーリングの両方を使用できます。正しいアプローチは、ボトルネック リソースに基づいて HPA がグループをスケーリングするようにすることです。 VPA は他のリソースを制御できます。例:
ただし、これはより高度な形式の自動スケーリングであり、Vertical Pod Autoscaler の MVP バージョンでは十分にサポートされていません。実装の難しさは、インスタンス数の変更がボトルネック リソースの使用率に影響するだけでなく (これが水平拡張の原則です)、VPA によって制御される非ボトルネック リソースにも影響する可能性があることです。履歴リソース使用率を集計して推奨事項を生成するときに、VPA モデルを HPA と組み合わせるには、グループのサイズを考慮して VPA モデルを拡張する必要があります。 バッチワークロード バッチ ワークロードには、レイテンシの影響を受けやすいワークロードとは異なる CPU 要件があります。要求のレイテンシではなくスループットを重視します。つまり、VPA は CPU 配分の高いパーセンタイルではなく、平均 CPU 消費量に基づいて CPU 要求を決定する必要があります。 TODO: バッチ ワークロードの推奨モデルと、VPA がバッチとサービングを区別する方法を説明します。 1 つの可能なアプローチは、PodSpec.restartPolicy を確認することです。もう 1 つのアプローチは、ユーザーが PodResourcePolicy でワークロードのレイテンシ要件を指定できるようにすることです。 |
<<: マルチクラウドセキュリティ戦略に取り組むには作業が必要
>>: ストレージを改善する 5 つのマルチクラウド ユースケース
「クラシック:プロメテウス-$3.8/KVM/512mメモリ/15gSSD/2Tトラフィック」は6月...
Baidu が長期間更新されない問題の対処方法。実は、これは相対的なものです。Baidu はもう更新...
今日、QQにはネットユーザーからの質問が殺到したが、それらはすべて、自身のウェブサイト上の大規模なK...
dedipath は現在、米国の 7 つのデータセンターで VPS サービスを 40% 割引で提供し...
Zorocloudはこれまで、CN2 GIA/AS4809、CUII/AS9929、AS4837など...
Li Tian (仮名) さんは、マウスを動かしてページを更新した後、ウェブページにいくつかの大きな...
[[213745]] Shopify の不正防止機械学習から Salesforce の Einste...
GigsGigsCloud は、クリスマスプレゼント、香港 VPS値下げプロモーション、すべての C...
Hawkhostの毎年恒例のブラックフライデープロモーションが予定通り到来しました。これはHawkh...
gcore は、高性能、低レイテンシ、国際クラウドおよびエッジ ソリューションを提供するヨーロッパの...
8月26日、第1回Alibaba 3D AIチャレンジが終了しました。アリババがオープンソース化した...
今日、私たちは中国最大の検索エンジンであり、世界最大の中国検索エンジンでもある百度を熱心に利用してい...
アリペイと天虹基金が共同で立ち上げた余額宝は、再び市場に「プラットフォーム」の威力を感じさせた。わず...
近年、オンラインマーケティングは業界で徐々に話題になってきました。真贋判定から賞品抽選用のコードのス...
9月18日、Amazon Web Servicesと51CTOが主催する「Straight to t...