【问题标题】:how to refresh all kubernetes pods with actuator in spring boot config server如何在 Spring Boot 配置服务器中使用执行器刷新所有 kubernetes pod
【发布时间】:2018-12-25 09:16:55
【问题描述】:

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

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

【问题讨论】:

    标签: kubernetes spring-boot-actuator


    【解决方案1】:

    在滚动升级期间更换 Pod 时,它会在启动期间从配置服务器获取其配置。因此,比获取单个 Pod 并刷新 Pod 更适合 k8s 的解决方案是按照问题 How to recycle pods in Kubernetes

    中的建议进行无操作滚动升级

    如果您在滚动升级过程中更改配置并且问题与时间有关,那么您可以在 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末尾的链接

    【讨论】:

    • 一个介于两者之间的选项是 spring cloud kubernetes 项目 (github.com/spring-cloud/spring-cloud-kubernetes) 中的配置选项。但是,如果您已经在使用配置服务器,那么我想您可能不想切换到该服务器。
    • 感谢您的回答,实际上我不是关于升级,只是更改配置仓库中的配置并“告诉”pod 刷新自身。
    • 所以问题是如何最好地“告诉” Pod 全部刷新自己,因为大概你不想做像 springbootdev.com/2018/07/21/… 这样复杂的事情?
    • “告诉”所有 Pod 刷新的一种方法是启动滚动升级。然后它们将逐渐被杀死并替换为新的 Pod,新的 Pod 将具有新的配置。即使您在底层应用程序中没有代码更改,也有一种方法可以进行滚动升级。
    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多