3

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

进入 Kubernetes。

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

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

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

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

4

1 回答 1

0

我不确定我是否完全理解这个问题。您是在问如何将 RabbitMQ 与 Kubernetes 一起使用?或者如何设置 RabbitMQ 集群:https ://www.rabbitmq.com/clustering.html ?或者滚动更新如何与 RabbitMQ 交互?或者是其他东西?

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

于 2015-05-05T22:55:17.183 回答