全局分配每个 pod UUID/unique-ID 给所有 pods

Globally assign per-pod UUID/unique-ID for all pods

是否有自动分配给所有 K8S pods 或者可以为集群全局配置的 UUID 属性(或类似的东西)?

我有一个在我的集群中充当数据库 (DB) 前端的应用程序,其中一些(但不是全部 pods)提交了一个数字“资产”目录,它们可以让集群访问. pods 应该在关闭之前“清理”他们在数据库中创建的条目,但在某些情况下 pods 可能会崩溃,从而阻止 shutdown/cleanup 代码执行。

即使我 use a pre-stop hook,pod 已经崩溃,我无法再访问其中的数据以了解它向数据库应用程序报告了哪些资产。

我正在考虑让 DB 应用程序在收到传入连接时查询远程 pod 的 IP、某种唯一 ID/UUID 等;并将该数据映射到 pod 提交的 DB 信息。然后,我可以让数据库应用程序通过 K8S REST API 定期轮询集群,以查看具有相应 UUID 的 pod 是否仍然存在,如果与它们关联的 pod-UUID 不再存在,则清除单个记录.


问题:

  1. 有没有办法在全局级别自动将这样的 UUID 分配给集群中的所有 pods(即无需为我的所有 pods、部署等修改 YAML 文件).
  2. 是否有其他一些 K8S 提供的 mechanism/feature 可以提供更好的方法 post-mortem 清理 separate/external pod 中的 pod 资源?

您应该将 Statefulsets 用于 运行 有状态容器,例如数据库,而不是部署。 您将可以控制 pod 名称,例如 db-0、db-1、db-2

你可以通过kubectl get pods/$POD_NAME -o yaml访问pod的uid,它在metadata.uid下。

它也被env var, but make sure your kubernetes contain this commit暴露给pod。