アプリケーションのリソース使用量が予測可能な周期的なパターンに従う場合、Cron Horizontal Pod Autoscaler (CronHPA) を使用して、特定の時刻に Pod をスケーリングできます。このスケジュールは、繰り返し発生するトラフィックのピークや、スケジュールされたバックグラウンドジョブがあるシナリオに最適です。
事前準備
Container Service for Kubernetes (ACK) は、スケジューリング(ワークロード)レイヤーおよびリソース(ノード)レイヤーの両方で複数のスケーリングソリューションを提供しています。作業を進める前に、Auto Scaling をご参照いただき、ユースケースに最適な戦略を決定してください。
CronHPA の仕組み
CronHPA は、kubernetes-cronhpa-controller という時間ベースの Pod スケーリングコントローラによって動作します。crontab に似た構文を使用してリソースを動的に調整できるため、周期的なトラフィック変動があるワークロードに最適です。CronHPA は、Scale サブリソース をサポートする任意の Kubernetes オブジェクト(例:Deployment、StatefulSet)と連携できます。
ステップ 1:CronHPA アドオンのインストール
Container Service 管理コンソール にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。
アプリケーションの管理 タブをクリックし、ack-kubernetes-cronhpa-controller を見つけ、表示される指示に従ってアドオンをインストールします。
ステップ 2:CronHPA ジョブの作成
CronHPA ジョブを作成する前に、CronHPA が実行中であること、および対象のワークロードに HPA オブジェクトが 1 つだけ関連付けられていることを確認してください。以下の例では Deployment を使用していますが、他のワークロードタイプでも手順は同様です。
オプション 1:ワークロード作成時に CronHPA ジョブを作成する
Container Service 管理コンソール にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
Deployments ページで、イメージから作成 をクリックします。
作成 ページで、CronHPA 対応の Deployment を作成するための設定を行います。
詳細な構成手順については、「ステートレスワークロード(Deployment)の作成」をご参照ください。
基本情報:アプリケーション名とレプリカ数を設定します。
コンテナ:コンテナイメージおよび CPU とメモリのリソースリクエストを指定します。
詳細設定:
スケーリング セクションで、CronHPA を有効にします。必要に応じてアドオンをインストールし、スケーリングパラメーターを構成します。
ジョブ名:CronHPA ジョブの一意な名前です。
希望レプリカ数:スケジュール時刻にスケーリングする Pod レプリカ数です。
スケーリングスケジュール:スケーリングスケジュールを定義する cron 式です。詳細については、kubernetes-cronhpa-controller をご参照ください。
オプション 2:既存のワークロードに対して CronHPA ジョブを作成する
ワークロードページ
Container Service 管理コンソール にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
対象のワークロードをクリックし、Pod スケーリング タブをクリックします。CronHPA セクションで、作成 をクリックします。

パラメーター
説明
ジョブ名
CronHPA ジョブの一意な名前です。
希望レプリカ数
スケジュール時刻にスケーリングする Pod レプリカ数です。
スケーリングスケジュール
スケーリングスケジュールを定義する cron 式です。詳細については、kubernetes-cronhpa-controller をご参照ください。
ワークロードスケーリングページ
Container Service 管理コンソール にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、ワークロードスケーリング をクリックします。
右上隅で、Auto Scaling の作成 をクリックします。
HPA と CronHPA タブをクリックし、対象のワークロードを選択します。その後、Auto Scaling ポリシーの構成 セクションで、CronHPA を選択します。
複数の CronHPA ジョブを追加できます。以下のパラメーターを構成し、OK をクリックします。
CronHPA タスク名:CronHPA オブジェクトの名前です。
ジョブ名:個別の CronHPA ジョブの名前です。
希望レプリカ数:スケジュール時刻における希望する Pod レプリカ数です。
スケーリングスケジュール:スケーリングスケジュールを定義する cron 式です。詳細については、kubernetes-cronhpa-controller をご参照ください。
kubectl
次のマニフェストを
cronhpa.yamlという名前のファイルに保存します。apiVersion: autoscaling.alibabacloud.com/v1beta1 kind: CronHorizontalPodAutoscaler metadata: name: cronhpa-sample namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx-deployment-basic excludeDates: - "* * * 15 11 *" - "* * * * * 5" jobs: - name: "scale-down" schedule: "30 */1 * * * *" targetSize: 1 runOnce: false - name: "scale-up" schedule: "0 */1 * * * *" targetSize: 3 runOnce: true次のコマンドを実行して CronHPA を作成します。
kubectl apply -f cronhpa.yaml期待される出力:
cronhorizontalpodautoscaler.autoscaling.alibabacloud.com/cronhpa-sample created
次のステップ
CronHPA ジョブの確認・追加・変更
CronHPA を作成した後、以下のいずれかの方法でジョブのステータスを確認したり、新しいジョブを追加したり、既存の構成を変更したりできます。
ワークロードスケーリング ページから:
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、ワークロードスケーリング をクリックします。
CronHPA タブをクリックします。操作 列で、対象の CronHPA の 編集 をクリックします。
ワークロード ページから(Deployments を例として):
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
対象の Deployment をクリックし、Pod スケーリング タブをクリックします。CronHPA セクションの 操作 列で、ジョブの追加または変更 をクリックします。
CronHPA と HPA の併用
Cron Horizontal Pod Autoscaler (CronHPA) と Horizontal Pod Autoscaler (HPA) は相互に認識しません。アプリケーションに CronHPA と HPA の両方が構成されている場合、CronHPA と HPA はそれぞれ独立してアプリケーションをスケーリングします。この場合、後から実行されたスケーリングアクティビティが、先に実行されたものを上書きします。この問題を解決するために、Container Service for Kubernetes (ACK) では、CronHPA と HPA が競合せずに連携できるソリューションを提供しています。ACK が CronHPA と HPA の両方がデプロイされていることを検出した場合、ACK は HPA を CronHPA のスケーリング対象として設定します。これにより、CronHPA はスケジュール時刻に HPA をトリガーし、HPA がスケーリングしているオブジェクト(例:Deployment)をスケーリングします。
詳細については、「CronHPA と HPA の互換性の確保」をご参照ください。