已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
【背景】 我负责一个交易清算服务,K8s 1.28(containerd 1.7),gRPC 1.60(Netty 4.1.100),Java 17。上游 6 个微服务通过 gRPC 调用清算服务,服务 4 副本(Deployment,maxSurge=1 / maxUnavailable=0),走 ClusterIP Service + headless Service(部分直连 Pod IP 做分片路由)。
【现象】 每次滚动发布,旧 Pod 被删除、新 Pod 起来后,约 30%~40% 的客户端实例在 30~120 秒内出现 gRPC UNAVAILABLE 或 DEADLINE_EXCEEDED,错误日志里 target 地址是旧 Pod IP(比如 10.244.3.77),而不是新 Pod IP(10.244.3.112)。重启客户端 Pod 后立刻恢复。
【已尝试的排查与结果】
【期望得到的答案形态】 希望看到不引入 service mesh 的前提下,gRPC / Netty 客户端侧的系统性治理方案:
最好能带一段可运行的 gRPC 客户端配置(proto + Java 代码片段),让我能直接对着改。