公司方案
<!-- 服务优雅停机/平滑升级 -->
<dependency>
<groupId>com.tcl.starter</groupId>
<artifactId>tcl-starter-register-event</artifactId>
<version>2.2.6-RELEASE</version>
</dependency>
- 核心思想: 去除客户端心跳检测和下线,底层组装参数通过HTTP调用执行下线
- 上面的依赖中,底层对外提供 /api/nacos/deregister 接口,从nacos上解注册应用
- 在 Pod 关闭前设置一个 preStop 钩子,在 preStop 脚本中执行主动从 Nacos 下线本机实例, sleep 25 秒后再执行 Pod 的销毁,从而实现优雅停机。配置如下(k8s配置):
# 调用从nacos下线接口(8081为应用暴露的端口 server.port)
curl http://localhost:8081/api/nacos/deregister
# 延迟发送关闭信号到容器进程
sleep 25
spec:
template:
spec:
# K8S留个程序的最后处理时间,来处理关闭之前的操作(单位s)
terminationGracePeriodSeconds: 30
containers:
lifecycle:
preStop:
exec:
command:
- /bin/sh
- -c
# 7210(server.port) 30s 最好与 terminationGracePeriodSeconds 一致(延迟发送关闭信号到容器进程)
- curl localhost:7210/api/nacos/deregister && sleep 30s