すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:CronHPA を使用したスケジュールに基づくスケーリング

最終更新日:Mar 05, 2026

アプリケーションのリソース使用量が予測可能な周期的なパターンに従う場合、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)と連携できます。

YAML 構成のサンプル

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
  namespace: default 
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment-basic  # スケーリング対象のワークロード
  excludeDates:                 # スケーリングをスキップする日付(cron 形式)
  - "* * * 15 11 *"             # 11月15日をスキップ
  - "* * * * * 5"               # 毎週金曜日をスキップ
  jobs:
  - name: "scale-down"
    schedule: "30 */1 * * * *"  # 毎分の 30 秒目にトリガー(例:08:00:30、08:01:30)
    targetSize: 1               # 対象レプリカ数
    runOnce: false              # ジョブを一度だけ実行するかどうか(デフォルト:false)
  - name: "scale-up"
    schedule: "0 */1 * * * *"   # 毎分の 0 秒目にトリガー(例:08:00:00、08:01:00)
    targetSize: 3               # 対象レプリカ数
    runOnce: false             

次の表は、各パラメーターの説明です。

パラメーター

説明

scaleTargetRef

スケーリング対象のオブジェクトです。CronHPA は、Scale サブリソース を実装する任意の Kubernetes リソースをサポートします。

excludeDates

スケーリングジョブをスキップする日付の配列です。最小単位は日単位です。

フォーマット:"* * * * * *" = <秒> <分> <時> <日> <月> <曜日>

たとえば、11月15日のすべてのジョブをスキップするには、次のように指定します。

excludeDates:
  - "* * * 15 11 *"

jobs

スケーリングジョブのリストです。1 つの CronHPA 仕様内に複数のジョブを定義できます。各ジョブは以下のフィールドをサポートします。

  • name:ジョブの一意な名前です。

  • schedule:ジョブの実行タイミングを定義する cron 式です。go-cron ライブラリに基づき、6 フィールド形式を使用します。

    Field name   | Mandatory? | Allowed values  | Allowed special characters
      ----------   | ---------- | --------------  | --------------------------
      Seconds      | Yes        | 0-59            | * / , -
      Minutes      | Yes        | 0-59            | * / , -
      Hours        | Yes        | 0-23            | * / , -
      Day of month | Yes        | 1-31            | * / , - ?
      Month        | Yes        | 1-12 or JAN-DEC | * / , -
      Day of week  | Yes        | 0-6 or SUN-SAT  | * / , - ?
  • targetSize:スケジュールがトリガーされたときに設定される Pod レプリカ数です。

  • runOncetrue に設定すると、ジョブは一度だけ実行されます。初回実行後、ジョブは終了します。デフォルト値は false です。

ステップ 1:CronHPA アドオンのインストール

  1. Container Service 管理コンソール にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。

  3. アプリケーションの管理 タブをクリックし、ack-kubernetes-cronhpa-controller を見つけ、表示される指示に従ってアドオンをインストールします。

ステップ 2:CronHPA ジョブの作成

CronHPA ジョブを作成する前に、CronHPA が実行中であること、および対象のワークロードに HPA オブジェクトが 1 つだけ関連付けられていることを確認してください。以下の例では Deployment を使用していますが、他のワークロードタイプでも手順は同様です。

オプション 1:ワークロード作成時に CronHPA ジョブを作成する

  1. Container Service 管理コンソール にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、ワークロード > デプロイメント をクリックします。

  3. Deployments ページで、イメージから作成 をクリックします。

  4. 作成 ページで、CronHPA 対応の Deployment を作成するための設定を行います。

    詳細な構成手順については、「ステートレスワークロード(Deployment)の作成」をご参照ください。

    • 基本情報:アプリケーション名とレプリカ数を設定します。

    • コンテナ:コンテナイメージおよび CPU とメモリのリソースリクエストを指定します。

    • 詳細設定

      • スケーリング セクションで、CronHPA を有効にします。必要に応じてアドオンをインストールし、スケーリングパラメーターを構成します。

        • ジョブ名:CronHPA ジョブの一意な名前です。

        • 希望レプリカ数:スケジュール時刻にスケーリングする Pod レプリカ数です。

        • スケーリングスケジュール:スケーリングスケジュールを定義する cron 式です。詳細については、kubernetes-cronhpa-controller をご参照ください。

オプション 2:既存のワークロードに対して CronHPA ジョブを作成する

ワークロードページ

  1. Container Service 管理コンソール にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、ワークロード > デプロイメント をクリックします。

  3. 対象のワークロードをクリックし、Pod スケーリング タブをクリックします。CronHPA セクションで、作成 をクリックします。

    create

    パラメーター

    説明

    ジョブ名

    CronHPA ジョブの一意な名前です。

    希望レプリカ数

    スケジュール時刻にスケーリングする Pod レプリカ数です。

    スケーリングスケジュール

    スケーリングスケジュールを定義する cron 式です。詳細については、kubernetes-cronhpa-controller をご参照ください。

ワークロードスケーリングページ

  1. Container Service 管理コンソール にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、ワークロードスケーリング をクリックします。

  3. 右上隅で、Auto Scaling の作成 をクリックします。

  4. HPA と CronHPA タブをクリックし、対象のワークロードを選択します。その後、Auto Scaling ポリシーの構成 セクションで、CronHPA を選択します。

    複数の CronHPA ジョブを追加できます。以下のパラメーターを構成し、OK をクリックします。

    • CronHPA タスク名:CronHPA オブジェクトの名前です。

    • ジョブ名:個別の CronHPA ジョブの名前です。

    • 希望レプリカ数:スケジュール時刻における希望する Pod レプリカ数です。

    • スケーリングスケジュール:スケーリングスケジュールを定義する cron 式です。詳細については、kubernetes-cronhpa-controller をご参照ください。

kubectl

  1. 次のマニフェストを 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         
  2. 次のコマンドを実行して CronHPA を作成します。

    kubectl apply -f cronhpa.yaml

    期待される出力:

    cronhorizontalpodautoscaler.autoscaling.alibabacloud.com/cronhpa-sample created

次のステップ

CronHPA ジョブの確認・追加・変更

CronHPA を作成した後、以下のいずれかの方法でジョブのステータスを確認したり、新しいジョブを追加したり、既存の構成を変更したりできます。

  • ワークロードスケーリング ページから:

    1. クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、ワークロードスケーリング をクリックします。

    2. CronHPA タブをクリックします。操作 列で、対象の CronHPA の 編集 をクリックします。

  • ワークロード ページから(Deployments を例として):

    1. クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、ワークロード > デプロイメント をクリックします。

    2. 対象の 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 の互換性の確保」をご参照ください。