微服务,【容器亚健康状态】问题,研究和解决
---【前言】---
我问:“程序有『亚健康状态』吗?”
一个正常的人,应该这样回答:“什么?程序,亚健康。。。?你神经病吧?我只听说过人,有亚健康状态。”
实际上,‘程序’是有『亚健康状态』的,这和人有『湿气』道理一样。
『亚健康状态』是指,程序处于【正常】和【非正常】之间,老司机都知道,
最明显的表现就是:程序表面输入/输出正常,但卡顿,或后台在疯狂报错。
细探原因,实际上是千奇百怪的。这里不做展开。
既然程序有亚健康状态,那么容器内运行的程序,也应该有亚健康状态,也很合理。这就是标题说的『容器亚健康状态』问题。
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免费软件 阅读(319) 评论(0) 编辑 收藏 举报