应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高集群的整体资源利用率,让service中的Pod个数自动调整呢?这就有赖于Horizontal Pod Autoscaling了,顾名思义,使Pod水平自动缩放。这个Object(跟Pod、Deployment一样都是API resource)也是最能体现kubernetes之于传统运维价值的地方,不再需要手动扩容了,终于实现自动化了,还可以自定义指标,没准未来还可以通过人工智能自动进化呢!
利用Horizontal Pod Autoscaling,kubernetes能够根据监测到的CPU利用率(或者在alpha版本中支持的应用提供的metric)自动的扩容replication controller,deployment和replica set。
Horizontal Pod Autoscaler作为kubernetes API resource和controller的实现。Resource确定controller的行为。Controller会根据监测到用户指定的目标的CPU利用率周期性得调整replication controller或deployment的replica数量。
Horizontal Pod Autoscaler如何工作?
Horizontal Pod Autoscaler由一个控制循环实现,循环周期由controller manager中的 --horizontal-pod-autoscaler-sync-period 标志指定(默认是30秒)。
Horizontal Pod Autoscaler仅支持后一种方法:Horizontal Pod Autoscaler被绑定到deployment对象,它设置deployment对象的大小,deployment负责设置底层replication controller的大小。
Horizontal Pod Autoscaler不能使用直接操作replication controller进行滚动更新,即不能将Horizontal Pod Autoscaler绑定到replication controller,并进行滚动更新(例如使用 kubectl rolling-update)。
这不行的原因是,当滚动更新创建一个新的replication controller时,Horizontal Pod Autoscaler将不会绑定到新的replication controller上。
支持多个metric
Kubernetes 1.6中增加了支持基于多个metric的扩缩容。您可以使用autoscaling/v2alpha1API版本来为Horizontal Pod Autoscaler指定多个metric。然后Horizontal Pod Autoscaler controller将权衡每一个metric,并根据该metric提议一个新的scale。在所有提议里最大的那个scale将作为最终的scale。
在Kubernetes 1.6中删除了对这些注释的支持,有利于autoscaling/v2alpha1API。虽然旧的收集自定义metric的旧方法仍然可用,但是这些metric将不可供Horizontal Pod Autoscaler使用,并且用于指定要缩放的自定义metric的以前的注释也不在受Horizontal Pod Autoscaler认可。
Kubernetes 1.6增加了在Horizontal Pod Autoscale r中使用自定义metric的支持。
您可以为autoscaling/v2alpha1API中使用的Horizontal Pod Autoscaler添加自定义metric 。
Kubernetes然后查询新的自定义metric API来获取相应自定义metric的值。
前提条件
为了在Horizontal Pod Autoscaler中使用自定义metric,您必须在您集群的controller manager中将 --horizontal-pod-autoscaler-use-rest-clients 标志设置为true。然后,您必须通过将controller manager的目标API server设置为API server aggregator(使用 --apiserver 标志),配置您的controller manager通过API server aggregator与API server通信。Resource metric API和自定义metric API也必须向API server aggregator注册,并且必须由集群上运行的API server提供。