Go 服务优雅停机:K8s 发 SIGTERM 后不是立刻消失

发布时间:2026/7/16 6:47:14

Go 服务优雅停机:K8s 发 SIGTERM 后不是立刻消失
Go 服务优雅停机K8s 发 SIGTERM 后不是立刻消失Go 服务部署在 K8s 后优雅停机经常被忽略。Pod 被滚动更新时会收到 SIGTERM如果服务没有停止接收新请求、等待进行中请求结束、关闭连接池就可能产生一批莫名其妙的 502 或处理中断。优雅停机不是形式主义它决定发布时用户是否被无辜打断。一、停机链路要清楚flowchart TD A[K8s SIGTERM] -- B[Stop Accepting] B -- C[Drain Requests] C -- D[Close Resources] D -- E[Exit]K8s 不会读心。应用收到信号后需要自己处理生命周期。二、Go HTTP Server 支持 Shutdownsrv : http.Server{Addr: :8080, Handler: router} go func() { if err : srv.ListenAndServe(); err ! http.ErrServerClosed { log.Fatal(err) } }() ctx, cancel : context.WithTimeout(context.Background(), 20*time.Second) defer cancel() _ srv.Shutdown(ctx)Shutdown会停止接收新连接并等待已有请求完成直到 context 超时。三、K8s 配置要配合terminationGracePeriodSeconds: 30 lifecycle: preStop: exec: command: [sh, -c, sleep 5]preStop 可以给负载均衡摘流量一点时间。具体配置要结合网关和服务发现机制测试。四、长请求要有上限如果请求可能跑几分钟停机就会拖很久。服务应该设置请求超时并对长任务异步化。shutdown_policy: max_request_time: 15s async_jobs: resumable force_exit_after: 30s优雅停机不是无限等待。超过窗口仍要退出否则发布会卡住。还要处理 readiness。收到 SIGTERM 后可以先让 readiness 失败让流量入口停止转发再等待已有请求完成。var shuttingDown atomic.Bool func readiness(w http.ResponseWriter, r *http.Request) { if shuttingDown.Load() { w.WriteHeader(http.StatusServiceUnavailable) return } w.WriteHeader(http.StatusOK) }这样服务不是一边准备退出一边继续接新请求。生命周期信号要和探针配合。五、总结Go 服务在 K8s 中要处理 SIGTERM、停止接收新请求、等待已有请求、关闭资源并与 terminationGracePeriod 和 preStop 配合。Pod 不是立刻消失但也不会永远等你。生命周期写清楚滚动发布才真的平滑。上线前可以做一次演练压测中滚动发布观察 5xx、请求耗时和连接关闭情况。优雅停机只有被验证过才不是纸面配置。

相关新闻

如何免费永久使用IDM:开源激活脚本的完整解决方案

如何免费永久使用IDM:开源激活脚本的完整解决方案

2026/7/15 2:24:27

如何免费永久使用IDM:开源激活脚本的完整解决方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 你是否厌倦了Internet Download Manager&#xff0…

如何轻松获取网页视频资源:开源媒体嗅探工具的完整指南

如何轻松获取网页视频资源:开源媒体嗅探工具的完整指南

2026/7/12 10:15:51

如何轻松获取网页视频资源:开源媒体嗅探工具的完整指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经在网上看到一个精彩的…

Adobe Downloader:macOS上一键获取Adobe全家桶的终极下载工具

Adobe Downloader:macOS上一键获取Adobe全家桶的终极下载工具

2026/7/15 0:40:32

Adobe Downloader:macOS上一键获取Adobe全家桶的终极下载工具 【免费下载链接】Adobe-Downloader macOS Adobe apps download & installer 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-Downloader 还在为获取Adobe软件而烦恼吗?Adobe…

C++实现HDLC协议栈:从原理到嵌入式工业通信实战

C++实现HDLC协议栈:从原理到嵌入式工业通信实战

2026/7/16 5:49:45

1. 项目概述:为什么要在C里折腾HDLC?如果你在嵌入式、工业通信或者一些老牌通信设备公司的代码里翻过,大概率会碰到HDLC(高级数据链路控制)协议。乍一看,这协议名字里带个“高级”,但其实是上个…

PCB设计工程师核心技能与学习路径:从入门到进阶

PCB设计工程师核心技能与学习路径:从入门到进阶

2026/7/16 5:49:45

这次我们来聊聊PCB设计工程师这个岗位到底需要掌握哪些技能,哪些内容可以暂时放一放。对于刚入行的工程师来说,最头疼的就是不知道学习重点在哪里,担心学了一堆用不上的东西,反而错过了核心技能。PCB设计工程师主要负责电路板的设…

【AI总结】2026年6月 主流国内外大模型总结

【AI总结】2026年6月 主流国内外大模型总结

2026/7/16 5:49:45

目录 引言一、 国际主流模型 1. OpenAI GPT 系列2. Anthropic Claude 系列3. Google Gemini 系列4. Meta Llama 系列5. xAI Grok 系列6. 其他值得关注的国际模型 二、 国内主流模型 1. 百度 文心大模型2. 阿里 通义千问3. 腾讯 混元大模型4. 字节跳动 豆包大模型 / 扣子5. 智谱…

Java循环控制进阶:while与do..while的实战抉择与break/continue的精准调控

Java循环控制进阶:while与do..while的实战抉择与break/continue的精准调控

2026/7/16 5:49:45

1. 为什么需要while和do..while循环?在日常编程中,我们经常遇到需要重复执行某段代码的场景。比如读取用户输入直到输入合法、处理文件中的每一行数据、或者游戏中的主循环。这时候,循环结构就派上用场了。Java提供了三种主要的循环结构&…

【2014-01-27】cocos2dx学习笔记:CCNode回调流程

【2014-01-27】cocos2dx学习笔记:CCNode回调流程

2026/7/16 5:49:45

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2014-01-27 | 标题:cocos2dx学习笔记:CCNode回调流程 | 分类: 编程 / C &&…

OpenAI技术面试全攻略:算法、系统设计与项目经验解析

OpenAI技术面试全攻略:算法、系统设计与项目经验解析

2026/7/16 5:39:44

最近在技术圈里,OpenAI 的面试体验又成了热门话题。不少开发者分享了自己参与面试的经历,普遍反馈流程专业、题目有深度,特别是对算法基础和系统设计能力的考察很到位。这让很多正在准备面试或对 AI 领域感兴趣的同学跃跃欲试。不过也有网友调…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/16 0:35:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/15 0:26:43

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Python实现跨境电商商品图批量翻译教程

Python实现跨境电商商品图批量翻译教程

2026/7/16 0:09:31

一、问题引入做跨境电商的卖家朋友,你是否遇到过这样的困扰?每次上架新品到亚马逊、Shopee或Lazada等平台,都需要处理大量商品图片的多语言版本。比如上架200款衣服,每款需要翻译成英语、日语、韩语等5种语言,这意味着…

跨境电商多语言商品图翻译方案实现

跨境电商多语言商品图翻译方案实现

2026/7/16 0:09:31

一、问题引入对于做跨境电商的卖家来说,多语言商品图的制作一直是令人头疼的环节。当你准备在亚马逊、Shopee、Lazada等多个平台同步上架新品时,首先遇到的就是图片翻译问题。以一位做家居用品的卖家为例,他需要将200张商品图片中的英文文案全…

Windows系统文件d3dx9_36.dll丢失找不到问题解决

Windows系统文件d3dx9_36.dll丢失找不到问题解决

2026/7/16 0:09:31

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…