首页 > 解决方案 > 一个 pod 如何知道它的副本数

问题描述

我正在开发一项服务(用 Go 编写),预计会收到大量请求。根据架构,服务的每个 pod 都应该服务于特定的客户端。假设,如果该服务有 3 个 pod,则拆分将类似于 -> A-H, I-P, Q-Z,其中每个字母是客户端名称的第一个字母。

但是如果这个服务有 4 个 pod,那么 split 可以是 -> A-F, G-N, O-U, V-Z

有没有办法我可以在 Go 代码中知道还有多少其他副本?

PS:AFAIK,一种可能性是environment variabledeployment.yaml. 但是有一些方法可以在不改变yaml.

标签: gokuberneteskubernetes-pod

解决方案


根据标题,解决方案是使用StatefulSet每个服务相互了解的地方,并且可以以它们处理这种情况的方式编写应用程序。

但是,对于这个问题,根据提到的细节,一个不使用的好解决方案StatefulSet是创建一个Service带有sessionAffinity: ClientIP. 根据详细信息的要求是后续请求必须转到为先前请求提供服务的特定 pod。这可以使用sessionAffinity字段进行配置。在这里检查它的文档有了这个,当一个新的客户端连接时,将在做负载平衡后service选择一个。pod发布后,所有后续请求将pod仅发送到该请求。这可以使用SessionAffinityConfig.


推荐阅读