このページでは、Google Kubernetes Engine(GKE)における垂直 Pod 自動スケーリングの概要と、VerticalPodAutoscaler
カスタム リソースと関連タイプの参考資料について説明します。
垂直 Pod 自動スケーリングは、時間の経過に伴うリソース使用量に関する推奨事項を提示します。リソース使用量が急増する場合は、HorizontalPodAutoscaler を使用してください。
垂直 Pod 自動スケーリングの使用方法については、コンテナ リソースのリクエストと制限のスケールをご覧ください。
自動スケーリングのベスト プラクティスについては、コストが最適化された Kubernetes アプリケーションを GKE で実行するためのベスト プラクティスをご覧ください。
垂直 Pod 自動スケーリングの仕組み
垂直 Pod 自動スケーリングを使用すると、Pod に必要な CPU リソースとメモリリソースを分析して設定できます。Pod 内のコンテナに最新の CPU のリクエストと制限やメモリのリクエストと制限を設定する代わりに、垂直 Pod 自動スケーリングを構成して CPU とメモリのリクエストおよび制限の推奨値を指定します。これらの推奨値は、Pod を手動で更新するときに使用できます。または、値を自動的に更新するように垂直 Pod 自動スケーリングを構成することもできます。
垂直 Pod 自動スケーリングは、Autopilot クラスタではデフォルトで有効になっています。
自動モードでの垂直 Pod 自動スケーリング
Kubernetes の制限により、実行中のポッドのリソース リクエストを変更するには、そのポッドを再作成しなければなりません。updateMode
が Auto
である VerticalPodAutoscaler
オブジェクトを作成した場合、Pod のリソース リクエストを変更する必要が生じると VerticalPodAutoscaler
は Pod を強制排除します。
再起動する Pod の数を制限するには、Pod 停止予算を使用します。 クラスタが新しいサイズのワークロードを確実に処理できるようにするには、クラスタ オートスケーラーとノード自動プロビジョニングを使用します。
垂直 Pod 自動スケーリングは、更新の前にクラスタ オートスケーラーに通知し、サイズ変更されたワークロードに必要なリソースを、ワークロードの再作成の前に提供し、中断時間を最小限に抑えます。
利点
垂直 Pod 自動スケーリングは、次のような利点を提供します。
- ワークロードに適切なリソースのリクエストと制限を設定することで、安定性とコスト効率が向上します。Pod のリソースサイズがワークロードに必要なサイズよりも小さい場合、アプリケーションが抑制されたり、メモリ不足エラーのために失敗したりする可能性があります。リソースはサイズが大きすぎると無駄に消費され、結果として請求額も大きくなります。
- Pod が必要な分のリソースのみを使用するため、クラスタノードを効率的に利用できます。
- Pod は、適切な量のリソースが利用可能なノードにスケジュールされます。
- CPU リクエストやメモリ リクエストの適切な値を求めるために、時間のかかるベンチマーク タスクを実施する必要がありません。
- ユーザー側のアクションがなくても、オートスケーラーによって時間の経過とともに CPU リクエストとメモリ リクエストが調整可能なので、人手によるメンテナンス時間を節約しました。
GKE の垂直 Pod 自動スケーリングには、Kubernetes オープンソース オートスケーラーに比べて次のような利点があります。
- 推奨サイズを決定する際は、ノードサイズとリソースの割り当ての最大量を考慮する必要があります。
- クラスタの容量を調整するようにクラスタ オートスケーラーに通知します。
- 過去のデータを使用して、垂直 Pod オートスケーラーを有効にする前に収集された指標を提供します。
- ワーカーノードにデプロイする代わりに、垂直 Pod オートスケーラー Pod をコントロール プレーン プロセスとして実行します。
制限事項
- 水平 Pod 自動スケーリングと垂直 Pod 自動スケーリングを併用する場合、多次元 Pod 自動スケーリングを使用します。また、カスタム指標と外部指標でも、水平 Pod 自動スケーリングと垂直 Pod 自動スケーリングを併用できます。
- ワークロードの実際のメモリ使用量の可視性が制限されているので、JVM ベースのワークロードには垂直 Pod 自動スケーリングを使用できません。
- 垂直 Pod 自動スケーリングのデフォルト設定では、Deployment が Pod を更新されたリソース値に置き換えるために、最小レプリカ数は 2 に設定されています。GKE バージョン 1.22 以降では、PodUpdatePolicy フィールドに
minReplicas
の値を指定することで、この設定をオーバーライドできます。
おすすめの方法
- クラスタの更新の中断を回避するには、クラスタあたりの
VerticalPodAutoscaler
オブジェクト数を 1,000 未満の状態に保持することをおすすめします。 - 垂直 Pod 自動スケーリングは、長時間実行される同種ワークロードで最適に機能します。
API リファレンス
これは v1
API リファレンスです。このバージョンの API を使用することを強くおすすめします。
VerticalPodAutoscaler v1 autoscaling.k8s.io
フィールド | |
---|---|
|
API グループ、バージョン、種類。 |
metadata |
標準のオブジェクト メタデータ。 |
spec |
|
status |
直近に観測された |
VerticalPodAutoscalerSpec v1 autoscaling.k8s.io
フィールド | |
---|---|
targetRef |
Deployment や StatefulSet など、オートスケーラーで制御する Pod のセットを管理するコントローラへのリファレンス。スケール サブリソースを含む任意のコントローラで |
updatePolicy |
Pod の起動時に推奨アップデートを適用するかどうか、また Pod のライフサイクル期間中に推奨アップデートを適用するかどうかを指定します。 |
resourcePolicy |
個々のコンテナに対する CPU リクエストおよびメモリ リクエストの調整方法に関するポリシーを指定します。リソース ポリシーを使用して、個々のコンテナの推奨事項に制約を設定できます。指定されていない場合、オートスケーラーは、追加の制約なしに、Pod 内のすべてのコンテナの推奨リソースを計算します。 |
recommenders |
この VPA オブジェクトに関する推奨事項を生成する Recommender。GKE によって指定されるデフォルトの Recommender を使用するには、空のままにします。それ以外の場合、リストには、ユーザーが指定する代替 Recommender のエントリを 1 つのみ配置できます。GKE 1.22 以降でサポートされます。 |
VerticalPodAutoscalerList v1 autoscaling.k8s.io
フィールド | |
---|---|
|
API グループ、バージョン、種類。 |
metadata |
標準のオブジェクト メタデータ。 |
items |
|
PodUpdatePolicy v1 autoscaling.k8s.io
フィールド | |
---|---|
updateMode |
ポッドの起動時に推奨アップデートを適用するかどうか、またポッドのライフサイクル期間中に推奨アップデートを適用するかどうかを指定します。有効な値は、「Off」、「Initial」、「Recreate」、「Auto」です。 値を指定しない場合のデフォルトは「Auto」です。 |
minReplicas |
アップデータが Pod のエビクションを試みるために存続する必要があるレプリカの最小数(Pod 停止予算などの他のチェックを保留にします)。正の値のみを使用できます。デフォルトはグローバル「--min-replicas」フラグです。これは GKE で 2 に設定されています。GKE 1.22 以降でサポートされます。 |
PodResourcePolicy v1 autoscaling.k8s.io
フィールド | |
---|---|
containerPolicies |
個々のコンテナに対するリソース ポリシーの配列。名前付きのコンテナごとに最大で 1 つのエントリを作成できます。また、必要に応じて、個別のポリシーを持たないすべてのコンテナを処理する「containerName = '*'」のワイルドカード エントリを 1 つ指定できます。 |
ContainerResourcePolicy v1 autoscaling.k8s.io
フィールド | |
---|---|
containerName |
ポリシーが適用されるコンテナの名前。指定しない場合、そのポリシーはデフォルト ポリシーとして機能します。 |
mode |
コンテナの起動時に推奨アップデートを適用するかどうか、またコンテナのライフサイクル期間中に推奨アップデートを適用するかどうかを指定します。有効な値は、「Off」と「Auto」です。 値を指定しない場合のデフォルトは「Auto」です。 |
minAllowed |
そのコンテナで許容される CPU リクエストとメモリ リクエストの最小値を指定します。デフォルトでは、適用される最小値はありません。 |
maxAllowed |
そのコンテナで許容される CPU リクエストとメモリ リクエストの最大値を指定します。 デフォルトでは、適用される最大値はありません。 |
ControlledResources |
|
VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io
フィールド | |
---|---|
name |
このオブジェクトに対する推奨事項の生成を担当する Recommender の名前。 |
VerticalPodAutoscalerStatus v1 autoscaling.k8s.io
フィールド | |
---|---|
recommendation |
CPU リクエストおよびメモリ リクエストの最新の推奨値。 |
conditions |
|
RecommendedPodResources v1 autoscaling.k8s.io
フィールド | |
---|---|
containerRecommendation |
個々のコンテナに関するリソース推奨値からなる配列。 |
RecommendedContainerResources v1 autoscaling.k8s.io
フィールド | |
---|---|
containerName |
推奨値が適用されるコンテナの名前。 |
target |
そのコンテナに対する CPU リクエストとメモリ リクエストの推奨値。 |
lowerBound |
そのコンテナに対する CPU リクエストとメモリ リクエストの推奨値の下限。この値は、アプリケーションが安定して動作するのに十分であるとは限りません。CPU リクエストとメモリ リクエストがこの値に満たない場合、パフォーマンスや可用性に重大な影響を及ぼす可能性があります。 |
upperBound |
そのコンテナに対する CPU リクエストとメモリ リクエストの推奨値の上限。CPU リクエストとメモリ リクエストをこの値より大きくしても、無駄になる可能性があります。 |
uncappedTarget |
オートスケーラーによって計算された最新のリソース推奨値。これは実際のリソース使用量に基づいており、ContainerResourcePolicy は考慮されません。実際のリソース使用量に基づく値が ContainerResourcePolicy に違反する場合は、推奨範囲から外れる可能性があります。このフィールドは、実際のリソース割り当てには影響しません。ステータスの表示にのみ使用されます。 |
VerticalPodAutoscalerCondition v1 autoscaling.k8s.io
フィールド | |
---|---|
type |
記述する状態のタイプ。有効な値は、「RecommendationProvided」、「LowConfidence」、「NoPodsMatched」、「FetchingHistory」です。 |
status |
状態のステータス。有効な値は、「True」、「False」、「Unknown」です。 |
lastTransitionTime |
状態のステータスが最後に遷移した時刻。 |
reason |
最後のステータス遷移の理由。 |
message |
人間が読める文字列で記述された、最後のステータス遷移についての詳細情報。 |
次のステップ
- コンテナ リソースのリクエストと制限をスケーリングする方法を学習する。
- クラスタ オートスケーラーについて確認する。