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

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

最終更新日:Jun 17, 2026

CronHPA が Deployment を直接スケーリングする代わりに、HPA の minReplicasmaxReplicas を調整するように設定します。

Container Service for Kubernetes (ACK) コンソールを介して HPA と CronHPA をデプロイする場合、ACK が自動的に設定を行うため、このトピックを参照する必要はありません。

仕組み

デフォルトでは、CronHPA と HPA はどちらも scaleTargetRef を同じ Deployment に設定します。最後に動作した方が、もう一方の結果を上書きします。

この問題を解決するには、CronHPA の scaleTargetRef を Deployment ではなく HPA リソースに設定します。この設定により、次のようになります。

  • CronHPA は、動作する前に HPA の minReplicasmaxReplicas、および desiredReplicas を読み取ります。

  • CronHPA は、スケジュールされた targetSize に基づいて、HPA の minReplicas または maxReplicas を調整します。

  • HPA は、Deployment とその ReplicaSet を介して Pod をスケーリングします。

CronHPA は Pod 数を直接変更しないため、競合が解消されます。

Diagram showing CronHPA targeting HPA, which in turn targets the Deployment

HPA をターゲットとする CronHPA の設定

典型的なセットアップでは、CronHPA と HPA はどちらも同じ Deployment を参照します。

CronHPA テンプレートのサンプル (変更前)

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

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

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

競合を解決するには、CronHPA マニフェストの scaleTargetRef を変更して、HPA リソースを参照するようにします。

フィールド 変更前 変更後
apiVersion apps/v1 autoscaling/v2
kind Deployment HorizontalPodAutoscaler
name nginx-deployment-basic hpa-sample

例:業務時間中のトラフィックをスケーリングするように設定された CronHPA

hpa-sample が 09:00 から 17:00 (UTC+8) までのトラフィックを管理すると仮定します。09:00 にスケールアウトし、17:00 にスケールインするように CronHPA を設定します。

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
  scaleTargetRef:
    apiVersion: autoscaling/v2
    # リソースタイプを HPA に設定します。
    kind: HorizontalPodAutoscaler
    # HPA リソースの名前を指定します。
    name: hpa-sample
  jobs:
  - name: "scale-up-9am"
    schedule: "0 0 9 * * * "
    targetSize: 20
    runOnce: false
  - name: "scale-down-5pm"
    schedule: "0 0 17 * * *"
    targetSize: 3
    runOnce: false

互換性ルール

CronHPA が HPA をターゲットにすると、レプリカ数の動的な下限として機能します。つまり、Pod 数を直接設定するのではなく、minReplicas を引き上げてスケールアウトし、minReplicas を引き下げてスケールインします。HPA は、メトリクスに基づいてこれらの境界内でスケーリングを行います。

次の表は、各スケーリング条件下で CronHPA と HPA がどのように相互作用するかを示しています。

テーブルヘッダー:

  • HPA (min/max): HPA の minReplicas/maxReplicas

  • CronHPA の desired: CronHPA Job の targetSize

  • 現在のレプリカ数: 実行中の Pod 数。

  • 最終的なレプリカ数: スケーリング後の Pod 数。

HPA (min/max) CronHPA の desired 現在のレプリカ数 最終的なレプリカ数 動作
1/10 5 5 5 desired が現在値と等しい。minReplicasmaxReplicas は変更されません。スケーリングは行われません。
1/10 4 5 5 desired が現在値より小さい。スケーリングは行われません。CronHPA は minReplicas を 4 に設定します。新しい HPA (min/max):4/10。
1/10 6 5 6 desired が現在値を超えます。CronHPA は minReplicas を 6 に設定します。HPA は 6 にスケーリングします。新しい HPA (min/max):6/10。
5/10 4 5 5 desired が現在値より小さい。スケーリングは行われません。CronHPA は minReplicas を 4 に設定します。新しい HPA (min/max):4/10。
5/10 11 5 11 desired が maxReplicas を超えます。CronHPA は minReplicasmaxReplicas の両方を 11 に設定します。HPA は 11 にスケーリングします。新しい HPA (min/max):11/11。

次のステップ