Kubernetes HPA Controller工作原理
HPA Controller 介绍
关于Kubernetes Horizontal Pod Autoscaler(简称HPA)的概念和使用介绍,请参考以下官方文档链接,在这里我不再赘述。
- https://kubernetes.io/docs/user-guide/horizontal-pod-autoscaling/
- https://github.com/kubernetes/community/blob/master/contributors/design-proposals/horizontal-pod-autoscaler.md
- https://kubernetes.io/docs/user-guide/horizontal-pod-autoscaling/walkthrough/
- http://blog.kubernetes.io/2016/07/autoscaling-in-kubernetes.html
- http://markswanderingthoughts.nl/post/148836326495/building-your-own-horizontal-pod-autoscaler-for
HPA Controller 工作原理
- K8s通过HPA,基于获取到的metrics(CPU utilization, custom metrics) value,对rc, deployment管理的pods进行自动伸缩。
截止到Kubernetes 1.6,Release特性中仅支持CPU utilization这一
resource metrics
,对custom metrics
的支持目前仍在alpha阶段,请知晓。
-
HPA Controller周期性(默认每30s一次,可通过kube-controller-manager的flag
--horizontal-pod-autoscaler-sync-period
进行设置)的调整对应的rc, deployment中的replicas数量,使得指定的metrics value能匹配用户指定的target utilization value。 -
在每个HPA Controller的处理周期中,kube-controller-manager都去查询HPA中定义的metrics的utilization。查询方式根据metric类型不同而不同:
- 如果metric type是resource metrics,则通过resource metrics API查询。
- 如果metric type属于custom metrics,则通过custom metrics API查询。
-
计算伸缩比例算法:
-
对于resource metrics,比如CPU,HPA Controller获取HPA中指定的metrics,如果HPA中设定了target utilization,则HPA Controller会将获取到的metrics除于对应的容器的resource request值作为监测到的当前pod的resource utilization。如此计算完所有HPA对应的pods后,对该resource utilization values取平均值。最后将平均值除于定义的target utilization,得到伸缩的比例。
注意:如果HPA对应的某些pods中的容器没有定义对应的resource request,则HPA不会对这些pods进行scale。
-
对于custome metrics,HPA Controller的伸缩算法几乎与resource metrics一样,不同的是:此时是根据custome metrics API查询到的metrics value对比target metics value计算得到的,而不是通过utilization计算得到的。
-
-
HPA与rc, deployment, pod的关系如下图所示。
- HPA通过Scale sub-resource接口,对RC和Deployment的replicas进行控制。
- HPA最终对Pod副本数的控制终归还是通过RC和Deployment控制器。
HPA Controller有两种方式获取metrics:
- direct Heapster access: 用于对resource metrics的监控,需要提前在kube-system namespace中部署Heapster。
- REST client access: 用于对custom metrics的监控,需要设置kube-controller-manager的
--horizontal-pod-autoscaler-use-rest-clients
flag为true。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
我是怎么阅读kubernetes源代码的?
源代码中包含了所有信息。写开源软件,从文档和其他地方拿到的是二手的信息,代码就是最直接的一手信息。代码就是黑客帝国中neo看到的世界本源。 文本并不是代码本身。文本只是在人类可读的模式和编译器可解析之间做了一个折中。代码的本质是具有复杂拓扑的数据结构,就像树或者电路一样。所以读代码的过程是在脑中构建出这个世界,所谓脑补是也。 阅读好的代码是一种享受。我最喜欢阅读的是redis的代码,用C写的,极端简洁但又威力强大。几句话就把最高效、精妙的数据结构完成出来,就像一篇福尔摩斯的侦探小说。在看的时候我常常想,如果让我实现这个功能,是否能像他这么简单高效? 以阅读k8s其中的一个模块,scheduler为例子,来讲讲我是怎么读代码的 从用户的角度出发,scheduler模块是干什么的? scheduler是k8s的调度模块,做的事情就是拿到pod之后在node中寻找合适的进行适配这么一个单纯的功能。实际上,我已经多次编译和构建这个程序并运行起来。在我的脑中,sheduler在整个系统中是这样的: scheduler作为一个客户端,从apiserver中读取到需要分配的pod,和拥有的node,...
- 下一篇
kubernetes+docker监控之简介
kubernetes+docker监控 Docker的监控原则:根据docker官方声明,一个容器不建议跑多个进程,所以不建议在容器中使用agent进行监控(zabbix等),agent应该运行在宿主机,通过cgroup或是docker api获取监控数据。 1、监控分类介绍: ①、自行开发: 通过调用docker的api接口,获取数据、处理、展示,这里不做介绍。 例如: 1)、爱奇艺参照cadvisor开发的dadvisor,数据写入graphite,等同于cadvisor+influxdb,爱奇艺的dadvisor并没有开源 ②、Docker——cadvisor: Google的 cAdvisor 是另一个知名的开源容器监控工具。 只需在宿主机上部署cAdvisor容器,用户就可通过Web界面或REST服务访问当前节点和容器的性能数据(CPU、内存、网络、磁盘、文件系统等等),非常详细。 默认cAdvisor是将数据缓存在内存中,数据展示能力有限;它也提供不同的持久化存储后端支持,可以将监控数据保存、汇总到Google BigQuery、InfluxDB或者Redis之上。 新的K...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路