我们通常使用消息传递来将消息发送到解耦的服务。这使得服务发现不再是问题,因为(例如使用 RabbitMQ 中的 AMQP)您可以使用代理的路由功能将消息分派(dispatch)到提供正确服务的正确队列。负载平衡也由消息代理处理。
输入 kubernetes。
在谈论服务复制和重新生成失败的服务时,通常会出现这样的用例,即当您的客户端使用某种主动协议(protocol)(如 http)联系服务时,即使该服务异步处理请求也是如此。在这种情况下,拥有复制 Controller 是很自然的选择,它管理一组服务和一个入口点以在它们之间进行负载平衡。
我喜欢 kubernetes 的直观概念,例如滚动部署,但您如何控制这种没有 http 接口(interface)的野兽?
更新: 我不是要建立一个消息代理集群。我将消息消费者视为服务。服务客户端不直接连接到服务,它们将消息发送到消息代理。消息代理在某种程度上充当负载平衡器,并将消息分派(dispatch)给订阅的队列消费者。这些消费者实现服务。
我的问题围绕着这样一个事实,即演示中的大多数使用模式都处理通过 http 调用的服务,而 kubernetes 在这方面做得很好,可以为这些服务创建服务代理和复制 Controller 。是否可以为我的这种服务创建复制 Controller ,它本身没有 http 接口(interface),并且具有滚动更新和最少实例的所有好处?
请您参考如下方法:
我不确定我是否完全理解这个问题。您是在问如何将 RabbitMQ 与 Kubernetes 一起使用吗?或者如何设置 RabbitMQ 集群:https://www.rabbitmq.com/clustering.html ?或者滚动更新如何与 RabbitMQ 交互?还是别的?
我认为您应该能够为每个服务器创建一个服务和一个复制 Controller ,然后在集群配置文件中使用服务 DNS 名称。这也是当前用于运行 Zookeeper 的方法。我们有一个长期存在的 TODO 来使它不那么冗长 (https://github.com/GoogleCloudPlatform/kubernetes/issues/260),但当前的方法应该是直截了当的。您确实无法使用单个 kubectl rolling-update 命令来更新集群,但单独更新实例也很简单。




