如何在 Spring Boot 配置服务器中使用执行器刷新所有 kubernetes pod

che*_*huk 5 kubernetes spring-boot-actuator

我有一个 kubernetes 集群,其中有一个配置服务器 Pod(Spring Cloud 配置),我的应用程序在 3 个不同的 HA 容器中运行,由 service-ip 公开。当我更改 git 和 commit+push 中的属性时,我必须调用http://service-ip/actuator/refresh。问题是,当我调用这个 url 时,只有 1 个 pod 得到更新(处理当前请求的 pod)。

有什么办法解决吗?我看到一些使用 kubectl 查找 pod 的选项(2013 年的答案),但我正在寻找更原生的解决方案。

Rya*_*son 0

当 Pod 在滚动升级期间被替换时,它将在启动期间从配置服务器获取其配置。因此,比获取单个 Pod 并刷新 Pod 更符合 k8s 原生的解决方案是进行无操作滚动升级,如问题How to recycle pods in Kubernetes 中所建议的那样

如果您在滚动升级过程中更改配置,并且问题与计时相关,那么您可以在 Pod 上使用启动后挂钩来进行额外的刷新。

大概您正在考虑做的事情是使用 bash 脚本列出所有 Pod 并刷新它们,也许通过执行“kubectl exec -it”来 shell 到容器中并从其中调用刷新。我可以理解您的担忧,这不是很“原生”,因为它是相当手动的,您希望使用 k8s 或配置服务器获得更自动化的解决方案。实际上,您必须选择所需的“本机”方法,因为配置服务器的基于刷新的方法与 configmap 和滚动升级的 k8s 概念有很大不同。(参见https://dzone.com/articles/configuring-java-apps-with-kubernetes-configmaps-a)配置服务器更原生的解决方案是发送消息来提醒服务新配置可用 - 请参见https://dzone.com/articles/spring-cloud-config-server-for-the-impatent末尾的链接