nacos v2.2.3版本,k8s 微服务注册nacos,强制删除 pod, nacos注册实例不会消失 | Nacos 官网
云栖回顾 | 2024 云栖大会微服务和网关相关演讲材料点此了解

nacos v2.2.3版本,k8s 微服务注册nacos,强制删除 pod, nacos注册实例不会消失


用户问题 :

nacos v2.2.3版本,k8s 微服务注册nacos,强制删除 pod, nacos注册实例不会消失,一直显示健康。跪求大佬帮忙看看!


专家官方解答 :

根据您的描述和提供的知识内容,问题的原因可能在于Nacos中注册的实例为非持久化服务,这类服务依赖客户端心跳保持活跃状态。当您在Kubernetes (k8s) 环境下强制删除Pod后,若Pod内的服务进程没有正确终止,或者存在某些情况下服务实例的心跳机制仍在运行,Nacos服务端会继续收到心跳信号,导致实例虽然在K8s中已被删除,但在Nacos上仍显示为健康并在线。

针对这一问题,您可以尝试以下步骤解决:

  1. 确保Pod彻底终止

    • 在执行Pod的删除操作时,确保使用如kubectl delete pod <pod_name> --grace-period=0 --force这样的命令强制立即删除,减少服务进程继续运行的可能性。
  2. 客户端优雅停机处理

    • 确保您的微服务应用在接收到终止信号时,能够执行必要的清理工作,包括向Nacos发送注销实例的请求。这通常需要在应用代码中实现对应逻辑,比如捕获SIGTERM信号并调用Nacos客户端的deregisterInstance方法。
  3. 检查Nacos客户端配置

    • 确认Nacos客户端配置中是否启用了正确的实例类型设置。对于K8s环境,应确保客户端配置与服务期望的持久性相匹配,尽管在您的情况下,关注点在于为何非持久化实例未正确下线。
  4. 监控与日志检查

    • 查看Nacos客户端和服务端的日志,确认是否有异常信息,比如注销请求失败的记录,或是心跳机制异常的提示。
  5. K8s幽灵Pod检查

    • 根据知识中提到的,需确认没有“幽灵Pod”情况,即Pod资源已被K8s删除,但实际上对应的容器进程还在节点上运行。检查节点上的活跃进程,确保没有遗留的服务进程。
  6. 代理注册情况复查

    • 若您的服务注册是通过代理完成的,检查代理服务是否有相应的清理逻辑,确保代理在接收到服务下线通知时,也能正确地从Nacos注销实例。

综上所述,问题的关键在于确保服务实例被正确地从客户端注销,以及处理好服务终止时的各类边缘情况,以避免Nacos服务列表中出现不应存在的实例记录。

---------------

参考链接 :

---------------

答疑服务说明:

本内容经由技术专家审阅的用户问答的镜像生成,我们提供了专家智能答疑服务,使用方法: 用法1: 在页面的右下的浮窗”专家答疑“。 用法2: 点击专家答疑页(针对部分网站不支持插件嵌入的情况)

另:

有其他开源产品的使用问题?点击访问阿里AI专家答疑服务

反馈

如问答有错漏,欢迎点:差评给我们反馈。