OpenShift - pods 如何解析彼此的名字

OpenShift - how can pods resolve each other names

我正在尝试在 openshift 上安装 cloudera 管理器和 cloudera 代理,以便 运行 安装我需要让所有 pods 相互通信。

我手动修改了经理的 /etc/hosts 并添加了所有代理,在代理上我添加了经理和所有其他代理。

现在我想自动执行此操作,假设我添加了一个新代理,我希望它解析管理器和主机(我可以完成一部分,通过将管理器名称作为环境变量传递并使用 shell 脚本将其添加到 /etc/hosts,这不是理想的方式,但仍然是解决方案)。但第二部分会更困难,让经理解析每个新代理,并解析同一服务上的每个其他代理。

我想知道是否有办法让集群上的每个 pod 都能解析其他名称?

我必须使用一个 pod 为 cloudera-manager 提供服务,并为另一个服务 cloudera-agent 提供 - 让我们说 - 3 个代理。

你有什么想法吗?

谢谢。

不确定,但看起来您可以从 StatefulSets 中受益。

还有其他方法可以获得其他 pods ips(例如使用无头服务或直接向 serverAPI 请求)但 StatefulSets 提供:

  • 稳定、唯一的网络标识符

  • 稳定、持久的存储。

  • 许多其他功能有助于部署特殊类型的集群,如分布式数据库。不确定我的术语 'distributed' 是否正确,但它帮助我提醒它们的用途:)。

如果你想获得某个服务下的所有 Pods 运行,请确保使用 headless 服务(即设置 clusterIP: None).然后,您可以查询本地 DNS 服务器以获取该服务,并将收到分配给它的所有 Pods 的 A 记录:

---
apiVersion: v1
kind: Service
metadata:
  name: my-sv
  namespace: my-ns
  labels:
    app: my-app
spec:
  clusterIP: None
  selector:
    app: my-app

然后启动您的 Pods(确保为分配提供 app: 标签)并从其中任何一个查询您的 DNS 服务器:

kubectl exec -ti my-pod --namespace=my-ns -- /bin/bash
$ nslookup my-sv.my-ns.svc.cluster.local
Server:     10.255.3.10
Address:    10.255.3.10#53

Name:   my-sv.my-ns.svc.cluster.local
Address: 10.254.24.11
Name:   my-sv.my-ns.svc.cluster.local
Address: 10.254.5.73
Name:   my-sv.my-ns.svc.cluster.local
Address: 10.254.87.6