系统优化与容器编排:5年实战提效之道
|
去年十二月份,凌晨三点十七分,我盯着屏幕右下角那个跳动的秒表——它卡在三十七秒上不动了,第七次。监控面板里K8s集群的pod状态栏全灰,但etcd节点心跳还在跳,就是不接新请求。运维小张在语音里说“又502”,我回他“你清下ingress缓存”,他说“清了三遍了”,我没接话,因为刚看到nginx日志里有行被截断的upstream地址:10.244.3.7:8080—后面跟着半个转义字符%3,再后面没了。 我原以为是service selector标签写错了,结果把所有deployment的label全grep一遍,对得上。又查到coredns的日志里有条warn:“upstream timeout for 'svc.cluster.local.'”,但nslookup svc.cluster.local能通,dig也能回A记录。我盯着那行warn看了两分钟,手悬在键盘上没动——反正这种事干了五年,有时候等三分钟比改三行配置管用。 这时候王工推门进来倒咖啡,看我屏息盯着terminal,问:“又502?”我说“嗯”,他站我身后没说话,就端着杯子呼气。热气糊了我半块屏幕,我下意识拿手指蹭掉,结果蹭出一道指纹印,正好盖住kubectl get endpoints那行输出里的port列。我忽然想起上周五下午测试环境也出现过一次类似情况,也是半夜,也是ingress-controller重启后第八次滚动升级失败,当时我顺手删了那个叫nginx-internal的configmap重生成——结果第二天上午客户说订单页支付按钮消失了两分钟,客服在群里甩截图,配文:“这个按钮你们能不能别总‘优化’它?”
文章配图,仅供参考 我就去翻那次的commit记录,发现configmap里有一行注释被我手滑删了:“# keep alive timeout: must match upstream’s nginx.conf”。但这次没这行注释。我重新apply进去,集群状态还是灰的。我点了下浏览器刷新键,F5按下去的时候手腕有点酸——上周刚做过肩颈理疗,按摩师说我颈椎曲度变直了,但我没跟她说其实我每天低头看监控面板的时间比看手机还长。 然后我切到另一个终端窗口,手动curl了三次那个ingress-controller的健康检查接口,前两次超时,第三次返回200,但body里写着“ready: false”。我愣了一下,点开它的源码,发现它校验的是一个叫“synced”字段,而这个字段取决于controller-manager里一个叫“cacheSynced”的回调——可这个回调,只在kube-apiserver响应延迟低于三百毫秒时才设为true。我把这条路径画在白板上,画到一半突然停笔:不对,我们集群所有control-plane节点都装了nvme盘,IO队列深度一直压在四十以下。这不应该拖慢apiserver到三百毫秒以上。 这时小张又发消息:“刘哥,云厂商刚发了个公告,说华北二可用区网络抖动,持续时间预估二十来分钟。”我点开链接,公告正文里写着“影响范围:底层VPC路由表同步延迟”。我关掉网页,没回他。手指停在键盘上,Ctrl+C都敲不下去。那会儿窗外开始飘雪,玻璃上结了层薄霜,把机房LED灯牌映成模糊的绿光块。我盯着那块绿光,想起来去年九月做过一次内核参数调优,把net.ipv4.tcp_fin_timeout从六十秒改成了十五秒——改完之后所有long-lived连接回收快了,但某些老设备连上来握手就掉。这事后来没人提,也没人查,就过去了。 现在我又把/etc/sysctl.conf打开,滚到那一行,光标停在“15”上。删掉?加回去?我手指悬着,雪越下越大。监控页面上,那个灰色的pod状态栏突然跳了一下,变成了黄色,但没变绿。就一下。像眨眼。 有谁碰到过这个吗 (编辑:航空爱好网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

