3.3 KiB
Horizontal Pod Autoscaling
应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高集群的整体资源利用率,让service中的Pod个数自动调整呢?这就有赖于Horizontal Pod Autoscaling了,顾名思义,使Pod水平自动缩放。这个Object(跟Pod、Deployment一样都是API resource)也是最能体现kubernetes之于传统运维价值的地方,不再需要手动扩容了,终于实现自动化了,还可以自定义指标,没准未来还可以通过人工智能自动进化呢!
Horizontal Pod Autoscaling仅适用于Deployment和ReplicationController(ReplicaSet已经被ReplicationController取代),在V1版本中仅支持根据Pod的CPU利用率扩所容,在v1alpha版本中,支持根据内存和用户自定义的metric扩缩容。
如果你不想看下面的文章可以直接看下面的示例图,组件交互、组件的配置、命令示例,都画在图上了。
Horizontal Pod Autoscaling由API server和controller共同实现。
Metrics支持
在不同版本得API中,HPA autoscale时可以根据以下指标来判断:
- autoscaling/v1
- CPU
- autoscaling/v2alpha1
- 内存
- 自定义metrics
- kubernetes1.6起支持自定义metrics,但是必须在kube-controller-manager中配置如下两项:
--horizontal-pod-autoscaler-use-rest-clients=true
--api-server
指向kube-aggregator,也可以使用heapster来实现,通过在启动heapster的时候指定--api-server=true
。查看kubernetes metrics
- kubernetes1.6起支持自定义metrics,但是必须在kube-controller-manager中配置如下两项:
- 多种metrics组合
- HPA会根据每个metric的值计算出scale的值,并将最大的那个指作为扩容的最终结果。
使用kubectl管理
Horizontal Pod Autoscaling作为API resource也可以像Pod、Deployment一样使用kubeclt命令管理,使用方法跟它们一样,资源名称为hpa
。
kubectl create hpa
kubebectl get hpa
kubectl describe hpa
kubectl delete hpa
有一点不同的是,可以直接使用kubectl autoscale
直接通过命令行的方式创建Horizontal Pod Autoscaler。
用法如下:
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS
[--cpu-percent=CPU] [flags] [options]
举个例子:
kubectl autoscale deployment foo --min=2 --max=5 --cpu-percent=80
为Deployment foo创建 一个autoscaler,当Pod的CPU利用率达到80%的时候,RC的replica数在2到5之间。该命令的详细使用文档见https://kubernetes.io/docs/user-guide/kubectl/v1.6/#autoscale 。
注意 :如果为ReplicationController创建HPA的话,无法使用rolling update,但是对于Deployment来说是可以的,因为Deployment在执行rolling update的时候会自动创建新的ReplicationController。
参考
HPA说明:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
HPA详解:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
kubectl autoscale命令详细使用说明:https://kubernetes.io/docs/user-guide/kubectl/v1.6/#autoscale
自定义metrics开发:https://github.com/kubernetes/metrics