Creating a CustomedHPA Policy
A CustomedHPA policy scales Deployments based on metrics (such as CPU usage and memory usage) or at a periodic interval (a specific time point every day, every week, every month, or every year). This type of policy is a CCE-enhanced auto scaling capability.
- Scaling can be performed based on the percentage of the current number of pods.
- The minimum scaling step can be set.
- Different scaling operations can be performed based on the actual metric values.
Prerequisites
The CCE Advanced HPA add-on must be installed. If the add-on version is earlier than 1.2.11, Prometheus must be installed. If the add-on version is 1.2.11 or later, one of the following add-ons that can provide metrics APIs must be installed based on your cluster version and service requirements:
- Kubernetes Metrics Server: provides basic resource usage metrics, such as container CPU and memory usage. It is supported by all cluster versions.
- Cloud Native Cluster Monitoring: available only in clusters of v1.17 or later.
- Auto scaling based on basic resource metrics: Prometheus needs to be registered as a metrics API. For details, see Providing Resource Metrics Through the Metrics API.
- Auto scaling based on custom metrics: Custom metrics need to be aggregated to the Kubernetes API server. For details, see Creating an HPA Policy Using Custom Metrics.
- Prometheus (EOM): Prometheus needs to be registered as a metrics API. For details, see Providing Resource Metrics Through the Metrics API. This add-on supports only clusters of v1.21 or earlier.
Notes and Constraints
- CustomedHPA policies apply only to clusters of v1.15 or later.
- For clusters earlier than v1.19.10, if an HPA policy is used to scale out a workload with EVS volumes mounted, the existing pods cannot be read or written when a new pod is scheduled to another node.
For clusters of v1.19.10 and later, if an HPA policy is used to scale out a workload with EVS volumes mounted, a new pod cannot be started because EVS disks cannot be attached.
- The specifications of the CCE Advanced HPA add-on are decided based on the total number of containers in the cluster and the number of scaling policies. Configure 500m CPU cores and 1000 MiB memory for every 5000 containers, and 100m CPU cores and 500 MiB memory for every 1000 scaling policies.
- After a CustomedHPA policy is created, the type of its associated workload cannot be changed.
Procedure
- Log in to the CCE console and click the cluster name to access the cluster console.
- Choose Workloads in the navigation pane. Locate the target workload and choose More > Auto Scaling in the Operation column.
- Set Policy Type to CustomedHPA and configure policy parameters.
Table 1 CustomedHPA policy parameters Parameter
Description
Pod Range
Minimum and maximum numbers of pods.
When a policy is triggered, the workload pods are scaled within this range.
Cooldown Period
Enter an interval, in minutes.
This parameter indicates the interval between consecutive scaling operations. The cooldown period ensures that a scaling operation is initiated only when the previous one is completed and the system is running stably.
NOTE:If you are using CCE Cluster Autoscaler version 1.3.10 or later, the cooldown period will only apply to metric policies. Periodic policies will not be affected by the cooldown period.
Rules
Click . In the dialog box displayed, set the following parameters:
- Type: You can select Metric-based (Table 2) or Periodic (Table 3). Then, configure trigger conditions and actions.
- Enable: Enable or disable the policy rule.
After configuring the preceding parameters, click OK. Then, the added policy rule is displayed in the rule list.
Table 2 Metric-based rules Parameter
Description
Trigger
Select CPU usage or Memory usage, choose > or <, and enter a percentage.NOTE:Usage = Average resource usage of all pods in a workload/Requested resources
Action
Set an action to be performed when the trigger condition is met. Multiple actions can be added.- Scale To: Adjust the number of pods to the specified value. Both a number and a percentage will do. This action can be used to scale in or out pods. If the current number of pods is less than the target value or the target percentage is greater than 100%, the number of pods will be scaled out to the target value. If the current number of pods is greater than the target value or the target percentage is less than 100%, the number of pods will be scaled in to the target value.
- Add: Configure this parameter when Trigger is set to >. Add the number of pods. You can specify a number or a percentage. This action can only be used to scale out pods.
- Reduce: Configure this parameter when Trigger is set to <. Reduce the number of pods. You can specify a number or a percentage. This action can only be used to scale in pods.
NOTE:You can enter a number or a percentage for the preceding actions.
When entering a percentage, you are required to specify the minimum number of available pods. Final number of pods = Number of current pods x Percentage. The result is rounded up. If the result is smaller than the minimum number of available pods, the preset value is used. Otherwise, the calculation result is used.
As shown below, when the CPU usage exceeds 50%, the number of pods is scaled out to 5. When the CPU usage exceeds 70%, the number of pods is scaled out to 8. When the CPU usage exceeds 90%, the number of pods is scaled out to 18 (adding 10 more pods). These rules also work for scale-in operations.
Figure 1 Setting a trigger condition
Table 3 Periodic-based rules Parameter
Description
Trigger Time
You can select a specific time every day, every week, every month, or every year.
Action
Set an action to be performed at the Triggered Time. As shown below, one pod will be added at 17:00 every day.- Scale To: Adjust the number of pods to the specified value. Both a number and a percentage will do. This action can be used to scale in or out pods. If the current number of pods is less than the target value or the target percentage is greater than 100%, the number of pods will be scaled out to the target value. If the current number of pods is greater than the target value or the target percentage is less than 100%, the number of pods will be scaled in to the target value.
- Add: Add the number of pods. You can specify a number or a percentage. This action can only be used to scale out pods.
- Reduce: Reduce the number of pods. You can specify a number or a percentage. This action can only be used to scale in pods.
NOTE:You can enter a number or a percentage for the preceding actions.
When entering a percentage, you are required to specify the minimum number of available pods. Final number of pods = Number of current pods x Percentage. The result is rounded up. If the result is smaller than the minimum number of available pods, the preset value is used. Otherwise, the calculation result is used.
Figure 2 Periodic triggering (Daily)
- Click Create.
Using kubectl
A CustomedHPA policy is a CustomResourceDefinition (CRD) and can be defined as follows in YAML:
apiVersion: autoscaling.cce.io/v1alpha1 kind: CustomedHorizontalPodAutoscaler metadata: name: customhpa-example namespace: default spec: coolDownTime: 3m # Cooldown period maxReplicas: 10 # Maximum number of pods minReplicas: 1 # Minimum number of pods rules: - actions: # Policy rules - metricRange: 0,0.1 # Metric range, from 0 to 10% operationType: ScaleDown # Scaling type. ScaleDown indicates downsizing. operationUnit: Task # Operation unit. Task indicates the number of tasks. operationValue: 1 # Resource quantity in each scaling - metricRange: 0.1,0.3 # Metric range, from 10% to 30% operationType: ScaleDown operationUnit: Task operationValue: 2 disable: false metricTrigger: hitThreshold: 1 metricName: CPURatioToRequest # Metric name. CPURatioToRequest indicates the CPU usage. metricOperation: < # Metric expression operator metricValue: 0.3 # Value on the right of the metric expression periodSeconds: 60 # statistic: instantaneous # ruleName: low ruleType: Metric - actions: - metricRange: 0.7,0.9 operationType: ScaleUp operationUnit: Task operationValue: 1 - metricRange: 0.9,+Infinity operationType: ScaleUp operationUnit: Task operationValue: 2 disable: false metricTrigger: hitThreshold: 1 metricName: CPURatioToRequest metricOperation: '>' metricValue: 0.7 periodSeconds: 60 statistic: instantaneous ruleName: high ruleType: Metric scaleTargetRef: # Associated workload apiVersion: apps/v1 kind: Deployment name: nginx
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot