
# 创建AHPA策略
Kubernetes原生HPA是根据当前指标值被动触发的，只有在检测到当前资源利用率超过预设阈值时才会启动扩缩容操作。这种机制在实际应用中通常会存在弹性滞后的问题，即在负载高峰期，系统反应不够迅速，导致响应延迟增加和用户体验下降；而在负载低谷期，可能会有短暂的资源浪费。为了解决Kubernetes原生HPA的弹性滞后问题，CCE支持使用AHPA（Advanced Horizontal Pod Autoscaling）策略，可根据业务历史指标，识别工作负载弹性周期并对未来波动进行预测，提前进行扩缩容动作。
#### 功能介绍
AHPA通过对工作负载的历史指标进行监控，以周为维度进行建模，因此对具有明显周期性的工作负载具有更佳效果。
AHPA启动后拉取指定的工作负载过去一定时间的监控数据（至少一周，至多八周），利用统计学原理分析建模。随后每分钟一次，根据当前时间点的历史监控数据，结合未来一段时间窗口的历史数据，给出当前时间点工作负载的推荐副本数，提前准备Pod应对即将到来的业务量上涨，保障资源供给。
AHPA可与HPA策略以及CronHPA策略共同使用，实现复杂场景下的工作负载伸缩。
AHPA支持根据推荐结果调整HPA策略的最大和最小实例数，或者直接调整Deployment工作负载的副本数。
AHPA调整HPA策略最大和最小实例数的逻辑与CronHPA相同，可参考[使用CronHPA调整HPA伸缩范围](https://support.huaweicloud.com/usermanual-cce/cce_10_0415.html#cce_10_0415__section858719277369)。
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002088594353.png "点击放大")
#### 前提条件
- 集群中已安装1.5.2及以上版本的[CCE容器弹性引擎](https://support.huaweicloud.com/usermanual-cce/cce_10_0240.html)。
- 集群中已安装云原生监控插件，且开启**监控数据上报至AOM服务** ，详情请参见[云原生监控插件](https://support.huaweicloud.com/usermanual-cce/cce_10_0406.html)。
 
#### 约束与限制
- AHPA策略仅支持1.23及以上版本的集群。
- 如果使用AHPA策略对挂载了EVS卷的负载进行扩容，新Pod会因为无法挂载云硬盘导致无法成功启动。
- CCE容器弹性引擎插件的资源使用量主要受集群中总容器数量和伸缩策略数量影响，通常场景下建议每5000容器配置CPU 500m, 内存1000Mi资源，每1000伸缩策略CPU 100m，内存500Mi。
- AHPA需要对工作负载历史数据进行分析处理，需要额外内存，通常场景下建议每100个AHPA策略配置CPU 100m、内存 300Mi。
- 创建AHPA策略后，不支持将已关联的工作负载修改为其他工作负载。
- AHPA策略不支持和CustomedHPA策略同时启用。
- AHPA策略暂不支持v1.34版本集群的[Pod级别资源规范（PodLevelResources）](https://kubernetes.io/blog/2025/09/22/kubernetes-v1-34-pod-level-resources/)特性。
 
#### 开启AHPA策略
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧选择"插件中心"，找到**CCE容器弹性引擎** 插件，单击"编辑"，在参数配置中找到"AHPA策略"并开启。
   
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002234544452.png "点击放大")
   
   
   
3. 单击"确定"，等待插件更新完成。
 
#### 使用AHPA策略
1. 使用kubectl连接集群，详情请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
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-ahpa.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 生效
   ```
   表1AHPA关键字段说明 
   | 字段                                       | 是否必填 | 说明                                                                                                                                                                              |
   |:---|:---|:---|
   | scaleTargetRef                           | 是    | 指定目标Deployment/HPA。                                                                                                                                                             |
   | metrics                                  | 是    | 用于配置弹性Metrics，当前支持CPU、Memory两种指标。仅支持配置一种metric，不支持CPU和Memory同时配置。                                                                                                               |
   | maxReplicas                              | 是    | 最大扩容实例数，取值范围为0\~2147483647。 须知： 在CCE Turbo集群中，如果使用独享型ELB对接到工作负载，则最大实例数不能超过ELB的后端服务器组配额（默认为500），否则将会导致多余的实例无法添加到ELB后端。 |
   | 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: this 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"
   ```
   
   
5. 不再使用AHPA策略时，可通过以下命令删除： 
   ```
   kubectl delete ahpa hamster-ahpa
   ```
   AHPA 生效期间，会通过ahpacheckpoint的自定义资源保留未来6小时推荐值。若不再需要，可手动删除。
   ```
   kubectl delete ahpacheckpoint hamster-ahpa
   ```
   
   
 
#### 相关文档
- 如果您需要基于CPU使用率、内存使用率进行扩缩容，请参见[创建HPA策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0208.html)。
- 如果您希望使用自定义指标进行弹性伸缩，请参见[创建使用自定义指标的HPA策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0944.html)。
- 如果您期望按照指标（CPU利用率、内存利用率）或周期（每天、每周、每月或每年的具体时间点）进行弹性伸缩，可参考[创建CustomedHPA策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0292.html)。
- 您的应用如果存在资源使用率的周期性变化，且希望按类似Crontab的策略定时扩缩容Pod，可参考[创建CronHPA定时策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0415.html)。
- 若需要基于Pod实际资源使用情况自动调整其资源限制（以保证Pod获得充足的计算资源），可参考[创建VPA策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0921.html)。
 
