# 创建HPA策略
随着应用访问请求量的波动，静态预设的服务实例数量往往难以满足高效、弹性的资源利用需求。比如，在高峰期，如果应用实例数量不足，可能会导致响应延迟增加、用户体验下降；而在低谷期，过多的实例又会造成资源浪费。
Kubernetes提供了HPA策略（Horizontal Pod Autoscaling）对实例数量进行水平自动伸缩的。HPA策略通过监控应用程序的负载，如CPU使用率、内存使用情况等指标，能够自动增加或减少Pod的数量，以适应当前的工作负载，从而确保应用性能的稳定性和资源利用的高效性。
#### 前提条件
使用HPA需要安装能够提供Metrics API的插件，您可根据集群版本和实际需求选择其中之一：
- [Kubernetes Metrics Server](https://support.huaweicloud.com/usermanual-cce/cce_10_0205.html)：提供基础资源使用指标，例如容器CPU和内存使用率，默认采集周期为60s。所有集群版本均可安装。
- [云原生监控插件](https://support.huaweicloud.com/usermanual-cce/cce_10_0406.html)：使用HPA需要开启本地数据存储。该插件支持v1.17及以后的集群版本，默认采集周期为15s。
  - 根据基础资源指标进行弹性伸缩：需将Prometheus注册为Metrics API的服务，详见[通过Metrics API提供基础资源指标](https://support.huaweicloud.com/usermanual-cce/cce_10_0406.html#cce_10_0406__section17830202915211)。如果集群中已安装[Kubernetes Metrics Server](https://support.huaweicloud.com/usermanual-cce/cce_10_0205.html)，该插件默认提供Metrics API，无需重复注册。
  
  - 根据自定义指标进行弹性伸缩：除了将Prometheus注册为Metrics API的服务，还需要将自定义指标聚合到Kubernetes API Server，详情请参见[使用自定义指标创建HPA策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0406.html#cce_10_0406__section11927514174016)。
   
- [Prometheus（停止维护）](https://support.huaweicloud.com/usermanual-cce/cce_10_0221.html)：如果集群中未安装[Kubernetes Metrics Server](https://support.huaweicloud.com/usermanual-cce/cce_10_0205.html)，需手动为Prometheus创建Metrics API，详见[通过Metrics API提供资源指标](https://support.huaweicloud.com/usermanual-cce/cce_10_0221.html#cce_10_0221__section13409107262)。该插件仅支持v1.21及之前的集群版本。在1.21以上版本集群中已经停止维护该插件。在CCE集群中不推荐使用该插件，推荐使用[云原生监控插件](https://support.huaweicloud.com/usermanual-cce/cce_10_0406.html)或者[Kubernetes Metrics Server](https://support.huaweicloud.com/usermanual-cce/cce_10_0205.html)。
 
#### 约束与限制
- HPA策略仅支持1.13及以上版本的集群创建。
- 1.19.10以下版本的集群中，如果使用HPA策略对挂载了EVS卷的负载进行扩容，当新Pod被调度到另一个节点时，会导致之前Pod不能正常读写。 1.19.10及以上版本集群中，如果使用HPA策略对挂载了EVS卷的负载进行扩容，新Pod会因为无法挂载云硬盘导致无法成功启动。
  
- 当集群中存在Pod通过CCE突发弹性引擎（对接CCI）插件弹性到CCI 2.0上时，Kubernetes Metrics Server插件无法采集这部分Pod的指标数据，可能导致HPA无法正常工作。为确保HPA功能正常可用，请使用云原生监控插件替换Kubernetes Metrics Server插件，详情请参见[弹性伸缩](https://support.huaweicloud.com/usermanual-cci2/cci_01_0039.html)。
 
#### 创建HPA策略
1. 在CCE控制台，单击集群名称进入集群。
2. 单击左侧导航栏的"工作负载"，在目标工作负载的操作列中单击"更多 \> 弹性伸缩"。 
   图1工作负载弹性伸缩   
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000001781643281.png "点击放大")
   
   
3. 策略类型选择"HPA+CronHPA策略"，并启用HPA策略，填写HPA策略配置参数。 
   本文中仅介绍HPA策略，如需启用CronHPA策略，请参见[创建CronHPA定时策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0415.html)。
   图2启用HPA策略   
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002485618742.png "点击放大")
   
    表1HPA策略配置 
   | 参数                       | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   |:---|:---|
   | 实例范围                     | 请输入最小实例数和最大实例数。 策略触发时，工作负载实例将在此范围内伸缩。 须知： 在CCE Turbo集群中，如果使用独享型ELB对接到工作负载，则最大实例数不能超过ELB的后端服务器组配额（默认为500），否则将会导致多余的实例无法添加到ELB后端。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 冷却时间                      | 请输入缩容和扩容的冷却时间，单位为分钟，**缩容扩容冷却时间不能小于1分钟**。 **该设置仅在1.15到1.23版本的集群中显示。** 策略成功触发后，在此缩容/扩容冷却时间内，不会再次触发缩容/扩容，目的是等待伸缩动作完成后在系统稳定且集群正常的情况下进行下一次策略匹配。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 伸缩配置                   | **该设置仅在1.25及以上版本的集群中显示。** - 系统默认：采用社区推荐的默认行为进行负载伸缩，详情请参见[社区默认行为说明](https://kubernetes.io/zh-cn/docs/concepts/workloads/autoscaling/horizontal-pod-autoscale/#default-behavior)。  - 自定义：自定义扩/缩容配置的稳定窗口、步长、优先级等策略，实现更灵活的配置。未配置的参数将采用社区推荐的默认值。 - 禁止扩/缩容：选择是否禁止扩容或缩容。  - 稳定窗口：需要伸缩时，会在一段时间（设定的稳定窗口值）内持续检测，如在该时间段内始终需要进行伸缩（不满足设定的指标期望值）才进行伸缩，避免短时间的指标抖动造成异常。  - 步长策略：扩/缩容的步长，可设置一定时间内扩/缩容Pod数量或百分比。在存在多条策略时，可以选择使Pod数量最多或最少的策略。     |
   | 系统策略                     | HPA在计算扩容、缩容实例数时，根据资源利用率的当前指标值、期望值和当前实例数进行目标实例数的计算，当前实例数则会选择最近5分钟内实例数的最大值。公式如下： **期望实例数 = 向上取整\[当前实例数 \* ( 当前的指标值 / 期望值 )\]** - 指标：可选择"CPU利用率"或"内存利用率"。 **利用率 = 工作负载所有Pod实际资源使用量的平均值 / 资源申请量（Request）**   - 期望值：请输入期望资源平均利用率。  - 容忍范围：指标处于范围内时不会触发伸缩，期望值必须在容忍范围之间。                                                                                                                                                                                                                                                        |
   | 自定义策略（仅在1.15及以上版本的集群中支持） | 说明： 使用自定义策略时，集群中需要安装支持采集自定义指标的插件（例如Prometheus），且工作负载需正常上报并采集自定义指标。 采集自定义指标的方法及示例请参见[使用云原生监控插件监控自定义指标](https://support.huaweicloud.com/usermanual-cce/cce_10_0373.html)。 - 自定义指标名称：自定义指标的名称，输入时可根据联想值进行选择。  - 指标来源：在下拉框中选择对象类型，可选择"Pod"。  - 期望值：Pod支持指标为平均值。通过向上取整（当前指标值 / 期望值 × 当前实例数）来计算需要伸缩的实例数。 说明： HPA在计算扩容、缩容实例数时，会选择最近5分钟内实例数的最大值。   - 容忍范围：指标处于范围内时不会触发伸缩，期望值必须在容忍范围之间。                                                                                        |
      
   
   
4. 设置完成后，单击"创建"。
 
#### 常见问题
- 容器监控的内存使用率与HPA弹性伸缩的内存使用率在计算方式上存在差异，可能出现伸缩预期不符的情况，详情请参见[容器监控的内存使用率与实际弹性伸缩现象不一致](https://support.huaweicloud.com/cce_faq/cce_faq_00454.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)。
- 如果资源使用率虽有周期性变化，但难以用固定规则定义，推荐使用AHPA策略，它能根据业务历史指标自动识别水位周期并完成扩缩容，详情请参见[创建AHPA策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0934.html)。
- 您可以将HPA与节点自动伸缩功能搭配使用，在集群节点资源不足时，实现节点的自动扩缩，详情请参见[使用HPA+CA实现工作负载和节点联动弹性伸缩](https://support.huaweicloud.com/usermanual-cce/cce_10_0300.html)。
- 如果该应用使用GPU资源，您可以通过GPU监控指标为使用GPU资源的工作负载配置弹性伸缩（HPA），详情请参见[基于GPU监控指标配置工作负载弹性伸缩](https://support.huaweicloud.com/usermanual-cce/cce_10_0844.html)。
- 如果该应用使用ELB对外提供访问，您可以根据ELB的监控指标（如QPS）进行弹性伸缩，详情请参见[基于ELB监控指标的弹性伸缩实践](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_00283.html)。
- 如果该应用使用Nginx Ingress实现流量路由转发，您可以根据Nginx Ingress监控指标进行弹性伸缩，详情请参见[通过Nginx Ingress对多个应用进行弹性伸缩](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_10038.html)。
 
