Kubernetes 滚动更新导致 Nacos 服务瞬断?从 preStop 到优雅下线完整拆解
适用场景与边界适合以下场景:服务运行在 Kubernetes 中。服务同时注册到 Nacos,调用方通过 Nacos 做服务发现。发布或重启时偶发Connection refused、Read timed out、5xx。服务是 Spring Boot / Spring Cloud 微服务,支持优雅关闭。不适合直接照搬的场景:服务只通过 Kubernetes Service 调用,不接入 Nacos。使用 Dubbo、Consul、Eureka 等其他注册中心,API 语义不同。服务是长连接、消息消费或批处理任务,需要单独设计 drain 逻辑。一、为什么 K8s 滚动更新还会请求失败Kubernetes 终止 Pod 的流程大致是:1. Pod 进入 Terminating 2. 从 Service Endpoints 中移除 3. 执行 preStop hook 4. 给容器主进程发送 SIGTERM 5. 等待 terminationGracePeriodSeconds 6. 超时后 SIGKILL 强杀如果服务只通过 Kubernetes Service 调用,这套机制基本够用。但很多 Spring Cl