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
我正在尝试在 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