更新时间:2024-11-12 GMT+08:00

创建AHPA策略

Kubernetes原生HPA由于是被动触发,在实际应用中存在弹性滞后的问题。AHPA策略即Advanced Horizontal Pod Autoscaling,可根据业务历史指标,识别工作负载弹性周期并对未来波动进行预测,提前进行扩缩容动作,解决原生HPA的滞后问题。

功能介绍

AHPA通过对工作负载的历史指标进行监控,以周为维度进行建模,因此对具有明显周期性的工作负载具有更佳效果。

AHPA启动后拉取指定的工作负载过去一定时间的监控数据(至少一周,至多八周),利用统计学原理分析建模。随后每分钟一次,根据当前时间点的历史监控数据,结合未来一段时间窗口的历史数据,给出当前时间点工作负载的推荐副本数,提前准备Pod应对即将到来的业务量上涨,保障资源供给。

AHPA可与HPA策略以及CronHPA策略共同使用,实现复杂场景下的工作负载伸缩。

AHPA支持根据推荐结果调整HPA策略的最大和最小实例数,或者直接调整Deployment工作负载的副本数。

AHPA调整HPA策略最大和最小实例数的逻辑与CronHPA相同,可参考使用CronHPA调整HPA伸缩范围

前提条件

约束与限制

  • AHPA策略仅支持1.23及以上版本的集群。
  • 1.19.10及以上版本集群中,如果使用HPA策略对挂载了EVS卷的负载进行扩容,新Pod会因为无法挂载云硬盘导致无法成功启动。
  • CCE容器弹性引擎插件的资源使用量主要受集群中总容器数量和伸缩策略数量影响,通常场景下建议每5000容器配置CPU 500m, 内存1000Mi资源,每1000伸缩策略CPU 100m,内存500Mi。
  • AHPA需要对工作负载历史数据进行分析处理,需要额外内存,通常场景下建议每100个AHPA策略配置CPU 100m、内存 300Mi。
  • 创建AHPA策略后,不支持将已关联的工作负载修改为其他工作负载。
  • AHPA策略不支持和CustomedHPA策略同时启用。

使用AHPA策略

  1. 使用kubectl连接集群,详情请参见通过kubectl连接集群
  2. 部署一个示例工作负载。如果已有工作负载可忽略本步骤。推荐使用已收集超过7天以上监控数据的工作负载,AHPA生效需要7天或更久的监控数据。

    kubectl create -f hamster.yaml
    hamster.yaml文件内容如下:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hamster
    spec:
      selector:
        matchLabels:
          app: hamster
      replicas: 2
      template:
        metadata:
          labels:
            app: hamster
        spec:
          containers:
            - name: hamster
              image: registry.k8s.io/ubuntu-slim:0.1
              resources:
                requests:
                  cpu: 100m
                  memory: 50Mi
              command: ["/bin/sh"]
              args:
                - "-c"
                - "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"

  3. 创建AHPA任务。

    kubectl create -f hamster-ahpa.yaml
    hamster-vpa.yaml文件内容如下:
    apiVersion: autoscaling.cce.io/v1alpha1
    kind: AdvancedHorizontalPodAutoscaler
    metadata:
      name: hamster-ahpa
      namespace: default
    spec:
      scaleTargetRef:  # 关联负载,当前支持 Deployment/HPA
        apiVersion: apps/v1
        kind: Deployment
        name: hamster
      minReplicas: 2  # 最小实例数
      maxReplicas: 10  # 最大实例数
      metrics:  # 指标列表,格式和社区HPA一致
      - type: Resource  # 指标源种类,当前只支持 Resource
        resource:
          name: cpu  # 指标源名称,当前只支持 cpu/memory
          target:
            type: Utilization  # 指标源类型,当前只支持 Utilization
            averageUtilization: 50
      predictConfig:
        predictWindowSeconds: 1800
        stabilizationWindowSeconds: 1800
        quantile: "0.97"
      effectiveTime:
      - '* * 11-22 ? * MON-FRI'  # 每周一到周五的11:00 - 22:00 生效
    表1 AHPA关键字段说明

    字段

    是否必填

    说明

    scaleTargetRef

    指定目标Deployment/HPA。

    metrics

    用于配置弹性Metrics,当前支持CPU、Memory两种指标。当前仅支持配置一种metric,不支持CPU和Memory同时配置。

    maxReplicas

    最大扩容实例数,取值范围为0~2147483647。

    minReplicas

    最小缩容实例数,取值范围为0~2147483647。

    predictConfig.predictWindowSeconds

    推荐窗口时间,由当前时间点开始,在窗口范围内的指标历史值将参与推荐副本数计算,取值范围为1~3600。

    predictConfig.stabilizationWindowSeconds

    缩容冷却时间,取值范围为0~3600。

    predictConfig.quantile

    预测分位数,业务指标实际值低于设定目标值的概率,越大表示越保守。取值范围为0~1,支持两位小数,默认值为0.99。推荐取值范围为0.90~0.99。

    effectiveTime

    指定多个cron表达式,AHPA将在cron表达式的并集生效。默认总是生效。

  4. 待新建或已存在的工作负载至少收集7日以上监控数据到AOM中,AHPA即可建模成功并给出副本数推荐,等待AHPA生成副本推荐数,执行以下命令查看AHPA资源详情。

    kubectl get ahpa hamster-ahpa -oyaml

    回显如下:

    apiVersion: autoscaling.cce.io/v1alpha1
    kind: AdvancedHorizontalPodAutoscaler
    metadata:
      creationTimestamp: "2024-10-07T13:11:58Z"
      generation: 2
      name: hamster-ahpa
      namespace: default
      resourceVersion: "15529454"
      uid: e5ffbb01-50b0-4485-8cf5-bc2be884b1ee
    spec:
      effectiveTime:
      - '* * 11-22 ? * MON-FRI'
      maxReplicas: 10
      metrics:
      - resource:
          name: cpu
          target:
            averageUtilization: 50
            type: Utilization
        type: Resource
      minReplicas: 2
      predictConfig:
        predictWindowSeconds: 1800
        quantile: "0.97"
        stabilizationWindowSeconds: 1800
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: hamster
    status:
      conditions:
      - lastTransitionTime: "2024-10-07T13:24:19Z"
        message: the AHPA's model is ready
        reason: ModelIsReady
        status: "True"
        type: ModelAvailable
      - lastTransitionTime: "2024-10-07T13:24:19Z"
        message: the AHPA was able to successfully calculate a replica count
        reason: SucceededRunPrediction
        status: "True"
        type: ScalingActive
      - lastTransitionTime: "2024-10-07T13:24:19Z"
        message: ths ahpa checkpoint is fresh
        reason: CheckpointIsFresh
        status: "True"
        type: CheckpointAvailable
      - lastTransitionTime: "2024-10-07T13:24:19Z"
        message: recommended size matches current size
        reason: ReadyForNewScale
        status: "True"
        type: AbleToScale
      - lastTransitionTime: "2024-10-07T13:24:19Z"
        message: the desired replica count is more than the maximum replica count
        reason: TooManyReplicas
        status: "True"
        type: ScalingLimited
      currentReplicas: 10
      desiredReplicas: 10
      lastScaleTime: "2024-10-07T13:24:19Z"