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設定テンプレート |
|
|
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構成のminReplicas
、maxReplicas
、およびdesiredReplicas
の値を認識します。 CronHPAは、scaleTargetRef
によって指定されたアプリケーションに対してプロビジョニングされたレプリカの現在の数も認識しています。
ただし、CronHPAはデプロイのレプリカ数を直接変更しません。 CronHPAとHPAの競合を回避するために、HPAをトリガーしてDeploymentの構成を変更します。
次の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 |
| CronHPA構成のターゲットレプリカ数が現在のレプリカ数と等しい場合、CronHAPはHPA構成のminReplicasとmaxReplicasを変更しません。 さらに、スケーリングアクティビティはトリガーされません。 |
1/10 | 4 | 5 |
| CronHPA構成のターゲットレプリカ数が現在のレプリカ数より少ない場合、スケーリングアクティビティはトリガーされません。 |
1/10 | 6 | 5 |
|
|
5/10 | 4 | 5 |
|
|
5/10 | 11 | 5 |
|
|
関連ドキュメント
HPAとCronHPAの詳細については、「水平ポッド自動スケーリング (HPA) の使用」と「スケジュールされた水平スケーリングにCronHPAを使用」をご参照ください。