带 Pod 间通信的 Job

    某 Job 内的 Pod 之间可能需要通信。每个 Pod 中运行的用户工作负载可以查询 Kubernetes API 服务器以获知其他 Pod 的 IP,但使用 Kubernetes 内置的 DNS 解析会更加简单。

    索引完成模式下的 Job 自动将 Pod 的主机名设置为 的格式。 你可以使用此格式确定性地构建 Pod 主机名并启用 Pod 通信,无需创建到 Kubernetes 控制平面的客户端连接来通过 API 请求获取 Pod 主机名/IP。

    此配置可用于需要 Pod 联网但不想依赖 Kubernetes API 服务器网络连接的使用场景。

    你应该已熟悉了 的基本用法。

    你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    说明:

    如果你正在使用 MiniKube 或类似的工具, 你可能需要采取额外的步骤来确保你拥有 DNS。

    启动带 Pod 间通信的 Job

    要在某 Job 中启用使用 Pod 主机名的 Pod 间通信,你必须执行以下操作:

    1. 通过将以下值包括到你的 Job 模板规约中,针对该 Job 的 Pod,将无头服务配置为其子域服务:

    说明:

    在以下示例中的每个 Pod 中执行的 Bash 脚本中,如果需要从名字空间外到达 Pod, Pod 主机名也可以带有该名字空间作为前缀。

    应用上述示例之后,使用 通过网络到达彼此。 你应看到类似以下的输出:

    说明:

    谨记此例中使用的 <Pod 主机名>.<无头服务名称> 名称格式不适用于设置为 或 Default 的 DNS 策略。 你可以在了解有关 Pod DNS 策略的更多信息。