【发布时间】:2018-10-31 11:40:20
【问题描述】:
我有一个 HPC 集群应用程序,我希望用 Kubernetes 和一些中间件(最有可能是 ZMQ 或 RabbitMQ)的组合来替换 MPI 和我们的内部集群管理软件。
我正在尝试设计如何最好地使用 Kubernetes 的服务发现在该系统上进行对等发现。
我知道 Kubernetes 可以为给定的服务提供 DNS 名称,这很好,但是有没有办法动态发现端口?
例如,假设我用 ZeroMQ 替换了 MPI 中间件,我需要一种方法让等级(集群上的进程)找到彼此。我知道我可以简单地让队伍向 Kubernetes 发现机制发出服务创建消息并相当容易地获得像 myapp_mypid_rank_42 这样的主机名,但是我将如何处理端口呢?
如果可能的话,如果我能做到就好了:
zmqSocket.connect("tcp://myapp_mypid_rank_42");
但我认为这行不通,因为我没有来自 DNS 的端口号信息。
如何让 Kubernetes 服务发现也以尽可能简单的方式提供一个端口,以允许集群中的等级相互发现?
注意:注册进程知道自己的端口,可以向K8s服务发现守护进程注册。问题是为需要它的进程获取该端口号的一种快速简便的方法。我要问的问题是是否有一种机制像 DNS 主机名一样简单,或者我需要从k8s 守护进程而不是简单地根据一些商定的规则构建主机名(例如从 myapp_mypid_myrank 构建字符串)?
【问题讨论】:
-
你在定义服务的时候放下服务端口。这不是一个变量,端口是您输入的任何数字。有很多注入方法,你可以通过它获取端口号,但基本上它是你在服务定义上写的
标签: kubernetes