PowerShell免费软件

微服务,【容器亚健康状态】问题,研究和解决

---【前言】---

我问:“程序有『亚健康状态』吗?”

一个正常的人,应该这样回答:“什么?程序,亚健康。。。?你神经病吧?我只听说过人,有亚健康状态。”

 

实际上,‘程序’是有『亚健康状态』的,这和人有『湿气』道理一样。

『亚健康状态』是指,程序处于【正常】和【非正常】之间,老司机都知道,

最明显的表现就是:程序表面输入/输出正常,但卡顿,或后台在疯狂报错。

细探原因,实际上是千奇百怪的。这里不做展开。

既然程序有亚健康状态,那么容器内运行的程序,也应该有亚健康状态,也很合理。这就是标题说的『容器亚健康状态』问题。

 

https://www.cnblogs.com/cmt/p/14083631.html

上述『容器亚健康状态』问题,在博客园特例中,我总结如下:

最开始,后端数据库有问题了,导致页面pod报错。后端数据库修复后,页面表现有时很快,有时卡顿,估计某个pod有问题,没恢复过来。但由于pod很多,无法立马找出问题pod。猜测cpu100%,但是容器探活正常。或探活有些慢但能通过。

 

---【『容器亚健康状态』问题分析】---

老司机都知道,细探原因,实际上是千奇百怪的。

又因为部分容器正常,所以你必须收集所有容器的log。这些『亚健康状态容器』,也是能通过容器探活的,有时候我们并不具备详细探究的条件。这就好像医生知道从海鲜市场里出来的很多病人肺有问题了,用常规的药后也治不好。而你急着解决,手头上还没有【基因测序】这些个超级手段。

---【k8s的解法】---

假设100个容器里头,有1个『亚健康状态容器』,这个容器还是『无症状』或『症状不明显,能过探活』这种,这个问题是不容易解决的。

K8s 1.15版本,提供了滚动重启的命令。但我赶脚相对而言不轻量。

需要说明的是:

定时重启能缓解和部分解决这种问题,不能解决所有问题。要想解决所有问题,还得靠压测,和看日志,还有调试。

---【k4t的解法】---

K4t是我业余时间开发的,容器编排系统。

博客园的问题,提醒了我。我看了k8s的解决方案后,琢磨出了这个问题更好的方案:

即『杀死容器老奶奶』功能,或者叫『最老容器_定时重启间隔』参数。

这个值默认是7天,最小是1分钟。值绑定在应用上。

这个参数假设生存时间越长的容器副本,越会出问题。而新run的容器副本,假设没问题。

也就是说超过这个阈值(1分钟---7天),就会优雅的重启1个容器副本。

优雅的重启1个容器副本是指:
1从dns,和反向代理中摘除这个容器入口。那么就没有新流量进来了。
2超过n分钟后。这个时间可以自定义。目的是等待老http session,结束。
3再杀死容器,重启。

若遇到上述『容器亚健康』问题。则调小这个值即可。等过一段时间,容器都优雅重启了后,再调整回来即可。当然了,我的k4t是有办法查看,每个容器的启动时间的。

 

注意:

l 定时重启并不能解决所有问题。要想解决所有问题,还得靠压测,和看日志,还有调试。

l 此参数不能理解成『单个容器最大生存时间』。设你的应用有10个容器副本,第一个容器会在7天后重启,第10个容器在70天才会重启。

这个参数,看起来跟滚动重启类似吗?

K8s有这功能吗???

 

---【附录a:k4t简介】---

k4t即:《kaiiit生产级别的容器编排系统》  

https://gitee.com/chuanjiao10/k4t

预计2021年6月发布alphi1版

中文名:《海贼帝·优秀的怕被沽沟暗杀·黑毛腿》

中文别名:《ps1倚天剑》

 

这是一套基于《卡死你3000》打造的,全功能,容器集群的自动化部署、扩容以及运维的平台。(国产k8s)。它采用开放式架构,具有网络简单稳定,使用简单,脚本操控灵活的特点。

powershell传教士 业余时间 作品

群名称:k4t官方1群  群   号:722528388

 

---【附录b:k4t 组件介绍】---

 问:完美版的k4t项目,由哪几部分组件构成?

 答:

 1 master端。 正在开发中,预计2021年6月前发布alphi1版。

 2 node端。已经开发完成,并部分开源免费成为雏形版。

 3 动态负载均衡api网关。(外部)

提供反向代理,和负载均衡功能。用于给一组容器应用,形成统一的ip。

目前基于我编写的envoy后端增删脚本。

https://gitee.com/chuanjiao10/envoy_powershell

你也可diy,改成自己喜欢的。

 

 4 动态dns。(外部)

是非必要组件。K4t集群,可以只用负载均衡器api-getway。

用于给一组容器应用,形成统一的服务名字。

目前基于未激活的无图win2019。当然有图版win2019也行。你也可diy,改成自己喜欢的。例如:dnsmasq

 

---【后记】---

“容器当然有亚健康状态了,容器996也有可能会疲劳呀!这和人有‘湿气’道理是一样的”我喃喃道。

 

K4t的这个参数,让容器告别996,也有轮流上下班时间了。哈哈,这参数堪称『大力丸』。有病能治病(比如内存泄漏),无病能防病(比如内存泄漏)。实乃居家旅行、以及运维编排、必备之好手段也!

 

实际上,【大力丸】存在的意义是:pod常规http探活手段不完美。写脚本并绑定pod探测稍嫌麻烦,这么做的少。

 

谢谢观看。

posted on   PowerShell免费软件  阅读(337)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示