0

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

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

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

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

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

你有什么主意吗 ?

谢谢你。

4

2 回答 2

0

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

还有其他获取其他 pod ips 的方法(例如使用无头服务或直接向 serverAPI 请求),但 StatefulSets 提供:

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

  • 稳定、持久的存储。

  • 许多其他功能有助于部署特殊类型的集群,如分布式数据库。不确定我在这里的“分布式”一词是否正确,但它有助于我提醒它们的用途:)。

于 2017-06-28T15:55:15.287 回答
0

如果你想让所有 Pod 在某个 Service 下运行,请确保使用无头 Service(即 set clusterIP: None)。然后,您可以查询本地 DNS-Server 以获取服务,并将收到分配给它的所有 Pod 的 A-Records:

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

然后启动您的 Pod(确保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
于 2017-06-29T07:15:59.810 回答