自動スケーリングの概要

Kf は Kubernetes HorizontalPodAutoscaler(HPA)を利用して、アプリ内の Pod の数を自動スケーリングします。アプリで自動スケーリングを有効にすると、HPA オブジェクトが作成され、アプリのオブジェクトにバインドされます。その後、対象のスケールが動的に計算され、アプリに設定されます。

Kf スケーリングの仕組み

Kf App にデプロイされる Pod の数は、基になる Deployment オブジェクトの replica フィールドによって制御されます。Deployment レプリカのターゲット数は、アプリの replicas フィールドを使用して設定されます。

スケーリングは、kf scale コマンドを使用して手動で行うことができます。このコマンドは、自動スケーリングを有効にすると、ターゲットの競合を避けるため無効になります。

Kubernetes HorizontalPodAutoscaler の仕組み

HorizontalPodAutoscaler(HPA)は、Kubernetes API リソース(HPA オブジェクト)およびコントロール ループ(HPA コントローラ)として実装されます。これらのコントロール ループは、現在のリソース使用率に基づいて、必要なレプリカの数を定期的に計算します。HPA コントローラは、その数を Scale サブリソースを実装するターゲット オブジェクトに渡します。実際のスケーリングは、基になるオブジェクトとそのコントローラに委任されます。詳細については、Kubernetes のドキュメントをご覧ください。

Autoscaler がスケーリングのタイミングを判断する方法

HPA コントローラは、定期的に HorizontalPodAutoscaler の定義で指定された指標に対してリソース使用率を照会します。コントローラは、各 Pod のリソース指標 API から指標を取得します。次に、コントローラで使用率の値を同等のリソース リクエストの割合として計算します。その後、必要なレプリカの数が、現在の割合と必要な割合の比率に基づいて計算されます。自動スケーリング アルゴリズムの詳細については、Kubernetes のドキュメントをご覧ください。

指標

Kf では、ターゲット指標として CPU のみをサポートする HPA v1 が使用されます。

Kubernetes Horizontal Autoscaler と Kf の連携の仕組み

Kf App に対して自動スケーリングが有効になっていると、Kf コントローラは、アプリで指定されたスケーリング制限とルールに基づいて HPA オブジェクトを作成します。その後、HPA コントローラは、HPA オブジェクトから仕様を取得し、それに応じてアプリをスケーリングします。

自動スケーリングが無効になっている場合や対応するアプリが削除された場合は、HPA オブジェクトは削除されます。