通过预测Pod的request实现超卖,如果是java感觉容易大面积重启?

原创 吴就业 159 0 2024-03-18

本文为博主原创文章,未经博主允许不得转载。

本文链接:https://wujiuye.com/article/3d178b251d6b4bcaa081d3de628c1251

作者:吴就业
链接:https://wujiuye.com/article/3d178b251d6b4bcaa081d3de628c1251
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。

前面文章提到,我们想基于Google的论文:Autopilot: workload autoscaling at Google,实现Pod的requests预测算法,通过预测接近真实值的requests,再结合基于scheduler-plugins实现负载均衡调度器,来实现计算资源按需付费的Serverless引擎。

这里的超卖是指按limit超卖,不是按request超卖。例如,有一个16g内存的虚拟机,我可以用来部署很多个Pod,对于每个Pod来说,它们都认为自己有16G的最大内存使用。

有其它同事提问,如果是Java应用,这种超卖会不会很容易导致大面积重启?

这就要看requests的预测算法效果了,但如果预测的结果不是特别离谱,也不会出现大面积重启的情况。 如果只是突增预测不准,那也只是个别应用会重启。

举个例子:假如在一个16g内存的节点上,部署了4个request为3g内存的Pod,总共消耗12g内存。然而根据目标负载均衡调度算法,我们可以控制这个节点不会部署request总共超过12g内存的Pod,即75%的目标负载。那么有4g是可以容错算法的偏差的,以及4个Pod的个别Pod流量的正常突增。

正常request的误差假如在1g内,那么4个pod同时实际负载超过request+1g的概率是极低的。

假如有一个pod突增非常严重,那么这个pod会优先被kubelet干掉重启,同时算法会预测新的request,request会重新被预测的非常大,会被调度到资源更多的另一个节点上(或者触发申请新的节点),不会影响其它Pod。

超卖其实就是赌徒思想,堵的就是概率。一个节点上的个别Pod异常突增的概率都很小,同时很多Pod一起异常突增的概率更小。

#云原生

声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。

文章推荐

如何获取Pod的CPU和内存指标,使用Grafana Agent收集指标,上传到Prometheus

本篇是作者在云原生PaaS平台项目中实战可观测能力做的技术调研,将关键技术知识点讲透,涉及:如何获取Pod的cpu和内存指标、使用Grafana Agent收集指标、上传到Prometheus。

如何获取Pod标准输出(stdout)日志,使用Grafana Agent收集,最后上传到Grafana Loki

本篇是作者在云原生PaaS平台项目中实战可观测能力做的技术调研,将关键技术知识点讲透,涉及:如何获取Pod的标准输出(stdout)日志、如何使用Grafana Agent收集日志(附配置案例讲解)、如何将日志上传Grafana Loki。

Kubernetes可观测之Metrics API,什么是Metrics API?

不禁感叹,k8s这个底座设计的太牛了,我们不仅可以通过CRD + 控制器做扩展,还可以自定义APIService去做扩展。k8s,牛啊!

k8s 自定义调度器禁用了某个评分插件,对默认调度器是否有影响?

不会影响到默认调度器,只会影响到scheduler-plugins调度器本身。默认调度器不会因为自定义调度器的配置而改变。

版本回滚是否应该把配置也一起回滚?

最近跟同事们争论的一个问题:一个应用发布平台,版本回滚是否应该支持把配置一同回滚?针对这个事情的讨论,我们分成了两派,一边是赞成派,一边反对派。

我开源了一款k8s命令行工具,提供命令输入提示和自动补全功能

kubectlx是一款基于go-prompt库开发的k8s命令行工具,目的是简化kubectl工具的一些常用命令的使用, 并提供命令输入提示、自动补全。