アプリケーションのリソース使用率が定期的に変化し、Crontab のようなスケジュールに基づいて Pod をスケーリングする必要がある場合は、Cron Horizontal Pod Autoscaler (CronHPA) を使用してスケジュールされたスケーリングを実現できます。CronHPA は、ビジネストラフィックに大きなピーク期間があるシナリオや、スケジュールされたタスクに適しています。
お読みになる前のヒント
ACK クラスターは、さまざまな ワークロードスケーリング (スケジューリングレイヤーの弾力性) と ノードスケーリング (リソースレイヤーの弾力性) のソリューションを提供します。このトピックをご利用になる前に、「Auto Scaling」をお読みいただき、さまざまなソリューションの適用シナリオと制限についてご理解いただくことをお勧めします。
CronHPA テンプレートとパラメーター
CronHPA は kubernetes-cronhpa-controller に基づいて実装されています。kubernetes-cronhpa-controller は、Crontab のような構文を使用してスケジュールされたスケーリングポリシーを設定する、時間ベースの Pod 水平スケーリングコントローラーであり、周期的なトラフィックパターンを持つシナリオでの動的なリソース調整を可能にします。CronHPA は、Deployment や StatefulSet など、スケーリングサブリソース (Scale Subresource) をサポートする任意の Kubernetes オブジェクトに適用できます。
ステップ 1: CronHPA コンポーネントをインストールする
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理したいクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。
[アプリケーションの管理] タブをクリックし、[ack-kubernetes-cronhpa-controller] を見つけて、ページのプロンプトに従ってコンポーネントのインストールを完了します。
ステップ 2: CronHPA ジョブを作成する
アプリケーションの CronHPA ジョブを作成する前に、クラスター内の CronHPA コンポーネントが正常に実行されていること、および現在のアプリケーションに対して HPA タスクオブジェクトが 1 つしかないことを確認してください。次の例では、ステートレスアプリケーションに対して CronHPA ジョブを有効にする方法を示します。他の種類のワークロードの手順も同様です。
アプリケーション作成時に CronHPA ジョブを作成する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理したいクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[デプロイメント] ページで、[イメージから作成] をクリックします。
[作成] ページで、ページのプロンプトに従って、基本的なアプリケーション情報の設定、コンテナーの設定、サービスの設定、およびスケジュールされたスケーリングの設定を完了し、CronHPA をサポートする Deployment を作成します。
ステップとパラメーターの詳細については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。次のリストに、主要なパラメーターを説明します。
基本情報: アプリケーションの名前やレプリカ数などの基本情報を設定します。
コンテナー: コンテナーが必要とするイメージ、CPU、およびメモリリソースを設定します。
詳細設定:
[アクセス制御] セクションで、[作成] に対応する [サービス] をクリックしてサービスを設定します。
[スケーリング] セクションで、[有効化] の [CronHPA] をチェックし、ページのプロンプトに従ってコンポーネントをインストールし (すでにインストールされている場合は無視)、スケジュールされたスケーリングの条件とパラメーターを設定します。
ジョブ名: CronHPA ジョブの名前。
希望するレプリカ数: スケジュールされた時刻に達すると、アプリケーションのレプリカ数が自動的にこの値にスケーリングされます。
スケーリングスケジュール: スケジューリング期間を設定します。詳細については、「Kubernetes CronHPA Controller」をご参照ください。
既存のアプリケーションに CronHPA ジョブを作成する
ワークロードページで作成
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理したいクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
ターゲットのワークロードをクリックし、[Pod スケーリング] タブをクリックします。[CronHPA] セクションで、[作成] をクリックして CronHPA を設定します。

パラメーター
説明
ジョブ名
CronHPA ジョブの名前。
希望するレプリカ数
スケジュールされた時刻に達すると、アプリケーションのレプリカ数が自動的にこの値にスケーリングされます。
スケーリングスケジュール
設定されたスケジューリング期間。CronHPA ジョブのスケジューリング期間の設定に関する詳細については、「AliyunContainerService/kubernetes-cronhpa-controller」をご参照ください。
ワークロードスケーリングページで作成
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、[ワークロードスケーリング] をクリックします。
ページの右上隅にある [Auto Scaling の作成] をクリックします。
[HPA と CronHPA] タブをクリックし、[ターゲットワークロードの選択] をクリックします。[スケーリングポリシーの設定] セクションで、[CronHPA] をチェックします。
複数の CronHPA ジョブを追加できます。ページのプロンプトに従って CronHPA ポリシー情報を設定し、[OK] をクリックします。
CronHPA 名: CronHPA の名前を入力します。
ジョブ名: CronHPA ジョブの名前を入力します。
希望するレプリカ数: スケジュールされた時刻に達したときのターゲットレプリカ数を設定します。
スケーリングスケジュール: スケジューリング期間を設定します。詳細については、「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 ジョブのステータスとリストを表示できます。 次のエントリポイントから CronHPA ジョブを追加したり、既存の CronHPA 構成を変更したりできます。
Workload Scaling エントリポイント
クラスター ページで、対象のクラスターを見つけてその名前をクリックします。 左側のナビゲーションウィンドウで、[Workload Scaling] をクリックします。
[CronHPA] タブをクリックし、対象の CronHPA ジョブの [アクション] 列にある [編集] をクリックします。
Workloads エントリポイント (ステートレスアプリケーションを例として使用します。他のタイプのワークロードの手順も同様です)
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[デプロイメント] ページで、対象の Deployment の [アクション] 列にある [詳細] をクリックします。 次に、[Pod スケーリング] タブをクリックします。 CronHPA セクションで、[アクション] 列にある [ジョブの追加または編集] をクリックします。
CronHPA と HPA 間の連携の実装
Cron Horizontal Pod Autoscaler (HPA) と 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 間の連携の実装」をご参照ください。