是否可以在不使用 StatefulSet 的情况下为 Kubernetes pod 分配低可重用整数 ID?

pup*_*eno 5 kubernetes

我知道每个 pod 都有一个(唯一的)UUID,但是是否可以自动给它一个低 ID 号,只要没有两个 pod 同时使用它们就可以重复使用?因此,如果 pod 4 死了,下一次启动 pod 时会得到 4。有时可能会出现间隙。

我的目标是在类似 twitter-snowflake 的算法中使用这个数字作为工作人员。

我想在不使用 StatefulSet 的情况下实现这一点,因为它带有一堆限制和复杂性,我不想将其添加到大型部署中。

Luk*_*ler 5

没有内置的方法可以做到这一点。

最直接的解决方法是initcontainer。在 pod 启动时,initcontainer 在原始容器启动之前运行,确定此 id,并将其设置为 pod。该 initcontainer 将运行以下步骤(使用 bash 或您选择的语言):

  1. 连接到 Kubernetes API并选择ownerReference当前 pod 的

  2. ownerReference统计当前 pod匹配的 pod 数量,例如:

    kubectl get pods -o jsonpath='{range .items[?(.metadata.ownerReferences.uid=)]}{.metadata.name}{end}'

  3. 将当前 pod 上您的 id 的标签设置为number of previously selected pods + 1


小智 1

分析了一下评论,貌似可以使用 StatefulSet 来实现,想了解更多内容可以访问官方文档