是否有可能特定自定义规则在Kubernetes / Docker中运行新的容器?
编辑:它不一定是kubernetes。 它可以是Docker。
我不确定这是否是正确的问题,但这是我想实现的:
我想使用容器(Azure)在云中运行游戏服务器(UnrealEngine)。 我知道如何使用虚拟机实现它,但我想尝试Kubernetes。 无论是学习经验还是使用CI / CD的事实都应该更容易。
我需要实现的是:
- 客户要求比赛制作服务,以find其他运动员。
- 火柴制造商find其他玩家。
- 它告诉kubernetes旋转新的容器并将匹配的玩家路由到它。
要么:
- 客户端input地图。
- 走低谷门户。
- 我假设一个地图 – 一个服务器。 所以我想closures以前的地图,并用新的地图旋转新的服务器。
使用VM虽然不重要,但使用C#SDK for Azure很容易。
但在Kubernetes的情况下,我真的不知道从哪里开始寻找。 一直在看低谷的文件,但不能真正find我在找什么(或者我不知道我只是看着它..)。
我看过这篇文章: http : //blog.juliaferraioli.com/2015/11/containerized-minecraft-roulette.html
但那不是我想要的,这里玩家随机分配,所有需要的容器都在运行。 我希望对玩家的去向有更多细致的控制,同时有多less个实例在运行。
对于顶级的“OR”部分,使用Ingress控制器将会这样做(我脑海中的haproxy
控制器是haproxy
,但有很多实现方式):它的工作是成为从Internetstream量到kubernetes服务的路由器s)宣布他们的利益。 关于Ingress控制器的令人敬畏的事情是,它通过kubernetes API以与kubernetes的所有其他部分完全相同的方式进行控制。
所以,在我的脑海中:
-
完全在你的设置中,所以我不会说这个,除非说如果为即将到来的一组玩家启动一个新的游戏服务器是耗时的,那么这可能是启动这个过程的时候了。 它会创build服务(例如,命名为
ClusterIP
types的game-1502350068
,以及所有ports:
您将需要玩游戏),添加selector:
任何东西,但也可以是game: g1502350068
(可以当然,使用game: "1502350068"
作为一个合法的Pod标签,但是需要记住在任何地方使用它,因为标签必须是string)这也是您考虑创build一个新的Ingress资源的时间,该资源将
game-1502350068.example.com
映射到上述服务,创build从(大概通配符)DNSlogging到群集和服务的链接。 但是不要担心,目前没有与该select器匹配的Pod,所以如果有人尝试连接,stream量就会死亡 - 由你决定
- 随着玩家匹配完成,现在你可以将
game: g1502350068
标签附加到Pod(如果你在步骤1中启动它,或者如果没有启动它),并且在Pod是“就绪“(无论你如何定义),stream量将一路stream通,只到达与服务select器相匹配的豆荚
我刚刚描述的所有事情都可以通过kubernetes API完成,调用kubectl --v=100
,手动处理一次或两次,会显示确切的端点和(我相信)确切的有效载荷。 然后,正如您可能会怀疑的那样,kubernetes API可以将所有这些压缩掉,为其他玩家节约资源