アプリケーションリソースの使用率が定期的に変更され、Crontabのようなスケジュールに基づいてポッドをスケーリングする必要がある場合は、Cron水平ポッドオートスケーラー (CronHPA) を使用して、スケジュールされたスケーリングを実現できます。 CronHPAは、ビジネストラフィックのピーク期間が大きい場合や、アプリケーションが特定の時間にタスクを実行する必要がある場合に適しています。
先読みのヒント
前提条件
ACKマネージドクラスターまたはACKサーバーレスクラスターが作成されます。 詳細については、「ACKマネージドクラスターの作成」および「ACKサーバーレスクラスターの作成」をご参照ください。
kubectlクライアントがクラスターに接続されています。 詳細については、「kubectlを使用したKubernetesクラスターへの接続」をご参照ください。
CronHPAテンプレートとパラメータ
CronHPAはkubernetes-cronhpa-controllerに基づいて実装されています。 kubernetes-cronhpa-controllerは、時間ベースのポッド水平スケーリングコントローラーで、平日の営業ピーク時にポッド数を自動的に増やし、営業オフピーク時にポッド数を減らすなど、crontabのようなスケジュールに基づいてクラスターをスケーリングします。 CronHPAは、DeploymentやStatefulSetなど、スケーリングサブリソースをサポートするKubernetesオブジェクトに適用できます。
ステップ1: CronHPAコンポーネントのインストール
CronHPAコンポーネントack-kubernetes-cronhpa-controllerをインストールして、アプリケーションワークロードのスケジュールされたスケーリングを実現できます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[アプリケーションの管理] タブをクリックし、[ack-kubernetes-cronhpa-controller] を見つけ、[インストール] をクリックします。
ステップ2: CronHPAタスクの作成
アプリケーションのCronHPAを作成して実行する前に、クラスター内のCronHPAコンポーネントが正常に実行されていること、および現在のアプリケーションのHPAタスクオブジェクトが1つしかないことを確認してください。 次の例は、ステートレスアプリケーションでCronHPAを有効にする方法を示しています。 他のタイプのワークロードの手順も同様です。
アプリケーション作成時にCronHPAジョブを作成する
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[デプロイメント] ページで、[イメージから作成] をクリックします。
[作成] ページで、ページのプロンプトに従って、基本的なアプリケーション情報の設定、コンテナーの設定、サービスの設定、およびスケジュールされたスケーリングの設定を完了し、CronHPAをサポートするデプロイを作成します。
手順とパラメーターの詳細については、「デプロイを使用したステートレスアプリケーションの作成」をご参照ください。 以下では、主なパラメータのみを紹介します。
基本情報: レプリカの名前や数など、アプリケーションの基本情報を設定します。
コンテナー: コンテナーに必要なイメージ、CPU、およびメモリリソースを設定します。
高度な:
[アクセス制御] セクションで、[サービス] に対応する [作成] をクリックしてサービスを設定します。
[スケーリング] セクションで、[CronHPAの有効化] をチェックし、ページプロンプトに従ってコンポーネントをインストールし (既にインストールされている場合は無視します) 、スケジュールされたスケーリングの条件とパラメーターを設定します。
ジョブ名: CronHPAタスクの名前。
必要なレプリカ数: 予定時刻に達すると、アプリケーションレプリカの数は自動的にこの値にスケーリングされます。
スケーリングスケジュール: スケジューリング期間を設定します。 CronHPAジョブのスケジュール期間の設定の詳細については、「AliyunContainerService/kubernetes-cronhpa-controller」をご参照ください。
既存のアプリケーションのCronHPAジョブの作成
[ワークロード] ページでの作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[デプロイメント] ページで、対象のデプロイメントの [操作] 列の [詳細] をクリックし、[ポッドスケーリング] タブをクリックします。 CronHPAセクションで、ページプロンプトに従ってCronHPAコンポーネントをインストールし (既にインストールされている場合は無視します) 、[作成] をクリックしてCronHPAを設定します。
パラメーター
説明
ジョブ名
CronHPAジョブの名前。
必要なレプリカ数
スケジュールされた時間に達すると、アプリケーションレプリカの数は自動的にこの値にスケーリングされます。
スケーリングスケジュール
設定されたスケジューリング期間。 CronHPAジョブのスケジュール期間の設定の詳細については、「AliyunContainerService/kubernetes-cronhpa-controller」をご参照ください。
Workload Scalingページでの作成
Workload Scalingページは、ホワイトリストのユーザーのみが使用できます。 このページを利用する場合は、チケットを起票してください。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。ページの右上隅にある [Auto Scalingの作成] をクリックして対象のワークロードを選択し、[Horizontal Scaling] タブの [CronHPA] オプションをオンにします。 ページプロンプトに従ってコンポーネントをインストールし (すでにインストールされている場合は無視します) 、CronHPAポリシーを設定します。
CronHPA名: CronHPAの名前を入力します。
ジョブ名: CronHPAジョブの名前を入力します。
必要なレプリカ数: 予定時刻に達すると、アプリケーションレプリカの数は自動的にこの値にスケーリングされます。
スケーリングスケジュール: スケジューリング期間を設定します。 CronHPAタスクのスケジューリング期間の設定の詳細については、「AliyunContainerService/kubernetes-cronhpa-controller」をご参照ください。
関連する API
CronHPAジョブの表示、追加、または変更
CronHPAジョブを作成したら、CronHPAリストでCronHPAジョブのステータスとリストを表示できます。 CronHPAジョブを追加したり、既存のCronHPA設定を次のエントリポイントから変更したりできます。
Workload Scalingエントリポイント
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。[水平スケーリング] タブの [CronHPA] セクションで、[操作] 列の [編集] をクリックします。
ワークロードのエントリポイント (例としてステートレスアプリケーションを使用すると、他のタイプのワークロードの手順も同様です)
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[デプロイメント] ページで、対象のデプロイメントの [操作] 列の [詳細] をクリックし、[ポッドスケーリング] タブをクリックします。 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をアンインストールする方法?
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
Helmページで、ack-kubernetes-cronhpa-controllerコンポーネントが存在するかどうかを確認します。
存在する場合は、コンポーネントの右側にある [操作] 列の [削除] をクリックします。
重要Helm経由でコンポーネントを削除しても、CRDと作成されたタスクリソースは削除されません。 CronHPA関連のリソースを完全に削除するには、手動で削除します。
存在しない場合は、次のステップに進みます。
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[アドオン] ページで、ack-kubernetes-cronhpa-controllerコンポーネントを見つけ、[アンインストール] をクリックします。