【问题标题】:Is it possible for a pod running in a satrefulset to get the hostname of the all the pod running in different statefulset?在 satrefulset 中运行的 pod 是否有可能获取在不同 statefulset 中运行的所有 pod 的主机名?
【发布时间】:2020-08-14 15:05:45
【问题描述】:

我有一个在 statefulset 中运行的 pod,但它需要知道在另一个 statefulset 中运行的所有 pod 的主机名或地址才能与它们通信。第二个 statefulset 是由一个单独的 helm chart 创建的。吊舱可以动态解决这个问题吗?我可以通过类似于设置.Status.ip 的环境将此信息注入到 pod 中吗?

编辑:每个 statefulSet 都有自己的无头服务

【问题讨论】:

  • 不确定我是否正确理解了您的要求,但是:您是否尝试为其他有状态集使用服务? (kubernetes.io/docs/concepts/services-networking/service) 这将为您提供集群内的静态域以访问所有这些 pod。
  • 如果它是一个 helm chart,它很可能已经为那个 statefulset 创建了一个服务——但不知道是什么 helm chart,这只是一个猜测。您可以通过kubectl get service 查询
  • 是的,两个 statefulset 都附加了一个无头服务
  • 有没有办法通过 env 将完整的静态域注入到另一个 pod 中?
  • 是的,当然 - 只需在您的 pod-spec (kubernetes.io/docs/tasks/inject-data-application/…) 中使用 env 配置。服务的 DNS 基本上是它的名称,如果它在同一个命名空间中,或者类似 <my-service-name>.<namespace-name>.svc.cluster.local 如果它在另一个命名空间中。

标签: kubernetes kubernetes-helm kubernetes-statefulset


【解决方案1】:

正如 cmets 中所讨论的,此处的方法是使用服务资源,因为这将为您提供集群内的静态 DNS 以访问该服务所针对的所有 pod。

服务的 DNS 是:

  • 服务名称(如果您从同一命名空间中访问)
  • <my-service-name>.<namespace-name>.svc.cluster.local 如果您从另一个命名空间访问它,并且 cluster.local 是集群域,可能会因集群配置而异

如果您还需要更多配置选项,例如当您想将图表部署到集群域实际上可能不同的不同云环境中时,您可以使用 kustomize.io 在应用时调整您的配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    相关资源
    最近更新 更多