1. HPA 工作原理

Pod 弹性伸缩器(HPA)是 Kubernetes 的一项功能,可以对您的应用进行自动扩容和自动缩容。

1.1 为什么要使用 HPA?

使用 HPA,您可以自动缩放在 Replication Controller,Deployment 或者 Replica Set 中的 Pod。HPA 将自动缩放正在运行的 Pod 的数量,以实现最高效率。HPA 中影响 Pod 数量的因素包括:

  • 用户定义的允许运行的 Pod 的最小和最大数量。
  • 资源指标中报告的观察到的 CPU 或内存使用情况。
  • 第三方指标应用程序(例如 Prometheus,Datadog 等)提供的自定义指标。

HPA 通过以下方式改善您的服务:

  • 释放因过多的 Pod 而浪费的硬件资源。
  • 按照应用需要的性能,自动提高或降低 Pod 数量。

1.2 HPA 是如何工作的?

HPA 是通过循环控制来实现的,其循环周期由下面的 kube-controller-manager 启动参数控制:

参数 默认值 描述
–horizontal-pod-autoscaler-sync-period 30s HPA 审核应用使用资源情况或自定义指标的频率。
–horizontal-pod-autoscaler-downscale-delay 5m0s 缩容操作完成后,HPA 必须等待多长时间才能进行另外一次缩容操作。
–horizontal-pod-autoscaler-upscale-delay 3m0s 扩容操作完成后,HPA 必须等待多长时间才能进行另外一次扩容操作。

2. 创建nginx资源

要使用HPA创建的负载需要配置资源限制
资源预留为容器启动时必须占用的资源
资源限制为容器最大使用量

3. 通过 Rancher UI 管理 HPA

官方文档

登录rancher点击资源创建HPA

根据实际情况配置相关参数,这里模拟测试cpu使用大于%1随即触发

等待hpa资源激活

4. 模拟压测

1
while true; do curl http://192.168.10.21:31274; done

查看hpa资源情况,已经超过阈值使用量

1
2
3
root@node02:~# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-9fmv8 Deployment/nginx 12%/1% 1 3 3 30m

可以看到已经达到最大预期3个pod

停止压测,稍等几分钟后,查看资源使用情况将为0%

缩容的统计窗口时间为5分钟,k8s会评估此窗口内的信息,以此消除突发的指标波动产生的神经质操作。

5. 总结

rancher2.2.2升级到2.3.2后,通过rancherUI配置HPA测试正常通过。