网易首页 > 网易号 > 正文 申请入驻

给K8s加了preStop,请求还是挂了20个

0
分享至

把 maxUnavailable: 0 写进 Deployment,通常意味着你已经认定:发布过程中丢请求这件事不可接受。它的字面承诺很硬——Kubernetes 不会在替代 Pod 就绪前拿走任何一个 Pod,所以健康 Pod 的数量始终是满的,理论上没人会拿到错误。 有人想验证这个承诺是否成立。做法是:四个副本挂在一个云负载均衡后面,二十个 keep-alive 客户端持续打流量,然后触发一次滚动更新,同时统计每一次失败。 结论是:承诺不成立。这一点他本来就有心理准备。真正没料到的是——所有人推荐的那个修复方案,几乎没让失败数动一下;而真正解决问题的东西,压根不在 Kubernetes 的配置里。 先跑一个对照组 环境不复杂:一个小的 Python HTTP 服务,四个副本,一个 type: LoadBalancer 的 Service,跑在 DigitalOcean Kubernetes 上。客户端用 HTTP/1.1 加 keep-alive,复用连接——因为真实客户端就是这么干的,而一个每次请求都新建连接的压测工具,会把大部分问题藏起来。 发布策略选的是最谨慎的那档:maxSurge: 1,maxUnavailable: 0。每轮大约在 110 秒内发出 19000 个请求,并在第 25 秒触发一次滚动更新。各轮之间唯一变化的,是应用如何处理自己被关闭这件事。 在动任何配置之前,先跑对照组:同样的负载,同样的时长,不触发发布。 - requests=19380,ok=19380,failed=0 一万九千多个请求,零失败。这意味着后面出现的任何失败,都只能归因于发布本身,而不是背景噪声。这一步他差点跳过,事后看绝不该跳——没有这个基线,下面所有数字都读不出意义。 三次尝试,三次都没解决 第一次,最朴素的应用。收到 SIGTERM 就直接退出,基本等于一个从没考虑过关停的进程的默认行为。 - requests=19302,ok=19251,failed=51 - 其中 33 个 RemoteDisconnected,13 个 ConnectionRefusedError,4 个 ConnectionResetError 51 个失败,重跑一次是 35 个。注意这些失败不是什么:没有一个是 5xx。全部发生在连接层。这也意味着,一个只统计 HTTP 状态码的监控体系,会告诉你这次发布干干净净。 第二次,正经的优雅关闭。服务在收到 SIGTERM 后停止接受新连接,让进行中的请求跑完,几秒后再退出——这就是所有框架宣传"优雅关闭"时所指的那套东西。 - requests=19392,ok=19367,failed=25 - 25 个全部是 RemoteDisconnected 失败数砍掉一半,是实打实的进展,但还剩 25 个。 第三次,所有人推荐的那个修复:加一个 preStop 钩子,让 Pod 在真正开始关闭前先停一会儿,给端点摘除留出时间。 - requests=19308,ok=19288,failed=20 25 变成 20。对于一个被当作标准答案的改动来说,这算不上答案。 失败到底发生在哪一刻 到这里实验才真正变得有用:一个拒绝移动的结果,说明解释错了,而不是修复力度不够。 他安排了一个观察程序,每秒四次记录 Service 的 EndpointSlice 里有哪些 Pod 地址,同时 Pod 自己记录收到 SIGTERM 的时刻。把两条时间线对齐,就能得到"Pod 被通知停止"到"Pod 被移出轮转"之间的间隔。 正值意味着 SIGTERM 已经到了、端点却还活着——这就是大家都在说的那个竞态。它确实存在,宽度大约半秒,而 preStop 把它完全关上了。端点现在会在进程收到信号之前就被移出轮转。 所以 preStop 完美地完成了它的工作,可还是有二十个请求失败了。这二十个不可能是新流量打到已经死掉的 Pod 上,因为根本没有新流量被发往那里。 把剩下的失败和 SIGTERM 的时间戳画在一起,答案立刻就出来了。 每一个失败都落在某次 SIGTERM 之后 3.0 秒。三秒正好是他的优雅处理器在调用 os._exit 之前等待的时长。失败不是发生在 Pod 被通知停止的时候,而是发生在 Pod 真正停止的时候。 负载均衡器握着到那个 Pod 的、已经建立的 keep-alive 连接。拒绝新连接对这些连接毫无作用,preStop 的等待同样毫无作用。它们待在一个连接池里,在池子看来完全健康,直到进程退出,把它们从使用中切断。 真正解决问题的是什么 一旦把问题这样描述出来,修复方案就显而易见了,而且它根本不是 Kubernetes 的设置。应用必须自己从连接池里走出去,而不是等着被移出去。在 HTTP/1.1 上,这意味着告诉客户端不要再复用这条连接: if draining.is_set(): self.send_header("Connection", "close") self.close_connection = True 继续正常服务,但在每次响应之后关闭连接。连接池会在接下来的几秒里自己排空。然后再退出,同时把 terminationGracePeriodSeconds 设得足够高,别让别的东西先把你杀掉。 - requests=25884,ok=25884,failed=0 - requests=25871,ok=25871,failed=0 零,两次,超过五万个请求。完整的进展,同一个集群,同样的负载,同样的发布。 他搞错了什么 两件事,第一件差点让这篇文章写不出来。 他做这个实验时,预期 preStop 就是结局。计划中的文章是那个熟悉的套路:端点摘除竞态,加上 sleep 之后失败数令人满意地降到零。当第三次尝试回来是二十而不是零时,他花了很长时间假设五秒不够长、应该试试十五秒——那会是一条缓慢却什么也学不到的弯路。而时间数据其实早就躺在一个他没打开过的文件里。 第二件是他差点没跑对照组。感觉是多余的,因为显然稳定负载打在稳定部署上不会失败。如果基线回来是二十个失败,那后面每一个数字都会被误读成发布造成的,而实际上它们只是背景噪声。


特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
喝酒误终身!不查不知道,一查吓一跳,原来这么多明星被酒给毁了

喝酒误终身!不查不知道,一查吓一跳,原来这么多明星被酒给毁了

早起的鸟儿有饭吃
2026-09-29 18:10:51
"退二线"干部大量闲置!基层干部年轻化变味,唯年龄论该改改了

"退二线"干部大量闲置!基层干部年轻化变味,唯年龄论该改改了

你是我心中最美星空
2026-10-01 19:40:40
越扒越有!范冰冰姐弟遇噩耗,欠6700万仅冰山一角,麻烦还在后面

越扒越有!范冰冰姐弟遇噩耗,欠6700万仅冰山一角,麻烦还在后面

解锁世界风云
2026-10-01 01:54:56
西媒:葡足协选帅曾设条件 新帅不能让C罗留队!候选人有穆帅

西媒:葡足协选帅曾设条件 新帅不能让C罗留队!候选人有穆帅

新英体育
2026-10-02 09:29:46
比芯片更可怕的危机来了?人类挖了几千年的铜,竟成未来命门!

比芯片更可怕的危机来了?人类挖了几千年的铜,竟成未来命门!

福建睿平
2026-09-30 07:28:24
美媒:32年来第一次,特朗普派出美军特种部队,突袭中国远洋货轮

美媒:32年来第一次,特朗普派出美军特种部队,突袭中国远洋货轮

超喜欢我
2026-10-02 14:52:30
太坑了!印度的陷阱,中国不要再次上当 | 地球知识局

太坑了!印度的陷阱,中国不要再次上当 | 地球知识局

地球知识局
2026-09-29 19:50:11
出差半年妻子意外怀孕,我冷静离开,次日家中传来噩耗

出差半年妻子意外怀孕,我冷静离开,次日家中传来噩耗

悬案解密档案
2026-04-21 09:08:33
气炸!上海面馆贴满硬核告示火了,写明“谢绝本地中年妇女点单”

气炸!上海面馆贴满硬核告示火了,写明“谢绝本地中年妇女点单”

吃货的分享
2026-10-01 10:19:19
董璇分享女儿照片并配文,祝福伟大的祖国母亲生日快乐

董璇分享女儿照片并配文,祝福伟大的祖国母亲生日快乐

动物奇奇怪怪
2026-10-02 06:38:07
278.8元!绿联推出iPhone 17/18 Pro系列彩色墨水屏手机壳:NFC无源传输 0耗电

278.8元!绿联推出iPhone 17/18 Pro系列彩色墨水屏手机壳:NFC无源传输 0耗电

快科技
2026-10-02 17:28:22
唐氏综合征画家官宣怀孕?曾演韩剧爆红,网友:太自私,不怕遗传?

唐氏综合征画家官宣怀孕?曾演韩剧爆红,网友:太自私,不怕遗传?

英国报姐
2026-09-30 23:52:31
这就是赤裸裸的现实!工商银行已经到了最危险的时候?

这就是赤裸裸的现实!工商银行已经到了最危险的时候?

财经保探长
2026-08-23 21:43:55
疑似抄袭周星驰,贩卖情怀,《新乌龙院之笑闹江湖》简直毁童年?

疑似抄袭周星驰,贩卖情怀,《新乌龙院之笑闹江湖》简直毁童年?

喜欢历史的阿繁
2026-10-02 18:37:39
马化腾专车接送、无人敢管!看似懒散佛系,实则封神整个互联网

马化腾专车接送、无人敢管!看似懒散佛系,实则封神整个互联网

流苏晚晴
2026-09-30 13:37:09
悄无声息的巨大成功:都在刷利曼时,第聂伯罗彼得罗夫斯克州的俄军其实已被“清场”

悄无声息的巨大成功:都在刷利曼时,第聂伯罗彼得罗夫斯克州的俄军其实已被“清场”

今观天下
2026-09-29 07:34:15
1998年张万年访美时,美陆军司令意外抱住他大喊:终于把你抓到了!

1998年张万年访美时,美陆军司令意外抱住他大喊:终于把你抓到了!

历史龙元阁
2026-10-01 10:55:21
真的凉快了!明天还有明显降雨,新一股冷空气已在路上

真的凉快了!明天还有明显降雨,新一股冷空气已在路上

上海嘉定
2026-10-02 16:54:10
英媒:曼城主席穆巴拉克有外交豁免权无法被起诉,将给诉讼带来难度

英媒:曼城主席穆巴拉克有外交豁免权无法被起诉,将给诉讼带来难度

懂球帝
2026-10-01 15:17:07
正式退出,陈幸同离队,官宣决定,前往北京,曾与周启豪曝恋情

正式退出,陈幸同离队,官宣决定,前往北京,曾与周启豪曝恋情

懂球社
2026-08-28 10:03:40
2026-10-02 19:12:49
灰度测试中
灰度测试中
生活正在重构,目前还在灰度测试阶段,暂不全量发布。
216文章数 85关注度
往期回顾 全部

科技要闻

“分手”15天后,华为与赛力斯签约新五年

头条要闻

家中车库电表箱炸了 业主懵了:自己家被人"寄生"18年

头条要闻

家中车库电表箱炸了 业主懵了:自己家被人"寄生"18年

体育要闻

30天30队·快船:被莱纳德挂在半空的未来?

娱乐要闻

奚梦瑶晒四太豪礼!22只龙凤镯近300万

财经要闻

珠宝黑马爆雷,老板全家跑路泰国!

汽车要闻

2027款极氪001将于明年一季度上市 现款猎装同步推新配色

态度原创

教育
亲子
健康
本地
手机

教育要闻

第二课 大场面作文怎么写不空?

亲子要闻

家里有女宝宝的,认真看!

刷酸祛痘,为什么有人翻车?

本地新闻

中秋逛白塔寺,体验国医妙荟雅集

手机要闻

苹果确认iPhone Duo内屏保护层可更换:AppleCare+用户19美元一次

无障碍浏览 进入关怀版