【问题标题】:Need a deployment name passed to related pods需要将部署名称传递给相关 pod
【发布时间】:2019-10-30 14:44:51
【问题描述】:

我有一个包含 nodejs 应用程序的 docker 映像,我通过 kubernetes 部署部署了它,我有 3 个 pod。我需要将每个部署的名称传递给相关的 pod,这样我就可以为每个部署拥有一个唯一的 id,该 id 仅对该部署是唯一的,并且该部署中的所有 pod 都可以使用该 id。 这个也没有多大帮助:

Kubernetes deployment name from within a pod?

我知道我可以在 :

env:
  - name: unique id
    value: {{uuidv4}}

但我更喜欢以下:

env:
  - name: deployment name
    value: a way to get the deployment name

你知道它是否可以实现吗?

【问题讨论】:

  • 你需要更具体一些,你为什么需要 pod id,你是在尝试让 pod 相互连接来做某事吗?
  • @paltaa 实际上我使用 redis 并将其中一个 pod 分配为每个部署中的领导者,并在 redis 中跟踪领导者 ID。应该为新的部署负责人分配一个新的 ID。
  • @paltaa 另外值得注意的是,我不是在寻找 pod 名称而是部署名称,因为我需要查看即将出现的 pod 是否与旧部署或新部署有关。
  • @paltaa 所以每次部署将创建 3 个 pod,代码将抓取部署 pod 并将其中一个 pod 分配为领导者并在 redis 中跟踪它

标签: kubernetes openshift kubernetes-pod


【解决方案1】:

因此,从 Kubernetes 部署文档来看,一个用例是:

通过更新 PodTemplateSpec 来声明 Pod 的新状态 部署。创建一个新的 ReplicaSet 并由 Deployment 管理 以受控方式将 Pod 从旧的 ReplicaSet 移动到新的 速度。每个新的 ReplicaSet 都会更新 Deployment 的修订版。

因此,除非您想回​​滚,否则知道部署是无关紧要的。所以你需要的是让豆荚互相看到。在这种情况下,您需要一个无头服务。

https://dev.to/kaoskater08/building-a-headless-service-in-kubernetes-3bk8

在那里你可以获取 pod DNS 并通过 IP 或 DNS 在你的 Redis 中标记它们

编辑:

为了获得部署,每个 pod 都有一个名为 HOSTNAME 的 env var,例如(在我的环境中):

HOSTNAME=stella-api-8675fcf6df-rm2m7

其中 stella-api 是当前部署名称,stella-api-8675fcf6df 是当前副本集,最后,stella-api-8675fcf6df-rm2m7 将是 pod 特定 id

希望这会有所帮助。

【讨论】:

  • 谢谢,如果我做对了,就没有办法得到副本集的名称,对吧?
  • @Learner Edited 得到了你的答案
  • 感谢您提供非常有帮助的更新。因此,为了传递 HOSTNAME 一个环境变量,我应该这样做吗? {{HOSTNAME}}
  • HOSTNAME 是每个 pod 上的一个 env var,如果你仔细看它是你的 pod 的名字,所以只需解析 pod 的名字
  • HOSTNAME 是你的 pod 的环境变量,你可以通过 nodejs 包 dotenv 访问它
猜你喜欢
  • 1970-01-01
  • 2019-06-12
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
相关资源
最近更新 更多