
# HPA弹性扩缩容
#### 简介
本章节主要指导用户在CCI 2.0配置使用HorizontalPodAutoscaler（HPA，Pod水平自动扩缩容），自动更新无状态负载资源， 目的是自动扩缩无状态负载以满足需求。
HPA会定期调整无状态负载的所需规模，以匹配期望的指标， 例如，平均CPU利用率、平均内存利用率或您指定的任何其他自定义指标。
#### 如何配置HPA
1. 登录[云容器实例 CCI2.0](https://console.huaweicloud.com/cci2.0/?#/cci/cluster/list)控制台。
2. 单击左侧导航栏"负载管理"，单击"无状态负载"中的某个负载进入负载详情界面。 
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002207028196.png "点击放大")
   
   
   
3. 单击"弹性伸缩"。
4. 创建HPA策略可以通过以下两种方式，控制台方式和YAML文件方式。 
   - 方式一：通过控制台创建HPA策略。
     1. 单击"创建HPA策略"，根据界面提示补充相关信息。相关配置项如[表1]所示。
         表1创建HPA策略 
        | 配置项    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
        |:---|:---|
        | 名称     | 自定义HPA策略名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
        | 命名空间   | 选择指定命名空间。如需新建请单击"创建命名空间"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
        | 关联工作负载 | 系统会自动匹配关联工作负载。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
        | 实例范围   | HPA可伸缩的Pod实例数量上下限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
        | 伸缩配置   | - 系统默认 选择系统默认则采用K8S社区推荐的默认行为进行负载伸缩。   - 自定义 选择自定义则用户可以自定义稳定窗口、步长、优先级等策略实现更灵活的配置，未配置的参数将采用K8S社区推荐的默认值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
        | 系统策略   | - 指标： 触发弹性伸缩的监控数据类型，支持选择"CPU 利用率"或"内存利用率"。   说明： 计算方式：利用率 = 工作负载容器组（Pod）的实际使用量 / 申请量 - 期望值：您希望工作负载在运行时的"理想资源利用率"。期望值不仅代表目标利用率，系统还会以它为核心，通过公式**向上取整 (当前指标值 / 期望值 × 当前实例数) 来计算需要伸缩的目标实例数。** *计算示例：* 假设当前实例数为2，期望值为50%。若当前实际指标值升高至85%，系统会按公式 向上取整 (85% / 50% × 2) = 向上取整(3.4)，得出此时需要将实例数伸缩为**4**个。     - 容忍范围：为了防止指标的短暂波动导致系统频繁扩缩容（即"震荡"），系统引入了容忍度机制（默认为0.1，即10%）。 - **免扩缩容区间：** 实际指标在 \[期望值 × (1 - 容忍度), 期望值 × (1 + 容忍度)\] 这个范围内浮动时，系统认为当前状态可以接受，**不会触发**计算和扩缩容动作。  - *运行示例：* 当期望值为50%，容忍度为0.1。则免扩缩容区间为45%到55%。只有当实际利用率持续大于55%（扩容）或持续小于45%（缩容）时，才会真正执行上述期望值的伸缩计算。   当指标值大于缩容阈值且小于扩容阈值时，不会触发扩容或缩容。**阈值仅在1.15及以上版本的集群中支持**。    须知： 可以设置多条系统策略。 |
           
        
      
   
   - 方式二：通过YAML创建HPA策略。
     1. 单击"YAML创建"创建HPA策略。 ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002481660092.png "点击放大")
        
        创建HPA的YAML示例如下：
        ```
        kind: HorizontalPodAutoscaler
        apiVersion: cci/v2
        metadata:
          name: alpha-test-hpa
          namespace: cci-test              # 命名空间
        spec:
          scaleTargetRef:
            kind: Deployment
            name: nginx
            apiVersion: cci/v2
          minReplicas: 1                   # 最小副本数
          maxReplicas: 5                   # 最大副本数
          metrics:
            - type: Resource
              resource:
                name: memory               # 支持CPU、Memory资源指标
                target:
                  type: Utilization        # 扩缩类型
                  averageUtilization: 50   # 触发扩缩的平均使用率
            - type: Resource
              resource:
                name: cpu
                target:
                  type: Utilization
                  averageUtilization: 50
        ```
        
      
   
   
   
   
5. 进入负载详情，选择负载内的某个Pod单击"查看终端"按钮进入Pod终端，输入命令： 
   ```
   while true; do curl 127.0.0.1:80; done
   ```
   等待HPA触发，负载扩容并上报事件。
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002262397749.png "点击放大")
   
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002227489506.png "点击放大")
   
   
   
 
