当前位置: 首页 > 知识库问答 >
问题:

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

贲言
2023-03-14

我有一个kubernetes集群,它有一个配置服务器吊舱(spring cloud config),我的应用程序运行在3个不同的HA吊舱中,由服务ip公开。当我在git中更改属性并提交推送时,我必须调用http://service-ip/actuator/refresh.问题是,当我调用这个url时,只有一个pod得到更新(处理当前请求的pod)。

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

共有1个答案

柳昊焱
2023-03-14

当Pod在滚动升级期间被替换时,它将在启动期间从配置服务器获取其配置。因此,与获取单个Pod并刷新Pod相比,更具k8s原生的解决方案是进行无操作滚动升级,正如问题如何在库伯内特斯中回收Pod中所建议的那样

如果作为滚动升级的一部分,您正在更改配置,并且问题与时间有关,那么您可以使用Pod上的启动后挂钩来进行额外的刷新。

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

 类似资料:
  • 我在kubernetes集群中有多个pod用于相同的微服务。每个pod正好有一个微服务实例。所有这些吊舱都位于网络负载平衡器的后面。我点击了LB with/refreshendpoint,这只刷新了它负载平衡的pod容器的配置。有没有一种方法可以通过不单独调用每个容器来刷新此微服务所有pod的容器的配置?

  • 我希望所有执行器endpoint(在文档中描述)都可用。在文档之后,添加了启动器启动器依赖项和属性,但大多数endpoint不可用(HTTP 404)。 唯一可用的endpoint是,但它显示无用的信息: 添加属性。 添加了依赖项: 获取/执行器的结果 启用执行器endpoint的最小设置是什么?

  • 我有一个SpringBoot应用程序,它使用配置服务器加载其属性。属性存在于src中。配置服务器项目的main/resources/config目录。 当我到达restfulendpoint时,属性初始加载良好,然后当我更改属性时,它仍然显示旧的属性值。如何在调用URL时调用刷新终结点?我是在配置服务还是你好服务上调用它?即使从日志看起来已经映射了它们,它仍然会抛出405错误 配置服务器 或者你好

  • 我正在使用PCF提供的配置服务器实例,该实例由基于GIT的repo-to-server属性支持。我的应用程序连接到此配置服务器服务实例,并公开“刷新”endpoint。除了在更新属性后立即更改git中的属性并将http post发送到应用程序(/actuator/refresh)之外,其他一切都正常工作,我没有得到更新的prop name作为响应。如果我等待几秒钟,然后再次发送http post以

  • 我有一个客户端,它监听配置服务器。配置服务器指向github。使用localhost时一切正常。然而,当我将应用程序部署到Kubernetes时,用于刷新属性的客户端endpoint无法正常工作。 endpoint(后):http://config-client.sbx.com/actuator/refresh 这将在Postman“[]”上返回一个空响应,响应代码为200 OK。我能够看到配置服

  • 我们什么时候应该使用Spring boot执行器。如果包括在内,它对应用程序内存和CPU使用有多大影响? 我目前正在使用Spring Boot 2. x。