
# 配置FederatedHPA策略以控制扩缩速率
#### 为什么需要控制扩缩速率
HPA controller默认的扩缩容总原则是：快速扩容，低速缩容。然而，若仅依靠配置稳定窗口时长，在窗口时长过后即失去了对扩缩容速率的控制能力，无法真正实现对扩缩容速率的准确控制。您可以通过配置负载伸缩策略的YAML文件中spec的behavior结构，来更准确灵活地控制FederatedHPA的自动扩缩速度。该结构支持为每个FederatedHPA策略独立配置扩缩容速率，以及为扩容与缩容配置不同的速率。
#### 操作步骤
针对不同的业务场景，本小节提供常见的behavior结构配置方法。在其他业务场景下，如您希望缓慢扩容、快速缩容等，可以参考下述对behavior结构的解释，针对scaleUp与scaleDown进行配置。
- 场景一：尽快扩容 如果您希望在业务高峰期能尽快扩容，可以配置较大的Percent值。
  ```
  behavior: 
    scaleUp: 
      policies: 
      - type: Percent 
        value: 900 
        periodSeconds: 60
  ```
  本示例中Percent值为900，也就是说，每个扩缩周期都按照（1 + 900%）= 10倍的速率进行扩容。例如，若工作负载中Pod数从1开始，那么在上述配置下，每隔60秒的扩容Pod数的变化如下：1 \> 10 \> 100 \> ... 。需要注意的是，扩缩后的Pod数量不能超过FederatedHPA策略配置的最大Pod数。
  Percent类型对资源消耗的波动较大，如果您希望资源消耗可控，可以按绝对数---Pods类型来配置。
  ```
  behavior: 
    scaleDown: 
      policies: 
      - type: Pods 
        value: 10 
        periodSeconds: 60
  ```
  本示例中Pods值为10，也就是说，每个扩缩周期都按照增加10个Pod的增量进行扩容。例如，若工作负载中Pod数从1开始，那么在上述配置下，每隔60秒的扩容Pod数的变化如下：1 \> 11 \> 21 \> ... 。需要注意的是，扩缩后的Pod数量不能超过FederatedHPA策略配置的最大Pod数。
  

- 场景二：逐步缩容 如果您希望在渡过业务高峰期后，对工作负载的缩容速率能更加缓慢，以提高应用的可靠性，可以配置较小的Pod值与较大的periodSeconds值。
  ```
  behavior: 
    scaleDown: 
      policies: 
      - type: Pods 
        value: 1 
        periodSeconds: 600
  ```
  本示例中Pods值为1，periodSeconds值为600，也就是说：缩容的周期为600秒，每次缩容减少1个Pod。假如 pod 最开始数量为 100，每隔600秒的缩容Pod数的变化如下：100 \> 99 \> 98 \> ... 。极端情况下，若希望工作负载不进行自动缩容，可以将Percent值或Pods值配置为0。
  

- 场景三：默认速率 若不对behavior进行配置，则FederatedHPA策略默认的配置为：
  ```
  behavior: 
    scaleDown: 
      stabilizationWindowSeconds: 300 
      policies: 
      - type: Percent 
        value: 100 
        periodSeconds: 15 
    scaleUp: 
      stabilizationWindowSeconds: 0 
      policies: 
      - type: Percent 
        value: 100 
        periodSeconds: 15 
      - type: Pods 
        value: 4 
        periodSeconds: 15
  ```
  默认配置中，扩缩容的周期为15秒，每个扩缩周期都按照（1 + 100%）= 2倍的速率进行扩容或缩容，每次缩容的Pod数为4。
  
 
