ワークロードの自動スケーリング
Kubernetesでは、現在のリソース要求に応じてワークロードをスケールできます。 これによりクラスターはリソース要求の変化に対してより弾力的かつ効率的に対応できるようになります。
ワークロードをスケールするとき、ワークロードによって管理されるレプリカ数を増減したり、レプリカで使用可能なリソースをインプレースで調整できます。
ひとつ目のアプローチは 水平スケーリング と呼ばれ、一方でふたつ目のアプローチは 垂直スケーリング と呼ばれます。
ユースケースに応じて、ワークロードをスケールするには手動と自動の方法があります。
ワークロードを手動でスケーリングする
Kubernetesはワークロードの 手動スケーリング をサポートします。
水平スケーリングはkubectl
CLIを使用して行うことができます。
垂直スケーリングの場合、ワークロードのリソース定義を パッチ適用 する必要があります。
両方の戦略の例については以下をご覧ください。
- 水平スケーリング: アプリケーションの複数インスタンスを実行
- 垂直スケーリング: コンテナに割り当てるCPUとメモリ容量を変更
ワークロードを自動でスケーリングする
Kubernetesはワークロードの 自動スケーリング もサポートしており、これがこのページの焦点です。
Kubernetesにおける オートスケーリング の概念は、一連のPodを管理するオブジェクト(例えばDeployment)を自動的に更新する機能を指します。
ワークロードを水平方向にスケーリングする
Kubernetesにおいて、 HorizontalPodAutoscaler (HPA)を使用してワークロードを水平方向に自動的にスケールできます。
これはKubernetes APIリソースおよびコントローラーとして実装されており、CPUやメモリ使用率のような観測されたリソース使用率と一致するようにワークロードのレプリカ数を定期的に調整します。
Deployment用のHorizontalPodAutoscalerを構成するウォークスルーチュートリアルがあります。
ワークロードを垂直方向にスケーリングする
Kubernetes v1.25 [stable]
VerticalPodAutoscaler (VPA)を使用してワークロードを垂直方向に自動的にスケールできます。 HPAと異なり、VPAはデフォルトでKubernetesに付属していませんが、GitHubで見つかる別のプロジェクトです。
インストールすることにより、管理されたレプリカのリソースを どのように いつ スケールするのかを定義するワークロードのCustomResourceDefinitions(CRDs)を作成できるようになります。
備考:
VPAが機能するにはクラスターにMetrics Serverがインストールされている必要があります。現時点では、VPAは4つの異なるモードで動作できます:
モード | 説明 |
---|---|
Auto |
現在はRecreate です。これは将来インプレースアップデートに変更される可能性があります。 |
Recreate |
VPAはPod作成時にリソースリクエストを割り当てるだけでなく、要求されたリソースが新しい推奨事項と大きく異なる場合にそれらを削除することによって既存のPod上でリソースリクエストを更新します。 |
Initial |
VPAはPod作成時にリソースリクエストを割り当て、後から変更することはありません。 |
Off |
VPAはPodのリソース要件を自動的に変更しません。推奨事項は計算され、VPAオブジェクトで検査できます。 |
インプレースPodの水平スケーリング
Kubernetes v1.33 [beta]
(enabled by default: true)
Kubernetes 1.33の時点では、VPAはインプレースでのPodのリサイズをサポートしていませんが、この統合は現在作業中です。 インプレースでPodの手動リサイズをするには、コンテナリソースをインプレースでリサイズするを参照してください。
クラスターサイズに基づく自動スケーリング
クラスターのサイズに基づいてスケールする必要があるワークロード(例えばcluster-dns
や他のシステムコンポーネント)の場合は、Cluster Proportional Autoscalerを使用できます。
VPAと同じように、これはKubernetesのコア部分ではありませんが、独自のGitHubプロジェクトとしてホストされています。
Cluster Proportional Autoscalerはスケジュール可能なノードとコアの数を監視し、それに応じてターゲットワークロードのレプリカ数をスケールします。
レプリカ数を同じままにする必要がある場合、Cluster Proportional Vertical Autoscalerを使用してクラスターサイズに応じてワークロードを垂直方向にスケールできます。 このプロジェクトは現在ベータ版でありGitHubで見つけることができます。
Cluster Proportional Autoscalerがワークロードのレプリカ数をスケールする一方で、Cluster Proportional Vertical Autoscalerはクラスター内のノードおよび/またはコアの数に基づいてワークロード(例えばDeploymentやDaemonSet)のリソース要求を調整します。
イベント駆動型自動スケーリング
例えばKubernetes Event Driven Autoscaler (KEDA)を使用して、イベントに基づいてワークロードをスケールすることもできます。
KEDAは例えばキューのメッセージ数などの処理するべきイベント数に基づいてワークロードをスケールするCNCF Graduatedプロジェクトです。 様々なイベントソースに合わせて選択できる幅広いアダプターが存在します。
スケジュールに基づく自動スケーリング
ワークロードををスケールするためのもう一つの戦略は、例えばオフピークの時間帯にリソース消費を削減するために、スケーリング操作をスケジュールすることです。
イベント駆動型オートスケーリングと同様に、そのような動作はKEDAをCron
スケーラーと組み合わせて使用することで実現できます。
Cron
スケーラーによりワークロードをスケールインまたはスケールアウトするためのスケジュール(およびタイムゾーン)を定義できます。
クラスターのインフラストラクチャのスケーリング
ワークロードのスケーリングだけではニーズを満たすのに十分でない場合は、クラスターのインフラストラクチャ自体をスケールすることもできます。
クラスターのインフラストラクチャのスケーリングは通常ノードの追加または削除を意味します。 詳しくはNodeの自動スケーリングを読んでください。
次の項目
- 水平スケーリングについて詳しく学ぶ
- コンテナリソースのインプレースサイズ変更
- クラスター内のDNSサービスを自動スケールする
- Nodeの自動スケーリングについて学ぶ