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

Container Service for Kubernetes:CronHPAとHPAの相互作用

最終更新日:Dec 12, 2024

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

説明

HPAとCronHPAの両方がContainer Service Management Console から作成されている場合は、この手順をスキップします。 ACKは自動的に競合の問題を解決します。

構成テンプレートから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/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
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とHPAの設定を比較すると、次のことがわかります。

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

  • CronHPA構成のjobsセクションのcrontabルールでは、予定時刻に達したときにスケーリングするレプリカの数を指定します。

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

CronHPAおよびHPAが両方とも展開されるとき、CronHPAおよびHPAは、scaleTargetRefによって指定される同じアプリケーションに対してスケーリングし得る。 この問題を解決するには、CronHPAはHPAの現在のステータスを認識する必要があります。

解決策

CronHPAとHPAが独立しており、互いに認識していないという問題を解決するために、ACKはCronHPAのスケーリングターゲットをHPAに設定することをサポートしています。 HPA設定では、scaleTargetRefフィールドは、HPAによって管理される展開を指定します。 配置はReplicaSetに関連しています。 HPAがデプロイをスケーリングすると、ReplicaSetの値に等しい数のレプリカがスケーリングされます。

CronHPAのscaleTargetRefをHPAに設定することにより、CronHPAは、CronHPAタスクのレプリカのターゲット数、HPA構成のminReplicasmaxReplicas、およびdesiredReplicasの値を認識します。 CronHPAは、scaleTargetRefによって指定されたアプリケーションに対してプロビジョニングされたレプリカの現在の数も認識しています。

ただし、CronHPAはデプロイのレプリカ数を直接変更しません。 CronHPAとHPAの競合を回避するために、HPAをトリガーしてDeploymentの構成を変更します。

image

次のYAMLテンプレートは、CronHPAが競合なしでHPAと対話できるようにする設定を示しています。

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
   scaleTargetRef:
      apiVersion: autoscaling/v1
      kind: HorizontalPodAutoscaler
      name:  nginx-deployment-basic-hpa
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
     runOnce: false
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     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構成のターゲットレプリカ数が現在のレプリカ数と等しい場合、CronHAPは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の詳細については、「水平ポッド自動スケーリング (HPA) の使用」と「スケジュールされた水平スケーリングにCronHPAを使用」をご参照ください。