AWS-EKS-17--Horizontal Pod Autoscaler(HPA)
摘要
-
本文介绍在EKS集群下创建HPA的方法
-
参考资料:
Horizontal Pod Autoscaler 简介
-
Horizontal Pod Autoscaler(HPA)基于资源 CPU 利用率自动调整 deployment、replication controller 或者 replica 中 pod 的数量,这有助于您的应用程序进行扩展以满足增长的需求,或在不需要资源时进行缩减,从而释放出节点用于其他应用程序。当您设置目标 CPU 利用率百分比时,HPA 扩展或缩减应用程序来尝试满足该目标。
-
Kubernetes 本身已经包含了 HPA 的 controller,所以不需要额外的安装或部署。
-
HPA 需要获取 metrics 信息,metrics 信息需要从 Metrics Server 中获取或者从第三方软件获取,关于如何在EKS中安装Metrics Server可以查看 AWS-EKS-11--安装 Kubernetes Metrics Server。
-
HPA 会周期性(默认15秒)查询目标资源的使用情况,然后和 HPA 中定义的值做比较,并根据比较结果相应的调整 pod 数量。
-
创建pod时,必须为其设定cpu资源,用于与目标值进行比较,目前v2版本的HPA除了支持CPU的对比,还可以设定其它指标,具体参考HorizontalPodAutoscaler 演练。
示例
参考官方示例
-
定义资源yaml
1 | # php-apache.yaml |
-
部署yaml
1 | $ k apply -f php-apache.yaml |
-
创建HPA
1 | # 创建了一个叫“php-apache”的 HPA,与 deployment 的名称相同,可以用 --name='hpa-name' 指定hpa的名称 |
-
查看HPA
1 | $ k get hpa |
-
测试HPA
1 | # 通过运行容器为 Web 服务器创建负载 |
-
此时
Ctrl+C
中断测试容器,过一会查看hpa和pod的情况,可以看到平均 CPU 负载已经降到 0 了,但 REPLICAS 还是 8 个,不会立即降低,不要着急,大约5分钟左右 REPLICAS 最终变为 1
1 | $ k get hpa |
删除HPA
1 | $ k delete hpa php-apache |