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

Container Service for Kubernetes:CronHPA を使用したスケジュール設定による Pod のスケーリング

最終更新日:Aug 26, 2026

アプリケーションのリソース使用量が予測可能で反復的なパターンに従う場合、Cron Horizontal Pod Autoscaler (CronHPA) を使用して、スケジュールに基づいて Pod をスケーリングできます。CronHPA は、予測可能なトラフィックのピークがあるシナリオや、スケジュールされたタスクを実行するのに最適です。

事前準備

Container Service for Kubernetes (ACK) は、ワークロードのスケーリング (スケジューリングレイヤー) とノードのスケーリング (リソースレイヤー) のための複数のソリューションを提供します。開始する前に、「オートスケーリング」を読み、各ソリューションのユースケースと制限事項を理解してください。

CronHPA のテンプレートとパラメーター

CronHPA は、時間ベースの Pod オートスケーラーである kubernetes-cronhpa-controller によって実装されます。cron のような構文を使用してスケジュールされたスケーリングポリシーを構成し、定期的なトラフィックの変動があるワークロードのリソースを動的に調整できます。CronHPA は、Deployment や StatefulSet など、scale サブリソースをサポートする任意の Kubernetes オブジェクトに適用できます。

サンプル 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              # ジョブを 1 回だけ実行するかどうかを指定します。デフォルト:false。
  - name: "scale-up"
    schedule: "0 */1 * * * *"  # 毎分 0 秒にトリガーされます (例:08:00:00、08:01:00)。
    targetSize: 3              # ターゲットレプリカ数。
    runOnce: false             

次の表は、CronHPA 設定のパラメーターについて説明しています。

パラメーター

説明

scaleTargetRef

スケーリングするターゲットオブジェクトを指定します。CronHPA は、scale サブリソースをサポートする任意の Kubernetes リソースをスケーリングできます。

excludeDates

excludeDates で指定された日付ではタスクをスキップする日付の配列です。最小単位は日です。

"* * * * * *" は、「<秒> <分> <時> <日> <月> <曜日>」を表します。

11 月 15 日にタスクを実行したくない場合は、次の例に示すように excludeDates を指定できます。

excludeDates:
  - "* * * 15 11 *"

jobs

単一の spec で定義できる CronHPA ジョブのリストです。各ジョブは次のフィールドで構成できます:

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

  • schedule:ジョブがいつ実行されるかを定義する cron 式です。go-cron ライブラリに基づいており、構文は標準の crontab に似ていますが、より柔軟な式をサポートしています。ジョブを作成するときは、以下に説明する形式に厳密に従ってください。

    cron 式の形式は次のとおりです:

    フィールド名 | 必須? | 許容値        | 許容される特殊文字
      ---------- | ------ | -------------- | --------------------------
      秒         | はい   | 0-59           | * / , -
      分         | はい   | 0-59           | * / , -
      時         | はい   | 0-23           | * / , -
      日         | はい   | 1-31           | * / , - ?
      月         | はい   | 1-12 または JAN-DEC | * / , -
      曜日       | はい   | 0-6 または SUN-SAT | * / , - ?
  • targetSize:ジョブ実行時のワークロードのターゲットレプリカ数です。

  • runOnce:このパラメーターを true に設定すると、タスクは一度だけ実行されて終了します。

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

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

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

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

CronHPA ジョブを作成する前に、CronHPA アドオンがクラスターで実行中であること、およびターゲットアプリケーションに HPA オブジェクトが 1 つしかないことを確認してください。次の例では、ステートレスアプリケーション用に CronHPA ジョブを作成する方法を示します。他のタイプのワークロードでも手順は同様です。

アプリケーションの作成時

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [デプロイ] を選択します。

  3. デプロイメント ページで、イメージによる作成 をクリックします。

  4. 作成する ページで、基本情報、コンテナー、サービス、およびスケジュールによるスケーリングを設定し、CronHPA をサポートする Deployment を作成します。

    詳細な手順とパラメーターの説明については、「ステートレスワークロード (Deployment) の作成」をご参照ください。主要なパラメーターは以下のとおりです。

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

    • [コンテナー]:イメージを設定し、コンテナーに必要な CPU およびメモリリソースを指定します。

    • [上級]:

      • スケーリング セクションで、[CronHPA] の 有効 チェックボックスをオンにします。アドオンがインストールされていない場合は、プロンプトに従ってインストールします。その後、スケジュールによるスケーリングの条件とパラメーターを設定します。

        • [スケジュール済みタスク名]:CronHPA ジョブの名前です。

        • [必要なレプリカの数量]:スケジュールされた時刻におけるアプリケーションのターゲットレプリカ数です。

        • [スケーリングスケジュール]:スケーリングジョブのスケジュールです。詳細については、「Kubernetes CronHPA Controller」をご参照ください。

既存のアプリケーションの場合

ワークロードページから

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [デプロイ] を選択します。

  3. ターゲットワークロードの名前をクリックし、ポッドのスケーリング タブをクリックします。[CronHPA] セクションで、作成する をクリックし、CronHPA ジョブを設定します。

    パラメーター

    説明

    [ジョブ名]

    CronHPA ジョブの名前です。

    [必要なレプリカの数量]

    スケジュールされた時刻にアプリケーションがスケーリングされるレプリカ数です。

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

    スケーリングジョブのスケジュールです。CronHPA ジョブのスケジュールの設定方法の詳細については、「AliyunContainerService/kubernetes-cronhpa-controller」をご参照ください。

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

説明

このページはホワイトリストに登録されているユーザーのみが利用できます。利用するには、チケットを送信してください

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[Auto Scaling] > [Workload Scaling] を選択します。

  3. ページの右上隅にある オートスケーリングを作成する をクリックします。

  4. HPA および CronHPA タブをクリックし、ターゲットロードを選択する をクリックしてから、スケーリングポリシーを設定する セクションで [CronHPA] のチェックボックスをオンにします。

    複数の CronHPA ジョブを追加できます。プロンプトに従って CronHPA ポリシーを設定し、OK をクリックします。

    • [スケジュールされた自動スケーリング名]:CronHPA オブジェクトのカスタム名です。

    • [ジョブ名]:CronHPA ジョブのカスタム名です。

    • [必要なレプリカの数量]:スケジュールされた時刻におけるアプリケーションのターゲットレプリカ数です。

    • [スケーリングスケジュール]:スケーリングジョブのスケジュールです。詳細については、「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:                 # スケーリングジョブを除外する日付 (Cron 形式)。
      - "* * * 15 11 *"             # 11 月 15 日を除外します。
      - "* * * * * 5"               # 毎週金曜日を除外します。
      jobs:
      - name: "scale-down"
        schedule: "30 */1 * * * *"  # 毎分 30 秒にトリガーされます (例:08:00:30、08:01:30)。
        targetSize: 1               # ターゲットレプリカ数。
        runOnce: false              # ジョブを 1 回だけ実行するかどうかを指定します。デフォルト:false。
      - name: "scale-up"
        schedule: "0 */1 * * * *"  # 毎分 0 秒にトリガーされます (例:08:00:00、08:01:00)。
        targetSize: 3              # ターゲットレプリカ数。
        runOnce: false             
  2. 次のコマンドを実行して、既存のワークロード用の CronHPA ジョブを作成します。

    kubectl apply -f cronhpa.yaml

    期待される出力:

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

関連操作

CronHPA ジョブの管理

CronHPA ジョブを作成した後、CronHPA のリストでそのステータスを表示できます。新しいジョブを追加するか、既存のジョブを変更するには、次のいずれかの方法を使用します。

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

    1. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[Auto Scaling] > [Workload Scaling] を選択します。

    2. [CronHPA] タブをクリックします。対象の CronHPA ジョブの アクション 列で、編集 をクリックします。

  • ワークロードページから (Deployment を例として使用)

    1. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [デプロイ] を選択します。

    2. デプロイメント ページで、ターゲット Deployment の アクション 列にある 詳細 をクリックし、ポッドのスケーリング タブをクリックします。CronHPA セクションの アクション 列で、ジョブの追加または変更 をクリックします。

CronHPA と HPA の併用

詳細については、「CronHPA を HPA に対応させる」をご参照ください。