Kubernetesでは、現在のリソース要求に応じてワークロードをスケールできます。 これによりクラスターはリソース要求の変化に対してより弾力的かつ効率的に対応できるようになります。
ワークロードをスケールするとき、ワークロードによって管理されるレプリカ数を増減したり、レプリカで使用可能なリソースをインプレースで調整できます。
ひとつ目のアプローチは 水平スケーリング と呼ばれ、一方でふたつ目のアプローチは 垂直スケーリング と呼ばれます。
ユースケースに応じて、ワークロードをスケールするには手動と自動の方法があります。
ワークロードを手動でスケーリングする
Kubernetesはワークロードの 手動スケーリング をサポートします。
水平スケーリングは kubectl
CLIを使用して行うことができます。
垂直スケーリングの場合、ワークロードのリソース定義を パッチ適用 する必要があります。
両方の戦略の例については以下をご覧ください。
- 水平スケーリング: Running multiple instances of your app
- 垂直スケーリング: Resizing CPU and memory resources assigned to containers
ワークロードを自動でスケーリングする
Kubernetesはワークロードの 自動スケーリング もサポートしており、これがこのページの焦点です。
Kubernetesにおける オートスケーリング の概念は一連のPodを管理するオブジェクト(例えばDeployment)を自動的に更新する機能を指します。
ワークロードを水平方向にスケーリングする
Kubernetesにおいて、 HorizontalPodAutoscaler (HPA)を使用してワークロードを水平方向に自動的にスケールできます。
これはKubernetes APIリソースおよびコントローラーとして実装されておりCPUやメモリ使用率のような観測されたリソース使用率と一致するようにワークロードのレプリカ数を定期的に調整します。
Deployment用のHorizontalPodAutoscalerを構成するウォークスルーチュートリアルがあります。
ワークロードを垂直方向にスケーリングする
Kubernetes v1.25 [stable]
VerticalPodAutoscaler (VPA)を使用してワークロードを垂直方向に自動的にスケールできます。 HPAと異なり、VPAはデフォルトでKubernetesに付属していませんが、GitHubで見つかる別のプロジェクトです。
インストールすることにより、管理されたレプリカのリソースを どのように いつ スケールするのかを定義するワークロードのCustomResourceDefinitions(CRDs)を作成できるようになります。
備考:
HPAが機能するにはクラスターにMetrics Serverがインストールされている必要があります。現時点では、VPAは4つの異なるモードで動作できます:
モード | 説明 |
---|---|
Auto | 現在、Recreate は将来インプレースアップデートに変更される可能性があります |
Recreate | VPAはPod作成時にリソースリクエストを割り当てるだけでなく、要求されたリソースが新しい推奨事項と大きく異なる場合にそれらを削除することによって既存のPod上でリソースリクエストを更新します |
Initial | VPAはPod作成時にリソースリクエストを割り当て、後から変更することはありません |
Off | VPAはPodのリソース要件を自動的に変更しません。推奨事項は計算され、VPAオブジェクトで検査できます |
インプレースリサイズの要件
Kubernetes v1.27 [alpha]
Podまたはそのコンテナを再起動せずにインプレースでワークロードをリサイズするには、Kubernetesバージョン1.27以降が必要です。
さらに、InPlaceVerticalScaling
フィーチャーゲートを有効にする必要があります。
InPlacePodVerticalScaling
: 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
スケーラーによりワークロードをスケールインまたはスケールアウトするためのスケジュール(およびタイムゾーン)を定義できます。
クラスターのインフラストラクチャーのスケーリング
ワークロードのスケーリングだけではニーズを満たすのに十分でない場合は、クラスターのインフラストラクチャー自体をスケールすることもできます。
クラスターのインフラストラクチャーのスケーリングは通常ノードの追加または削除を意味します。 詳しくはクラスターの自動スケーリングを読んでください。