首页 文章

Kubernetes的工作由两个pod组成(必须在不同的节点上运行并相互通信)

提问于
浏览
0

我正在尝试创建一个包含两个pod的Kubernetes作业,这两个pod必须在我们的Hybrid集群中的不同节点上进行调度 . 我们的要求是其中一个pod在Windows Server节点上运行而另一个pod在Linux节点上运行(因此我们不能只从同一个pod运行两个Docker容器,我知道这是可能的,但不能在我们的场景) . Linux pod(您可以将其视为客户端)将通过网络与Windows pod(您可以将其视为有状态服务器)进行通信,以便在作业运行时交换数据 . 当Linux pod终止时,我们还希望终止Windows pod . 但是,如果其中一个pod失败,那么我们希望两个pod都失败(因为它们被设计为单个作业)

我们当前的设计是编写一个K8S服务来处理pod之间的通信,然后将服务和两个pod应用到集群以“模拟”一项工作 . 然而,这并不理想,因为两个pod没有紧密耦合为单个作业,并且增加了相当多的开销来手动管理此设置(例如,当故障或作业时,我们可能需要手动终止服务和部署Windows pod) . 此外,我们需要为每个“作业”部署新服务,因为我们要求Linux pod在作业期间始终与同一Windows窗格进行通信,因为基础状态(因此不能对所有Windows窗格使用单个服务) ) .

任何关于如何在Kubernetes上取得最佳成绩的想法将不胜感激!希望本机支持这种情况,我不需要采用上面描述的这种pod-service-pod设置 .

非常感谢

1 回答

  • 0

    我试图区分你的厌恶创建和连接Pods与你的厌恶手动必须这样做 . 因为,理论上,Job that creates Pods与您所描述的非常相似,并且能够为这些规则进行几乎无限的自定义 . 使用这样的自定义控制器,无需为客户端创建服务以与其服务器通信,因为作业可以首先创建服务器Pod,获取其Pod特定IP,并将其提供给随后创建的客户端Pods .

    我希望可以使用bash和curl或kubectl创建一个Job控制器:生成描述你想要的情况的json或yaml,将它提供给kubernetes API(因为Job有一个服务帐户 - 就像任何其他in-cluster容器),并使用普通陷阱自行清理 . 如果没有更多特定的边缘情况加载到我的头脑中它是一个好主意或不是,但我相信这是可能的 .

相关问题