Updated on 2024-05-30 GMT+08:00

CustomedHPA Policies

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.

Supported functions:
  • 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:

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 volume 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.

Creating a CustomedHPA policy

  1. Log in to the CCE console and click the cluster name to access the cluster console.
  2. Choose Workloads in the navigation pane. Locate the target workload and choose More > Auto Scaling in the Operation column.
  3. 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:

    The cooldown period takes effect only for metric-based policies. Periodic policies are not 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 = CPUs or memory used by pods/Requested CPUs or memory.

    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)

  4. Click Create.

Using kubectl

A CustomHPA 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