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

Container Service for Kubernetes:CronHPA と HPA の互換性

最終更新日:Apr 02, 2025

コンテナ定時スケーリング (CronHPA) と Horizontal Pod Autoscaler (HPA) は互いを認識しません。 アプリケーションに CronHPA と HPA の両方が構成されている場合、CronHPA と HPA はアプリケーションを個別にスケーリングします。 この場合、後のスケーリングアクティビティは前のスケーリングアクティビティを上書きします。 この問題を解決するために、Container Service for Kubernetes (ACK) は、CronHPA が HPA と競合なく対話するためのソリューションを提供します。 ACK は、CronHPA と HPA の両方がデプロイされていることを検出すると、HPA を CronHPA のスケーリングオブジェクトとして設定します。 CronHPA は、スケジュールされた時間に HPA によってスケーリングされるオブジェクト (デプロイメントなど) をスケーリングするように HPA をトリガーします。

説明

[ACK コンソール] で HPA と CronHPA をデプロイする場合は、このトピックで説明されている手順を省略できます。 この場合、ACK は CronHPA と HPA を互換にするための操作を自動的に実行します。

CronHPA テンプレートのサンプルと HPA テンプレートのサンプルの比較

CronHPA テンプレートのサンプル

HPA テンプレートのサンプル

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
   scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: nginx-deployment-basic
   jobs:
   - name: "scale-down"  // スケールダウン
     schedule: "30 */1 * * * *"
     targetSize: 1
   - name: "scale-up" // スケールアップ
     schedule: "0 */1 * * * *"
     targetSize: 11	
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-sample
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment-basic
  minReplicas: 4
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50	

上記のテンプレートは、以下の情報を示しています。

  • scaleTargetRef フィールドは、CronHPA と HPA の両方の構成で使用され、スケーリング対象のオブジェクトを指定します。

  • CronHPA 構成の jobs セクションの crontab ルールは、スケジュールされた時間にポッドがスケーリングされる数を指定します。

  • HPA は、リソース使用量に基づいてスケーリングアクティビティをトリガーします。

CronHPA と HPA の両方がデプロイされている場合、CronHPA と HPA は scaleTargetRef で指定された同じアプリケーションをスケーリングする可能性があります。 この問題を解決するには、CronHPA が HPA のステータスを検出できるようにするだけで済みます。

ソリューション

メカニズム

ACK は、CronHPA と HPA の両方がデプロイされていることを検出すると、HPA を CronHPA のスケーリングオブジェクトとして設定します。 HPA テンプレートのサンプルでは、scaleTargetRef は HPA によって管理されるデプロイメントを指定します。 デプロイメントはレプリカセットに関連付けられています。 HPA がデプロイメントをスケーリングすると、レプリカセットはポッドを目的の数にスケーリングします。

CronHPA の scaleTargetRef パラメーターを HPA に設定すると、CronHPA は HPA の minReplicasmaxReplicasdesiredReplicas パラメーターの値、および HPA の scaleTargetRef パラメーターで指定されたアプリケーションを実行しているポッドの現在の数を認識できます。 これにより、CronHPA は上記の値を CronHPA ジョブで必要なポッドの数と比較して、アプリケーションでスケーリングをどのように実装するかを決定します。

CronHPA は、デプロイメントのポッドの数を直接変更しません。 CronHPA は、ポッドをスケーリングするように HPA をトリガーします。 これにより、CronHPA と HPA の競合を防ぎます。

サンプル構成

CronHPA の scaleTargetRef パラメーターを HPA に設定します。 例:

元の構成

変更後の構成

scaleTargetRef:
   apiVersion: apps/v1
   kind: Deployment
   name: nginx-deployment-basic
scaleTargetRef:
   apiVersion: autoscaling/v2
   # リソースタイプを HPA に設定します。
   kind: HorizontalPodAutoscaler
   # HPA リソースの名前を指定します。
   name:  hpa-sample 

hpa-sample という名前の HPA リソースを作成して、毎日 09:00 (UTC + 08:00) から 17:00 (UTC + 08:00) までのワークロードの変動を処理するとします。 この場合、HPA リソースをスケーリングする CronHPA ジョブを作成できます。 たとえば、毎日 09:00 (UTC + 08:00) にアプリケーションをスケールアウトし、毎日 17:00 (UTC + 08:00) にアプリケーションをスケールインする CronHPA ジョブを構成できます。

次のサンプルコードブロックは、HPA と互換性のある CronHPA テンプレートの例を示しています。

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
   scaleTargetRef:    # HPA リソースに関する情報を指定します。
      apiVersion: autoscaling/v2
      kind: HorizontalPodAutoscaler
      name: hpa-sample 
   jobs:
   - name: "scale-up-9am"  // 午前9時にスケールアップ
     schedule: "0 0 9 * * * "
     targetSize: 20
     runOnce: false
   - name: "scale-down-5pm"   // 午後5時にスケールダウン
     schedule: "0 0 17 * * *"
     targetSize: 3
     runOnce: false

互換性ルール

次の表は、CronHPA と HPA が競合なく対話できるようにする互換性ルールを示しています。

説明

次のリストは、テーブルヘッダーについて説明しています。

  • HPA (min/max): HPA の minReplicas パラメーターと maxReplicas パラメーターの比率。

  • CronHPA で必要なポッドレプリカの数: CronHPA で必要なポッドレプリカの数。

  • ポッドレプリカの現在の数: アプリケーションを実行しているポッドレプリカの現在の数。

  • ポッドレプリカの最終的な数: アプリケーションがスケーリングされるポッドレプリカの数。

スケーリング条件

スケーリング結果

説明

HPA (min/max)

CronHPA で必要なポッドレプリカの数

ポッドレプリカの現在の数

1/10

5

5

  • HPA (min/max): 1/10。

  • ポッドレプリカの最終的な数: 5。

CronHPA で必要なポッドの数がポッドの現在の数と同じ場合、CronHPA は HPA の minReplicas パラメーターと maxReplicas パラメーターの値を変更しません。 また、スケーリングアクティビティはトリガーされません。

1/10

4

5

  • HPA (min/max): 1/10。

  • ポッドレプリカの最終的な数: 5。

CronHPA で必要なポッドの数がポッドの現在の数よりも少ない場合、スケーリングアクティビティはトリガーされません。

1/10

6

5

  • HPA (min/max): 6/10。

  • ポッドレプリカの最終的な数: 6。

  • CronHPA で必要なポッドの数がポッドの現在の数よりも多い場合、CronHPA は必要な数に達するまでポッドを追加します。

  • CronHPA で必要なポッドの数が HPA の minReplicas パラメーターの値よりも大きい場合、CronHPA は minReplicas の値を変更します。

5/10

4

5

  • HPA (min/max): 4/10。

  • ポッドレプリカの最終的な数: 5。

  • CronHPA で必要なポッドの数がポッドの現在の数よりも少ない場合、スケーリングアクティビティはトリガーされません。

  • CronHPA で必要なポッドの数が HPA の minReplicas パラメーターの値よりも少ない場合、CronHPA は minReplicas の値を変更します。

5/10

11

5

  • HPA (min/max): 11/11。

  • ポッドレプリカの最終的な数: 11。

  • CronHPA で必要なポッドの数がポッドの現在の数よりも多い場合、CronHPA は必要な数に達するまでポッドを追加します。

  • CronHPA で必要なポッドの数が HPA の maxReplicas パラメーターの値よりも大きい場合、CronHPA は maxReplicas の値を変更します。

関連ドキュメント

HPA と CronHPA の詳細については、「Horizontal Pod Autoscaler (HPA) を実装する」および「スケジュールされた水平スケーリングに CronHPA を使用する」をご参照ください。