CustomedHPA策略是自研的弹性伸缩增强能力,能够基于指标(CPU利用率、内存利用率)或周期(每天、每周、每月或每年的具体时间点),对无状态工作负载进行弹性扩缩容。
主要功能如下:
- 支持按照当前实例数的百分比进行扩缩容。
- 支持设置一次扩缩容的最小步长。
- 支持按照实际指标值执行不同的扩缩容动作。
前提条件
使用CustomedHPA策略必须安装cce-hpa-controller。若cce-hpa-controller版本低于1.2.11,则必须安装prometheus插件;若版本大于或等于1.2.11,则需要安装能够提供Metrics API的插件,如kube-prometheus-stack、metrics-server或Prometheus。
约束与限制
- CustomedHPA策略:仅支持1.15及以上版本的集群创建。
- 每个工作负载只能创建一个策略,即如果您创建了一个HPA策略,则不能再对其创建CustomedHPA策略或其他HPA策略,您可以删除该HPA策略后再创建。
- 1.19.10以下版本的集群中,如果使用HPA策略对挂载了EVS卷的负载进行扩容,当新Pod被调度到另一个节点时,会导致之前Pod不能正常读写。
1.19.10及以上版本集群中,如果使用HPA策略对挂载了EVS卷的负载进行扩容,新Pod会因为无法挂载云硬盘导致无法成功启动。
- cce-hpa-controller插件的资源使用量主要受集群中总容器数量和伸缩策略数量影响,通常场景下建议每5000容器配置CPU 500m, 内存1000Mi资源,每1000伸缩策略CPU 100m,内存500Mi。
- 若cce-hpa-controller插件版本低于1.2.11,不支持使用kube-prometheus-stack插件提供Metrics API来实现工作负载弹性伸缩。
操作步骤
步骤 1 在CCE控制台,单击集群名称进入集群。
步骤 2 单击左侧导航栏的“负载伸缩”,选择“CustomedHPA策略”。
- 若插件名称后方显示“未安装”,请单击插件后方的“安装”按钮,根据业务需求配置插件参数后单击“安装”,等待插件安装完成。
- 若插件名称后方显示“已安装”,则说明插件已安装成功。
步骤 3 确认插件已安装成功后,单击右上角“创建CustomedHPA策略”。
步骤 4 填写策略参数。
表 CustomedHPA策略参数配置
参数 参数说明 策略名称 新建策略的名称,请自定义。 命名空间 请选择工作负载所在的命名空间。 关联工作负载 请选择要设置CustomedHPA策略的工作负载。 实例范围 请输入最小实例数和最大实例数。 
策略触发时,工作负载实例将在此范围内伸缩。冷却时间 请输入冷却时间值,单位为分钟。 
策略成功触发后,在此冷却时间内,不会再次触发缩容/扩容,目的是等待伸缩动作完成后在系统稳定且集群正常的情况下进行下一次策略匹配。策略规则 单击在弹出的窗口中设置伸缩策略参数:
规则名称:请输入规则名称,可自定义。
类型:可选择“指标触发”或“周期触发”。
指标触发
触发条件:请选择“CPU利用率”或“内存利用率”,选择“>”或“<”,并输入百分比的值。如下图中所示,则表示CPU利用率瞬时值 > 50% 时,立即执行此规则。
说明利用率 = 工作负载的实际使用量 / 申请量。
执行动作:与上述“触发条件”相对应,达到触发条件值后所要执行的动作,可添加多个执行动作。如下图中所示,当CPU利用率超过50%时将伸缩至5个实例,当超过70%时伸缩至8个实例,当超过90%时在8个实例基础上再增加10个实例。反之,按此规则执行缩容。
是否启用:可单击启用或关闭该策略规则。
周期触发
触发时间:可选择每天、每周、每月或每年的具体时间点,如设置为下图所示,则为每天17:00触发。
执行动作:与上述“触发时间”相对应,达到触发时间值后所要执行的动作。如下图中所示,即每天17:00时将执行减少4个实例的动作。
是否启用:可单击启用或关闭该策略规则。
单击确定后,您可以在“策略规则”列表中查看添加的规则,并可执行开启关闭、编辑、删除等操作。
单击“策略规则”列表下方的“添加策略规则”,可设置多条策略。
步骤 5 设置完成后,单击“创建”。
使用kubectl创建
CustomHPA是一种CRD资源,可按如下YAML定义。
apiVersion: autoscaling.cce.io/v1alpha1 
kind: CustomedHorizontalPodAutoscaler 
metadata: 
  name: customhpa-example 
  namespace: default 
spec: 
  coolDownTime: 3m             # 冷却时间 
  maxReplicas: 10              # 最大实例数 
  minReplicas: 1               # 最小实例数 
  rules: 
    - actions:                          # 策略规则 
        - metricRange: 0,0.1            # 指标范围,表示从0到10% 
          operationType: ScaleDown      # 伸缩类型,ScaleDown表示减少 
          operationUnit: Task           # 操作单位,Task表示个数 
          operationValue: 1             # 每次伸缩的数量 
        - metricRange: 0.1,0.3          # 指标范围,表示从10%到30% 
          operationType: ScaleDown 
          operationUnit: Task 
          operationValue: 2 
      disable: false 
      metricTrigger: 
        hitThreshold: 1 
        metricName: CPURatioToRequest   # 指标名称,CPURatioToRequest为CPU利用率 
        metricOperation: <              # 指标表达式操作符 
        metricValue: 0.3                # 指标表达式右侧取值 
        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:                # 关联负载   
    apiVersion: apps/v1 
    kind: Deployment 
    name: nginx
