【问题标题】:How to use kubernetes replication controllers to replicate message-based services如何使用 Kubernetes 复制控制器复制基于消息的服务
【发布时间】:2015-07-12 02:36:50
【问题描述】:

我们通常使用消息传递来向解耦的服务发送消息。这使得服务发现不再是问题,因为(例如,使用 RabbitMQ 中的 AMQP)您可以使用代理的路由功能将消息分派到正确的队列以提供正确的服务。负载平衡也由消息代理处理。

进入 Kubernetes。

在谈论服务复制和重新生成失败的服务时,通常会列出这样的用例,即当您的客户端使用诸如 http 之类的活动协议来联系服务时,即使该服务异步处理请求也是如此。在这种情况下,拥有复制控制器是很合适的,它管理一组服务和一个入口点以在它们之间进行负载平衡。

我喜欢 kubernetes 直观的概念,比如滚动部署,但是如何控制这些没有 http 接口的野兽呢?

更新: 我不想建立一个消息代理集群。我将消息消费者视为服务。服务客户端不直接连接到服务,它们将消息发送到消息代理。消息代理在某种程度上充当负载均衡器,并将消息分派给订阅的队列消费者。这些消费者实现了服务。

我的问题围绕着这样一个事实,即演示中的大多数使用模式都处理通过 http 调用的服务,而 kubernetes 在这里为这些服务创建服务代理和复制控制器做得很好。是否可以为我的这种服务创建复制控制器,它本身没有 http 接口,并具有滚动更新和最小实例的所有好处?

【问题讨论】:

    标签: rabbitmq kubernetes microservices


    【解决方案1】:

    我不确定我是否完全理解了这个问题。您是在问如何将 RabbitMQ 与 Kubernetes 一起使用?或者如何搭建 RabbitMQ 集群:https://www.rabbitmq.com/clustering.html?或者滚动更新如何与 RabbitMQ 交互?还是别的什么?

    我认为您应该能够为每台服务器创建一个服务和一个复制控制器,然后在集群配置文件中使用服务 DNS 名称。这也是当前用于运行 Zookeeper 的方法。我们有一个长期存在的 TODO 来减少它的冗长 (https://github.com/GoogleCloudPlatform/kubernetes/issues/260),但当前的方法应该是简单的。您确实无法使用单个 kubectl rolling-update 命令更新集群,但单独更新实例也很简单。

    【讨论】:

    • 您好,感谢您的回答。我在我的问题中添加了一个部分,以澄清范围。
    • tl:dr...这是一个漫长的讨论,但“当前的方法”是什么?
    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2015-08-03
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    相关资源
    最近更新 更多