如何向其中的 pod 公开部署或 statefulset 的规模?

Posted

技术标签:

【中文标题】如何向其中的 pod 公开部署或 statefulset 的规模?【英文标题】:How to expose the scale of a deployment or statefulset to the pods in it? 【发布时间】:2019-06-08 00:20:10 【问题描述】:

我的第一个想法是使用downward API,但这似乎并没有暴露部署/有状态集的规模。我希望能够避免手动将其添加为单独的环境变量,或者如果可能的话,不得不依赖所有的 pod 相互发现来确定规模。

用例:为连接到外部服务的应用程序部署许多 pod。所述服务执行某种形式的一致散列(我相信这是正确的术语?)用于将数据发送到客户端,因此连接的客户端发送一个从 0 - N-1 和客户端总数 N 的 id 号。在这种情况下,部署/状态集规模将为 N。

【问题讨论】:

【参考方案1】:

您肯定必须为此使用 StatefulSet,而且我认为您不能从 DownwardAPI 中提取它,因为副本计数不是 pod 规范的一部分(它是 statefulset 规范的一部分)。您可以获取父对象名称,然后设置一个服务帐户,以便能够查询 API 以获取副本计数,但这似乎比将值放入标签或环境变量中更多工作。

【讨论】:

这就是我所害怕的 :( 我希望我只是错过了文档中明显的内容 使用 StatefulSet,您将在您的 pod 中获得一致的名称(作为主机名在内部提供!),其中包含一个不错的索引号。所以你的 pod 可以使用这些信息。如果没有 StatefulSet,您将无法在 pod 中生成唯一的索引号(您可以使用 pod 名称 -> 主机名,但这将是一个字符串,而不是索引号,具有随机字符串 id)。 使用有状态集的更重要原因是您可以确保不会过度配置,这很容易破坏一致的哈希。但是,是的,您可以通过解析 pod 名称来获取当前索引,它是不可用的副本总数。

以上是关于如何向其中的 pod 公开部署或 statefulset 的规模?的主要内容,如果未能解决你的问题,请参考以下文章

使用容器中应用程序公开的 REST API 进行水平 Pod 自动缩放

如何向世界公开我的 nginx EKS 集群?

单个服务公开的多个 Pod 的会话关联设置

使用 Prometheus 适配器的 Horizo​​ntal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)

请教kubernetes部署问题,pod一直处于pending状态

AWS Docker 部署不使用 Dockerrun 文件向外界公开端口