我正在尝试创建一个包含两个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设置。
非常感谢
答案 0 :(得分:0)
我试图区分你对创建和布线Pod的厌恶,以及你必须这样做手动的厌恶。因为,理论上,Job
that creates Pods与您所描述的非常相似,并且能够为这些规则进行几乎无限的自定义。使用这样的自定义控制器,无需为客户端创建服务以与其服务器通信,因为作业可以首先创建服务器Pod,获取其Pod特定IP,并将其提供给随后创建的客户端Pods。
我希望一个可以创建一个只使用bash和curl或kubectl的Job控制器:生成描述你想拥有的情况的json或yaml,将它提供给kubernetes API(从那以后) Job将拥有一个服务帐户 - 就像任何其他集群内容器一样),并使用常规陷阱自行清理。如果没有更多特定的边缘案例加载到我的头脑中,很难说这是否是好主意,但我相信它是可能的。