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

时间:2017-06-28 14:08:17

标签: kubernetes openshift cloudera-cdh cloudera-manager kubernetes-pod

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

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

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

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

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

你知道吗?

谢谢你。

2 个答案:

答案 0 :(得分:0)

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

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

  • 稳定,独特的网络标识符

  • 稳定,持久的存储。

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

答案 1 :(得分:0)

如果您想让所有Pod在特定服务下运行,请确保使用无头服务(即设置clusterIP: None)。然后,您可以查询本地DNS服务器以获取服务,并将收到分配给它的所有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