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

Container Service for Kubernetes:スケジュールされた Pod スケーリングに CronHPA を使用する

最終更新日:Mar 27, 2026

Cron Horizontal Pod Autoscaler (コンテナ定時スケーリング) は、crontab のようなスケジュールに基づいて Pod をスケーリングします。アプリケーションのトラフィックが予測可能なパターンに従う場合 (たとえば、ピーク時間前にスケールアップし、夜間にスケールダウンする場合) に CronHPA を使用します。

ACK は、スケジューリングレイヤー (ワークロードスケーリング) とリソースレイヤー (ノードスケーリング) の両方で複数の Auto Scaling ソリューションを提供します。続行する前に、「Auto Scaling」を読んで、ご利用のユースケースにどのソリューションが適しているかを理解してください。

仕組み

CronHPA は、時間ベースの水平スケーリングコントローラーである kubernetes-cronhpa-controller 上に構築されています。スケジュールされたトリガー時刻ごとに、CronHPA はターゲットワークロードのレプリカ数を targetSize に設定します。その後、次のスケジュールされたトリガーが起動するまで、CronHPA はそれ以上のアクションを実行しません。

CronHPA は、タイムウィンドウモデルではなく、トリガーポイントモデルです。トリガー時刻にレプリカ数を1回設定し、その数を維持しません。別のコントローラー (HPA など) がその間にレプリカを調整しても、CronHPA は次のトリガーが起動するまで介入しません。

CronHPA は、Deployment や StatefulSet など、スケールサブリソースをサポートするすべての Kubernetes オブジェクトで動作します。

前提条件

開始する前に、以下を確保してください。

ステップ 1: CronHPA コンポーネントのインストール

ack-kubernetes-cronhpa-controller アドオンをインストールして、クラスターで CronHPA を有効にします。

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

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

  3. [アプリケーションの管理] タブで、ack-kubernetes-cronhpa-controller を見つけ、[インストール] をクリックし、プロンプトに従ってインストールを完了します。

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

CronHPA ジョブを作成する前に、以下を確認してください。

  • クラスターで ack-kubernetes-cronhpa-controller コンポーネントが正常に実行されていること。

  • ターゲットワークロードに最大1つの Horizontal Pod Autoscaler (HPA) が構成されていること。

以下のセクションでは、Deployment を例として使用します。他のワークロードタイプでも手順は同様です。

オプション 1: 新しいアプリケーション作成時の CronHPA ジョブの作成

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

  2. [クラスター] ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。

  3. [デプロイメント]」ページで、「[イメージからの作成]」をクリックします。

  4. 「基本情報」、「コンテナ」、およびその他の設定セクションを完了します。[詳細設定] に進んだら、[スケーリング] セクションを展開し、[CronHPA] を有効化して、以下のパラメーターを設定します。その他のすべての設定手順およびパラメーターについては、「Deployment を使用したステートレスアプリケーションの作成」をご参照ください。

    パラメーター 説明
    ジョブ名 CronHPA ジョブの名前。
    希望レプリカ数 スケジュールされた時刻に到達したときのターゲットレプリカ数。
    スケーリングスケジュール トリガーのスケジュールを定義する cron 式。詳細については、「cron 式の形式」をご参照ください。

オプション 2: 既存アプリケーションの CronHPA ジョブの作成

ワークロードページ

デプロイメントページから:

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

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

  3. [デプロイメント] ページで、対象のデプロイメントの [操作] 列にある [詳細] をクリックし、その後 [Pod スケーリング] タブをクリックします。

  4. [CronHPA] セクションで、[作成] をクリックし、以下のパラメーターを設定します:

    パラメーター 説明
    [ジョブ名] CronHPA ジョブの名称です。
    [目標レプリカ数] スケジュール時刻に達した際の目標レプリカ数です。
    スケーリングスケジュール トリガーの実行タイミングを定義する cron 式です。「cron 式のフォーマット」をご参照ください。

    create

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

ワークロードスケーリングページから(ホワイトリスト登録が必要):

ワークロードスケーリングページは、ホワイトリストに登録されたアカウントのみが利用できます。アクセスをリクエストするには、チケットを送信してください。
  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、対象クラスターの 名前を クリックします。左側の ナビゲーションウィンドウで、[Auto Scaling] > [ワークロードスケーリング] を選択します。

  3. 右上隅の [Auto Scaling の作成] をクリックし、対象のワークロードを選択して、[水平スケーリング] タブをクリックします。

  4. [CronHPA] オプションを選択し、以下のパラメーターを設定します:

    パラメーター 説明
    [CronHPA 名] CronHPA リソースの名称です。
    [ジョブ名] CronHPA ジョブの名称です。
    [目標レプリカ数] スケジュール時刻に達した際の目標レプリカ数です。
    スケーリングスケジュール トリガーの実行タイミングを定義する cron 式です。「cron 式のフォーマット」をご参照ください。

CronHPA YAML リファレンス

CronHPA は CronHorizontalPodAutoscaler カスタムリソースとして構成されます。次の例では、毎時30秒に Deployment を1レプリカにスケールダウンし、毎時0秒に3レプリカにスケールアップします (11月15日と毎週金曜日はスキップ)。

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:
    # Skip November 15th
    - "* * * 15 11 *"
    # Skip every Friday
    - "* * * * * 5"
  jobs:
    - name: "scale-down"
      schedule: "30 */1 * * * *"
      targetSize: 1
    - name: "scale-up"
      schedule: "0 */1 * * * *"
      targetSize: 3
      runOnce: false

パラメーター

パラメーター 説明
scaleTargetRef スケールするワークロード。ターゲットオブジェクトはスケールサブリソースをサポートしている必要があります。
excludeDates すべてのジョブがスキップされる日付のリスト。粒度は1日です。6フィールドの cron 形式を使用します: "<Seconds> <Minutes> <Hours> <Day of month> <Month> <Day of week>"
jobs[].name ジョブ名。CronHPA リソース内で一意である必要があります。
jobs[].schedule ジョブがトリガーされるタイミングを定義する cron 式。Go go-cron ライブラリを使用します。詳細については、「cron 式の形式」をご参照ください。
jobs[].targetSize ジョブがトリガーされたときにスケールするレプリカ数。
jobs[].runOnce true」に設定すると、タスクは一度だけ実行され、最初の実行後に終了します。デフォルト: 「false」。

cron 式の形式

CronHPA は、標準の5フィールド crontab 構文とは異なり、6フィールドの cron 式 (秒が最初) を使用します。

<Seconds> <Minutes> <Hours> <Day of month> <Month> <Day of week>
フィールド 必須 許可される値 特殊文字
はい 0–59 * / , -
はい 0–59 * / , -
時間 はい 0–23 * / , -
日 (月内) はい 1–31 * / , - ?
はい 1–12 または JAN–DEC * / , -
曜日 はい 0–6 または SUN–SAT * / , - ?

一般的なスケジュールの例:

スケジュール 意味
0 0 8 * * * 毎日 08:00
0 0 18 * * 1-5 平日 (月~金) 18:00
0 0 */1 * * * 毎時、正時
0 30 */1 * * * 毎時、30分
0 0 8 * * 1-5 平日 08:00 (営業時間に合わせてスケールアップ)
0 0 20 * * 1-5 平日 20:00 (営業時間後にスケールダウン)

完全な式の参照については、kubernetes-cronhpa-controller ドキュメントをご参照ください。

その他の操作

CronHPA ジョブの表示、追加、または編集

CronHPA ジョブを作成した後、次のエントリポイントからステータスを表示したり、構成を編集したりできます。

  • ワークロードスケーリングページ: 左側のナビゲーションウィンドウで、[Auto Scaling] > [ワークロードスケーリング] を選択します。[水平スケーリング] タブで、[コンテナ定時スケーリング] セクションの対象のコンテナ定時スケーリングを見つけ、[操作] 列の [編集] をクリックします。

  • デプロイメントページ: 左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。対象のデプロイメントの [詳細] をクリックし、次に [ポッドスケーリング] タブをクリックします。コンテナ定時スケーリングセクションで、[操作] 列の [ジョブの追加または編集] をクリックします。

CronHPA と HPA の連携

CronHPA と HPA は独立して動作し、互いを認識しません。両方が同じワークロードに構成されている場合、スケーリングアクションが競合する可能性があり、後続のアクションが以前のアクションを上書きします。

この競合を解決するために、ACK が CronHPA と HPA の両方がデプロイされていることを検出した場合、CronHPA のスケーリングターゲットを HPA に設定し、Deployment などの HPA スケーリングオブジェクトのスケジュールされたスケーリングを有効にします。

設定手順については、「コンテナ定時スケーリングと HPA の連携を実装する」をご参照ください。

よくある質問

ack-kubernetes-cronhpa-controller をアンインストールするにはどうすればよいですか?

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

  2. [クラスター] ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Helm] を選択します。

  3. [Helm] ページで、[ack-kubernetes-cronhpa-controller] コンポーネントが存在するかどうかを確認します。

    • 存在する場合、[削除][操作] 列でクリックします。> [重要:] Helm を使用してコンポーネントを削除しても、カスタムリソース定義 (CRD) や CronHPA タスク リソースは削除されません。コンポーネントのアンインストール後に、それらを手動で削除してください。

    • 存在しない場合は、次のステップに進みます。

  4. 左側のナビゲーションウィンドウで、[運用][アドオン] を選択します。

  5. アドオン」ページで、ack-kubernetes-cronhpa-controller を見つけ、「アンインストール」をクリックします。

次のステップ

参考文献