適用対象: ✔️ AKS Automatic ✔️ AKS Standard
この記事では、オープンソース バージョンの Kubernetes に基づく Azure Kubernetes Service (AKS) での、Vertical Pod Autoscaler (VPA) の使用方法の概要について説明します。
ほとんどの運用ワークロードでは、AKS Automatic が推奨される既定の AKS エクスペリエンスです。 AKS Automatic は既定で運用環境の準備が整っており、構成済みのクラスター機能として VPA が含まれています。 AKS Standard では、VPA を明示的に構成および管理します。
VPA を構成すると、過去の使用状況に基づいて、ワークロードごとのコンテナーに対するリソース要求と制限が自動的に設定されます。 VPA は、他のポッド用に CPU とメモリを解放し、AKS クラスターを効果的に利用できるようにします。 ポッドの垂直方向の自動スケーリングは、時間の経過に伴うリソースの使用量に関する推奨事項を提供します。 リソース使用量の急増を管理するには、必要に応じてポッド レプリカの数をスケーリングする Horizontal Pod Autoscaler を使用します。
AKS Automatic の詳細については、「Azure Kubernetes Service (AKS) Automatic とは」を参照してください。
AKS Automatic と AKS Standard における VPA
VPA は両方の AKS クラスター モードで使用できますが、セットアップは異なります。
- AKS 自動: VPA が事前に構成されています。
- AKS Standard: VPA は省略可能であり、明示的に構成されています。
ほとんどの運用シナリオでは、AKS Automatic から始めて、運用対応の既定値を使用し、運用オーバーヘッドを削減します。
メリット
Vertical Pod Autoscaler には、次の利点があります。
- アプリケーションの "適切なサイズ" に合わせてプロセッサとメモリのリソースを分析および調整します。 VPA では、スケールアップだけでなく、時間の経過に伴うリソースの使用に基づいたスケールダウンも行います。
- スケーリング モードが "自動" または "再作成" に設定されたポッドは、リソース要求を変更する必要がある場合に削除されます。
- リソース ポリシーを指定することで、個々のコンテナーの CPU とメモリの制約を設定できます。
- ポッドのスケジュール設定に適切なリソースがノードにあることを確認します。
- プロセッサまたはメモリ リソースに対して行われた調整の構成可能なログを提供します。
- クラスター リソースの使用率を向上させ、他のポッドのために CPU とメモリを解放します。
制限と考慮事項
Vertical Pod Autoscaler を使用する場合は、次の制限事項と考慮事項について検討してください。
- VPA では、
VerticalPodAutoscalerオブジェクトに関連付けられているクラスターあたり最大 1,000 ポッドの最適なサポートが保証されます。 追跡対象ポッドの数が増えると、特にレコメンダーの場合、スケーラビリティに影響を与える可能性があるすべての VPA コンポーネントでメモリ消費量が増加します。 - VPA では、クラスターで使用可能なリソースよりも多くのリソースが推奨される場合があります。これにより、リソース不足が原因で、ポッドをノードに割り当てて実行することができなくなります。 この制限を克服するには、LimitRange を名前空間ごとに利用可能な最大リソースに設定します。これにより、ポッドは指定よりも多くのリソースを要求しなくなります。
VerticalPodAutoscalerオブジェクト内のポッドごとに許容される最大リソースの推奨値を設定することもできます。 VPA は、ノード リソースが不足する問題を完全には解決できません。 この制限範囲は固定ですが、ノード リソースの使用量は動的に変化します。 - 同じ CPU とメモリ使用量のメトリックに基づいてスケーリングを行う Horizontal Pod Autoscaler (HPA) を VPA と併用することはお勧めしません。
- VPA レコメンダーは、最大 "8 日間" の履歴データのみを保存します。
- ワークロードの実際のメモリ使用量の可視性が制限されているため、VPA は JVM ベースのワークロードをサポートしていません。
- VPA では、ユーザー独自の VPA の実装を並行して実行することはできません。 追加のレコメンダーまたはカスタマイズされたレコメンダーの使用はサポートされています。
- AKS Windows コンテナーはサポートされていません。
VPA の概要
VPA オブジェクトは、次の 3 つのコンポーネントで構成されます。
- レコメンダー: レコメンダーは、メトリック履歴、メモリ不足 (OOM) イベント、VPA デプロイ仕様など、現在および過去のリソース消費量を監視し、収集した情報を使用して、コンテナーの CPU およびメモリの要求/制限に推奨される値を提供します。
- アップデーター: アップデーターはマネージド ポッドを監視して、それらのリソース要求が正しく設定されていることを確認します。 正しく設定されていない場合、それらのポッドを削除して、コントローラーが更新された要求に基づいてポッドを再作成できるようにします。
- VPA アドミッション コントローラー: VPA アドミッション コントローラーは、アップデーターのアクティビティに基づいてコントローラーによって作成または再作成された新しいポッドに対して、適切なリソース要求を設定します。
VPA アドミッション コントローラー
VPA アドミッション コントローラーは、自身を Mutating Admission Webhook として登録するバイナリです。 新しいポッドが作成されると、VPA アドミッション コントローラーは、API サーバーから要求を取得し、一致する VPA 構成があるかどうかを評価するか、対応する VPA 構成を見つけて、現在の推奨事項を使用してポッドにリソース要求を設定します。
スタンドアロン ジョブ overlay-vpa-cert-webhook-check が VPA アドミッション コントローラーの外部で実行されます。
overlay-vpa-cert-webhook-check ジョブは、証明書を作成および更新し、VPA アドミッション コントローラーを MutatingWebhookConfiguration として登録します。
VPA オブジェクトの動作モード
リソース要件を自動計算させるコントローラーごとに、Vertical Pod Autoscaler リソース (最も一般的には "デプロイ") が挿入されます。
VPA には 4 つの動作モードがあります。
-
Recreate: VPA はポッドの作成中にリソース要求を割り当てます。また、要求されたリソースが新しい推奨事項と大幅に異なる場合は、既存のポッドを削除することでポッドを更新します (PodDisruptionBudget が定義されている場合は、それが考慮されます)。 このモードは、リソース要求が変更されるたびに必ずポッドを再起動する必要がある場合にのみ使用してください。 それ以外の場合は、可能な場合は再起動不要の更新プログラムを利用するInPlaceOrRecreateモードを使用することをお勧めします。 -
InPlaceOrRecreate: InPlaceOrRecreate モードでは、VPA はポッドリソース要求と制限を更新しようとしますが、可能な場合はポッドを再起動しません。 ただし、特定のリソース変更に対してインプレース更新を実行できない場合、VPA はポッドの削除 (再作成モードと同様) にフォールバックし、ワークロード コントローラーが更新されたリソースで代替ポッドを作成できるようにします。 このモードは、AKS 1.34 以降で使用できます。-
InPlaceOrRecreateモードを試すには、手順に従います。 - このモードでは、アップデーターは [コンテナリ ソースのサイズをインプレースで変更] 機能 を使用して、レコメンデーションをインプレースで適用します。
- 詳細については、 In-Place 更新プログラムのアップストリーム ドキュメントを参照してください。
-
-
Initial: VPA はポッドの作成中にのみリソース要求を割り当てます。 既存のポッドは更新しません。 このモードは、実行中のポッドに影響を与えずに VPA の動作をテストし、理解するのに役立ちます。 -
Off: VPA はポッドのリソース要件を自動的に変更しません。 推奨事項は計算され、VPA オブジェクトで調べることができます。
Warnung
VPA バージョン 1.4.0 (AKS 1.34 以降) 以降、 Auto 更新モードは非推奨です。 自動モードは現在、 Recreate モードのエイリアスであり、同じように動作します。 自動更新戦略の将来の拡張を可能にするために導入されました。
アプリケーション開発のデプロイ パターン
VPA に慣れていない場合は、アプリケーションの開発中に次のデプロイ パターンを使用して、各アプリケーションの固有のリソース使用率特性を特定し、VPA をテストして正常に機能していることを確認し、他の Kubernetes コンポーネントと共にテストしてクラスターのリソース使用率を最適化します。
- 実稼働クラスターで
UpdateMode = "Off"を設定し、推奨モードで VPA を実行することで、VPA をテストし、VPA の扱い方に慣れることができます。UpdateMode = "Off"により、停止を引き起こす可能性のある構成の誤りが発生するのを防ぐことができます。 - 最初に、特定の期間にわたって実際のリソース使用率テレメトリを収集することで、可観測性を確立します。 このテレメトリは、コンテナーとポッドで実行されているワークロードの影響を受けるコンテナーおよびポッド リソースの動作と問題の兆候を理解するのに役立ちます。
- 監視データに精通して、パフォーマンスの特性を理解します。 この分析情報に基づいて、必要な要求/制限を適宜設定し、次のデプロイまたはアップグレードでそれを適用します。
- 要件に応じて、
updateMode値をRecreate、InPlaceOrRecreate、またはInitialに設定します。
AKS Automatic では、VPA は構成済みの機能として既に使用できるため、ポリシーとモードのチューニングに重点を置きます。 AKS Standard では、ロールアウト パターンを適用する前に VPA のセットアップを完了します。