【问题标题】:Globally assign per-pod UUID/unique-ID for all pods为所有 pod 全局分配每个 pod UUID/唯一 ID
【发布时间】:2019-06-04 15:06:55
【问题描述】:

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

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

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

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


问题:

  1. 有没有办法在全局级别自动将此类 UUID 分配给集群中的所有 pod(即,无需修改我所有 pod、部署等的 YAML 文件)。
  2. 是否有其他 K8S 提供的机制/功能可以更好地对位于单独/外部 pod 中的 pod 资源进行事后清理?

【问题讨论】:

  • 所有 Pod 都有一个uid。这就是你要找的吗?
  • 您可以通过env var 访问它,但请确保您的kubernetes 包含此commit
  • @AlassaneNdiaye 这似乎是对的。例如,有没有一种简单的方法可以通过kubectl 公开它?执行kubectl describe $POD_NAME 时没有看到任何此类字段。
  • @menya 这是否通过kubectl 暴露(以上评论)?
  • 是的,它在metadata.uid下,通过kubectl get pods/$POD_NAME -o yaml访问。

标签: memory-management kubernetes hook uuid postmortem-debugging


【解决方案1】:

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

它也被 env var 暴露给 pod,但请确保您的 kubernetes 包含此 commit

【讨论】:

  • 完美。不知道我以前是如何忽略那个的,但它就在那里。谢谢!
【解决方案2】:

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

【讨论】:

  • 同意,但我有一个需要使用部署的用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 2021-12-14
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
相关资源
最近更新 更多