容器运行时技术内幕 (7) 5个明星同时出轨的背后故事
上一期我们提到,kubernetes可以通过ExecAction, TcpSocketAction和HttpGetAction三种动作,来监控一个容器是否存活,是否处于就绪状态可以对外提供服务。
我们还提到另一个话题——容器的弹性伸缩。
让我们回忆起小X学习容器的初心:
由于某晗和某亦凡官宣了恋情,某社交平台的服务器扛不住崩溃了,重构后号称可以支持5个明星同时出轨的流量。
实际上,哪怕是这样一篇“情况通报”,都可以让承载业务的VM或容器的CPU占比超过警戒线。
这就需要Kubernetes的一个重要功能——弹性伸缩。
学过自动控制的同学,都知道这么一张图:
以特某拉的定速巡航功能为例,当车辆上坡时,电机的电流增加,转速下降,监控系统监控到这一点,提升给电机供电的有效电压 (实际上是占空比duty cycle,方老师是学自动化出身,学过电力拖动课的同学不要在这杠),从而让电机输出更大的功率,能够支撑车辆克服空气阻力的同时,还能以同样的速度爬坡。
同样地,当某晗和吴某凡宣布两个人在一起的时候,渣浪提供服务的container的CPU使用率会提升。此时,kubernetes检测到这一现象,分配更多的pod,分担业务访问,直到发生5名明星出轨到达规格上限,流量过大被迫熔断。
学过自动化的同学可能知道,检测电机电压和电流的手段是传感器。那么,有没有一种传感器可以安装在容器集群中,检测每个容器的工作状态呢?
答案是肯定的:
这就是容器性能监控的盗火者——Prometheus。
当然,我们需要在开发应用时,考虑到弹性伸缩,在性能关键埋点调用Prometheus的库函数方便调用。
以JAVA为例,https://github.com/prometheus/client_java 这个地方可以看到详细的使用文档。当然,除了JAVA以外,Prometheus还提供了python、go、ruby、Node.js等多种语言可以使用的SDK库。
Prometheus能监控CPU利用率、应用延迟、网络带宽等关键参数,将应用的性能数据(metrics)记录在一个时间序列数据库(TSDB)中。
但是,Prometheus采集的数据,Kubernetes并不能正确地接管处理,中间还需要一个胶合层,或者说,适配层,它的名字叫k8s-prometheus-adpater,可以将Prometheus采集的性能数据传递给kubernetes的容器调度模块HPA(Horizontal Pod Autoscaler)。
如果将prometheus比作传感器,那么,HPA就是自动控制系统的控制器。它能够根据用户定制的策略,驱动kubelet执行容器的伸缩。这样,我们就得到了下面这张图:
再让我们对比开头的图:
我们可以看出,控制器 = HPA,被控对象 = Pod,测量装置 = Prometheus。
给定量是HPA的配置,扰动是外界波动的的请求(比如,有5名明星同时出轨),输出量是稳定的客户响应时延。
通过Prometheus和HPA的配合,我们建立在k8s上的系统就能够经受5名明星同时出轨的考验啦!
今天还遗留了一个问题。学过自动控制的同学都知道,控制器的核心是控制算法,如PID(比例,积分和微分)算法。那么,HPA作为Kubernetes弹性伸缩的控制器,它的控制算法是什么样的呢?
请看下期分解。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-15
,如有侵权请联系 [email protected] 删除
网址:容器运行时技术内幕 (7) 5个明星同时出轨的背后故事 http://c.mxgxt.com/news/view/1397655
相关内容
容器运行时技术内幕 (7) 5个明星同时出轨的背后故事揭秘幕后:探寻舞台背后的技术故事
出轨男明星背后的故事与反思探究
整容大师欲出“技术丛书” 揭200明星整容内幕
明星人物背后的故事与技术支持
《鱿鱼游戏2》的明星们:从荧幕到时尚,背后的故事你不知道的内幕
摄影师冒死独家曝光行业选秀内幕及女星成名背后的故事
明星背后的故事——揭秘明星专题网站运作
高科技美容仪器:明星背后的秘密武器
篮球明星小报:聚焦赛场之星成长轨迹、幕后故事与未来挑战