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 オブジェクトで動作します。
前提条件
開始する前に、以下を確保してください。
-
ACK マネージドクラスターまたは ACK サーバーレスクラスター。詳細については、「ACK マネージドクラスターの作成」および「ACK サーバーレスクラスターの作成」をご参照ください。
-
kubectlクライアントをクラスターに接続済みであること。詳細については、「kubectl を使用した Kubernetes クラスターへの接続」をご参照ください。
ステップ 1: CronHPA コンポーネントのインストール
ack-kubernetes-cronhpa-controller アドオンをインストールして、クラスターで CronHPA を有効にします。
-
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
[クラスター] ページで、目的のクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。
-
[アプリケーションの管理] タブで、ack-kubernetes-cronhpa-controller を見つけ、[インストール] をクリックし、プロンプトに従ってインストールを完了します。
ステップ 2: CronHPA ジョブの作成
CronHPA ジョブを作成する前に、以下を確認してください。
-
クラスターで
ack-kubernetes-cronhpa-controllerコンポーネントが正常に実行されていること。 -
ターゲットワークロードに最大1つの Horizontal Pod Autoscaler (HPA) が構成されていること。
以下のセクションでは、Deployment を例として使用します。他のワークロードタイプでも手順は同様です。
オプション 1: 新しいアプリケーション作成時の CronHPA ジョブの作成
-
「ACK コンソール」にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
[クラスター] ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。
-
「[デプロイメント]」ページで、「[イメージからの作成]」をクリックします。
-
「基本情報」、「コンテナ」、およびその他の設定セクションを完了します。[詳細設定] に進んだら、[スケーリング] セクションを展開し、[CronHPA] を有効化して、以下のパラメーターを設定します。その他のすべての設定手順およびパラメーターについては、「Deployment を使用したステートレスアプリケーションの作成」をご参照ください。
パラメーター 説明 ジョブ名 CronHPA ジョブの名前。 希望レプリカ数 スケジュールされた時刻に到達したときのターゲットレプリカ数。 スケーリングスケジュール トリガーのスケジュールを定義する cron 式。詳細については、「cron 式の形式」をご参照ください。
オプション 2: 既存アプリケーションの CronHPA ジョブの作成
ワークロードページ
デプロイメントページから:
-
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
[クラスター] ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。
-
[デプロイメント] ページで、対象のデプロイメントの [操作] 列にある [詳細] をクリックし、その後 [Pod スケーリング] タブをクリックします。
-
[CronHPA] セクションで、[作成] をクリックし、以下のパラメーターを設定します:
パラメーター 説明 [ジョブ名] CronHPA ジョブの名称です。 [目標レプリカ数] スケジュール時刻に達した際の目標レプリカ数です。 スケーリングスケジュール トリガーの実行タイミングを定義する cron 式です。「cron 式のフォーマット」をご参照ください。 
ワークロードスケーリングページ
ワークロードスケーリングページから(ホワイトリスト登録が必要):
ワークロードスケーリングページは、ホワイトリストに登録されたアカウントのみが利用できます。アクセスをリクエストするには、チケットを送信してください。
-
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
[クラスター] ページで、対象クラスターの 名前を クリックします。左側の ナビゲーションウィンドウで、[Auto Scaling] > [ワークロードスケーリング] を選択します。
-
右上隅の [Auto Scaling の作成] をクリックし、対象のワークロードを選択して、[水平スケーリング] タブをクリックします。
-
[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
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 をアンインストールするにはどうすればよいですか?
-
「ACK コンソール」にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
[クラスター] ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Helm] を選択します。
-
[Helm] ページで、[ack-kubernetes-cronhpa-controller] コンポーネントが存在するかどうかを確認します。
-
存在する場合、[削除] を [操作] 列でクリックします。> [重要:] Helm を使用してコンポーネントを削除しても、カスタムリソース定義 (CRD) や CronHPA タスク リソースは削除されません。コンポーネントのアンインストール後に、それらを手動で削除してください。
-
存在しない場合は、次のステップに進みます。
-
-
左側のナビゲーションウィンドウで、[運用] > [アドオン] を選択します。
-
「アドオン」ページで、ack-kubernetes-cronhpa-controller を見つけ、「アンインストール」をクリックします。
次のステップ
-
CPU 使用率、メモリ、またはカスタムメトリックに基づいて Pod をスケーリングするには、Horizontal Pod Autoscaler (HPA) を実装する。
-
リソース使用量のサイクルを自動的に特定し、過去のメトリックに基づいてスケーリングします:高度な水平ポッドオートスケーリング(AHPA)に基づく予測スケーリング
-
実際の使用量に基づいて Pod のリソース制限を自動的に適正化: Vertical Pod Autoscaler (VPA)
-
メッセージ キュー、タイミング戦略、カスタム メトリック、その他の Kubernetes イベントに基づいて Pod をスケーリングできます: ACK KEDA (Kubernetes イベント駆動型オートスケーリング)