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 2021-02-16 16:12  PowerShell免费软件  阅读(284)  评论(0编辑  收藏  举报

导航