【问题标题】:RabbitMQ as Spring Cloud Bus in Kubernetes for Spring Boot ApplicationsRabbitMQ 作为 Kubernetes 中用于 Spring Boot 应用程序的 Spring Cloud Bus
【发布时间】:2018-04-30 09:27:08
【问题描述】:

我已经开发了 Spring Boot 应用程序。我已经设置了 admin 和 RabbitMQ 以及 spring cloud bus。当我刷新应用程序的端点时,它会刷新应用程序的属性。

谁能帮我现在如何在 kubernetes 中设置 RabbitMQ?我做了一定程度的研究,在几篇文章中发现它需要部署为“Statefulset”而不是“Deployment”https://notallaboutcode.blogspot.de/2017/09/rabbitmq-on-kubernetes-container.html。我不明白为什么这需要准确地完成。此外,任何有关在 kubernetes 中部署 RabbitMQ 的有用链接都会有所帮助。

【问题讨论】:

    标签: spring-boot kubernetes spring-boot-actuator


    【解决方案1】:

    这取决于您要做什么以及您可以使用哪些工具。我猜您当前的设置很像http://www.baeldung.com/spring-cloud-bus 中描述的设置。将其移植到 kubernetes 的一种方法可能是首先尝试让您的设置与 docker-compose 一起使用,然后您可以将该 docker-compose 移植到 kubernetes 部署描述符。

    在 k8s 中部署 rabbitmq 的一种简单方法是使用 rabbitmq docker 映像设置 Deployment。这方面的一个例子是https://github.com/Activiti/activiti-cloud-examples/blob/fe732096b5a19de0ad44879a399053f6ae02b095/kubernetes/kubectl/infrastructure.yml#L17。 (请注意,该文件与 docker-compose 文件并没有根本不同,因此您可以从一个文件移植到另一个文件。)但这不会将数据保存在 Pod 之外,因此如果集群出现故障或 Pod/ s 将下降,那么您将丢失消息数据。持久性是短暂的。

    因此,要获得非临时持久性,您可以改用 StatefulSet,如您所指的示例中所示。另一个例子是https://wesmorgan.svbtle.com/rabbitmq-cluster-on-kubernetes-with-statefulsets

    如果您正在使用 helm(或可以使用 helm),那么您可以使用 rabbitmq helm chartwhich uses a StatefulSet

    但是,如果您需要总线的唯一原因是在发生属性更改时触发刷新,那么 Kubernetes 可以使用替代路径。我猜你需要热重载,所以你可以看看使用https://github.com/fabric8io/spring-cloud-kubernetes#propertysource-reload 或者如果你需要配置来自git,那么你可以看看http://fabric8.io/guide/develop/configuration.html(如果你不需要热重载或git然后您可以考虑对您的配置映射进行版本控制,并使用您的应用程序升级来升级它们,例如https://dzone.com/articles/configuring-java-apps-with-kubernetes-configmaps-a)

    【讨论】:

    • 这对我有很大帮助。谢谢。
    • 我认为 spring cloud kubernetes 套件最适合我们的情况。所以我尝试使用spring-cloud-starter-kubernetes-config 作为 pom.xml 中的依赖项。然后我为提到的应用程序创建了配置映射,其名称与应用程序中提供的名称相同。属性文件。但它没有从中加载属性。我还有什么需要配置的吗?
    • Fabric8 在github.com/fabric8io/spring-cloud-kubernetes/tree/master/… 上提供了示例的完整源代码,可能您的设置中的某些内容与他们的不符。我首先仔细检查 spring.application.name 是否与 configmap 名称匹配,然后查看您是否像他们一样使用 ConfigurationProperties,然后比较 pom 依赖项。 nicolaferraro.me/2016/10/23/…还有另一个例子
    • Spring Cloud Kubernetes 运行良好。非常感谢。
    【解决方案2】:

    如果你已经在集群中安装了 helm

    helm install stable/rabbitmq
    

    这将在您的集群上安装rabbitmqserver,以下命令用于获取密码和erlang cookie,替换prodding-wombat-rabbitmq 用于w/e kubernetes 决定命名pod。

    kubectl get secret --namespace default prodding-wombat-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode
    
    kubectl get secret --namespace default prodding-wombat-rabbitmq -o jsonpath="{.data.rabbitmq-erlang-cookie}" | base64 --decode
    

    要连接到 pod:

    export POD_NAME=$(kubectl get pods --namespace default -l "app=prodding-wombat-rabbitmq" -o jsonpath="{.items[0].metadata.name}")
    

    然后代理到本地主机,以便您可以在浏览器中连接

    kubectl port-forward $POD_NAME 5672:5672 15672:15672
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-16
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多