繁体   English   中英

Kubernetes 服务用于所有 Pod,另一个仅用于领导者

[英]Kubernetes services for all pods and another for only the leader

在 Kubernetes 中,是否可以为单个部署提供 2 个服务,一个是“标准”服务并在所有准备好的 pod 前面代理,另一个服务仅发送选定领导者的流量? 如果有怎么办? 我正在使用client-go进行领导者选举。 这些是第 4 层服务。

我知道服务可以使用标签作为选择器,但 client-go 使用注释来标记领导者。 使用没有选择器的服务并在领导者回调中创建/删除端点似乎是 hacky/buggy。 谢谢你。

在 Kubernetes 中,是否可以为单个部署提供 2 个服务,一个是“标准”服务,在所有准备好的 pod 前面代理,第二个服务仅发送选定领导者的流量?

是的,但它似乎有点hacky。 服务的工作方式是这样的:

服务 -> 服务标签 select 端点 -> 端点 -> 端点标签 select Pod -> Pods (PodIP)

  1. 因此,您可以拥有指向 Deployment 或 StatefulSet 上的所有 pod 的常规“服务”,它会自动配置所有端点。

  2. 您还可以单独手动创建另一组“无头服务” + “端点” ,使它们的标签相互匹配,然后让该端点与您选择的 pod 的 label 手动匹配。

现在关于client-go/leaderelection 似乎它为领导者使用EndpointConfigMap锁(该示例显示了ConfigMap锁)。 但是,看起来你想使用端点锁。 所以这个 package 不适用于服务或标签,看起来它只适用于端点资源。 所以本质上,如果你有 3 个节点并且想要找到领导者,你将不得不使用 3 个手动创建的端点资源。 领导者将始终具有注释。

现在你如何将它与上面的 2) 联系起来? 当您的客户选举或选择领导者时,您还必须更改端点标签,以便它们与您手动创建的无头服务相匹配。 (也可以在您的代码中完成)

您也可以选择只使用上面的端点 2)(无无头服务),并让 client-go/leaderelection 直接与端点对话。

另一种选择是利用StatefulSets及其所需的无头服务 因此,该服务将解析为基于仲裁的集群中所有副本的 IP 地址。 领导者选举将取决于客户端 package(client-go 似乎不支持这一点),这对于大多数基于仲裁的应用程序(K8s、Zookeeper、Kafka、Etcd 等)来说都是如此; 客户是找到领导者的人。

✌️

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM