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

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

最終更新日:Dec 14, 2024

アプリケーションリソースの使用率が定期的に変更され、Crontabのようなスケジュールに基づいてポッドをスケーリングする必要がある場合は、Cron水平ポッドオートスケーラー (CronHPA) を使用して、スケジュールされたスケーリングを実現できます。 CronHPAは、ビジネストラフィックのピーク期間が大きい場合や、アプリケーションが特定の時間にタスクを実行する必要がある場合に適しています。

先読みのヒント

ACKクラスタは、様々なワークロードスケーリング (スケジューリングレイヤ弾性) およびノードスケーリング (リソースレイヤ弾性) ソリューションを提供する。 このトピックを使用する前に、自動スケーリングの概要を読んで、さまざまなソリューションの適用可能なシナリオと使用制限を理解することをお勧めします。

前提条件

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

CronHPAはkubernetes-cronhpa-controllerに基づいて実装されています。 kubernetes-cronhpa-controllerは、時間ベースのポッド水平スケーリングコントローラーで、平日の営業ピーク時にポッド数を自動的に増やし、営業オフピーク時にポッド数を減らすなど、crontabのようなスケジュールに基づいてクラスターをスケーリングします。 CronHPAは、DeploymentやStatefulSetなど、スケーリングサブリソースをサポートするKubernetesオブジェクトに適用できます。

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

パラメーター

説明

scaleTargetRef

スケーリングするオブジェクトを指定します。 オブジェクトがScaleサブリソースをサポートしている場合、CronHPAはそれをサポートできます。

excludeDates

日付配列。 タスクは、excludeDatesの説明と一致する日付でスキップされます。 単位:日

"* * * * *" は、"<Seconds> <Minutes> <Hours> <Day of month> <Day of week>" を表します。

11月15日にタスクを除外する場合は、次の例に示すようにexcludeDatesを指定します。

excludeDates:
  - "* * * 15 11 *"

仕事

1つの仕様で複数のCronHPAタスクを設定できます。 各CronHPAタスクには、次のパラメータがあります。

  • name: CronHPA内で一意である必要があり、さまざまなタスクを名前で区別できます。

  • schedule: ポリシーはCrontabに似ています。 kubernetes-cronhpa-controllerは、より多くの式ルールをサポートするGolangライブラリ (go-cron) を使用します。 以下のフォーマットの説明に従って厳密に設定してください。 それ以外の場合、作成は失敗します。

    Cron式の形式は次のとおりです。

    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: スケジューリング中にスケーリングするポッドの数を設定します。

  • runOnce: trueに設定すると、タスクは1回だけ実行され、最初の実行後に終了します。

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

CronHPAコンポーネントack-kubernetes-cronhpa-controllerをインストールして、アプリケーションワークロードのスケジュールされたスケーリングを実現できます。

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

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

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

ステップ2: CronHPAタスクの作成

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

アプリケーション作成時にCronHPAジョブを作成する

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

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

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

  4. [作成] ページで、ページのプロンプトに従って、基本的なアプリケーション情報の設定、コンテナーの設定、サービスの設定、およびスケジュールされたスケーリングの設定を完了し、CronHPAをサポートするデプロイを作成します。

    手順とパラメーターの詳細については、「デプロイを使用したステートレスアプリケーションの作成」をご参照ください。 以下では、主なパラメータのみを紹介します。

    • 基本情報: レプリカの名前や数など、アプリケーションの基本情報を設定します。

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

    • 高度な:

      • [アクセス制御] セクションで、[サービス] に対応する [作成] をクリックしてサービスを設定します。

      • [スケーリング] セクションで、[CronHPAの有効化] をチェックし、ページプロンプトに従ってコンポーネントをインストールし (既にインストールされている場合は無視します) 、スケジュールされたスケーリングの条件とパラメーターを設定します。

        • ジョブ名: CronHPAタスクの名前。

        • 必要なレプリカ数: 予定時刻に達すると、アプリケーションレプリカの数は自動的にこの値にスケーリングされます。

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

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

[ワークロード] ページでの作成

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

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

  3. [デプロイメント] ページで、対象のデプロイメントの [操作] 列の [詳細] をクリックし、[ポッドスケーリング] タブをクリックします。 CronHPAセクションで、ページプロンプトに従ってCronHPAコンポーネントをインストールし (既にインストールされている場合は無視します) 、[作成] をクリックしてCronHPAを設定します。

    create

    パラメーター

    説明

    ジョブ名

    CronHPAジョブの名前。

    必要なレプリカ数

    スケジュールされた時間に達すると、アプリケーションレプリカの数は自動的にこの値にスケーリングされます。

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

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

Workload Scalingページでの作成

説明

Workload Scalingページは、ホワイトリストのユーザーのみが使用できます。 このページを利用する場合は、チケットを起票してください

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

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

  3. ページの右上隅にある [Auto Scalingの作成] をクリックして対象のワークロードを選択し、[Horizontal Scaling] タブの [CronHPA] オプションをオンにします。 ページプロンプトに従ってコンポーネントをインストールし (すでにインストールされている場合は無視します) 、CronHPAポリシーを設定します。

    • CronHPA名: CronHPAの名前を入力します。

    • ジョブ名: CronHPAジョブの名前を入力します。

    • 必要なレプリカ数: 予定時刻に達すると、アプリケーションレプリカの数は自動的にこの値にスケーリングされます。

    • スケーリングスケジュール: スケジューリング期間を設定します。 CronHPAタスクのスケジューリング期間の設定の詳細については、「AliyunContainerService/kubernetes-cronhpa-controller」をご参照ください。

関連する API

CronHPAジョブの表示、追加、または変更

CronHPAジョブを作成したら、CronHPAリストでCronHPAジョブのステータスとリストを表示できます。 CronHPAジョブを追加したり、既存のCronHPA設定を次のエントリポイントから変更したりできます。

  • Workload Scalingエントリポイント

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

    2. [水平スケーリング] タブの [CronHPA] セクションで、[操作] 列の [編集] をクリックします。

  • ワークロードのエントリポイント (例としてステートレスアプリケーションを使用すると、他のタイプのワークロードの手順も同様です)

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

    2. [デプロイメント] ページで、対象のデプロイメントの [操作] 列の [詳細] をクリックし、[ポッドスケーリング] タブをクリックします。 CronHPAセクションで、[操作] 列の [ジョブの追加または編集] をクリックします。

CronHPAとHPA間の調整を実装する

CronHPAとHPAは独立しており、互いに認識していません。 その結果、CronHPAとHPAの両方がアプリケーションのYAMLファイルで構成されている場合、CronHPAコントローラーとHPAコントローラーはアプリケーション用に個別にスケーリングされます。 後のスケーリングアクティビティは、前のスケーリングアクティビティを上書きします。 この問題を解決するために、Container Service for Kubernetes (ACK) は、CronHPAが競合なしにHPAと対話するためのソリューションを提供します。 ACKは、CronHPAとHPAの両方がデプロイされていることを検出すると、CronHPAのスケーリングターゲットをHPAに設定し、デプロイなどのHPAスケーリングオブジェクトのスケジュールされたスケーリングを有効にします。

詳細については、「CronHPAとHPA間の調整の実装」を参照してください。

よくある質問

ack-kubernetes-cronhpa-controllerをアンインストールする方法?

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

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

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

    • 存在する場合は、コンポーネントの右側にある [操作] 列の [削除] をクリックします。

      重要

      Helm経由でコンポーネントを削除しても、CRDと作成されたタスクリソースは削除されません。 CronHPA関連のリソースを完全に削除するには、手動で削除します。

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

  4. 詳細ページの左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

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