是否可以在 Kubernetes/Docker 中运行新容器的特定自定义规则?



>编辑: 它不一定是 kubernetes。它可以是Docker。

我不确定这是否是正确的问题,但这就是我想要实现的目标:

我想使用容器(Azure(在云中运行游戏服务器(UnrealEngine(。我知道如何使用虚拟机来实现它,但我想尝试 Kubernetes。 对于学习经验和从长远来看,CI/CD使用它应该更容易。

我需要实现什么:

  1. 客户要求匹配服务以找到其他玩家一起跑步。
  2. 匹配器查找其他玩家。
  3. 告诉 kubernetes 在新容器上旋转并将匹配的玩家路由到它。

或:

  1. 客户端输入地图。
  2. 进入低谷门户。
  3. 我假设一张地图 - 一台服务器。所以我想关闭以前的地图,并使用新地图在新服务器上旋转。

使用VM 虽然不简单,但使用 C# SDK for Azure 很容易做到这一点。

但是对于 Kubernetes,我真的不知道从哪里开始寻找。一直在寻找低谷文档,但无法真正找到我正在寻找的内容(或者我不知道我刚刚看了它..(。

我看过这篇文章: http://blog.juliaferraioli.com/2015/11/containerized-minecraft-roulette.html

但这并不完全是我想要的,这里的玩家是随机分布的,所有需要的容器都在运行。我想对玩家去哪里以及同时运行多少个实例进行更精细的控制。

对于顶级的"OR"部分,使用 Ingress 控制器就可以做到这一点(我脑海中的那个是haproxy,但有很多实现(:它的工作是从互联网流量到声明其兴趣的 kubernetes 服务的路由器。Ingress 控制器的奇妙之处在于,它通过 kubernetes API 进行控制,其控制方式与 kubernetes 的所有其他部分完全相同。

所以,在我的脑海中:

  1. 完全在您的设置中,所以我不会谈论它,只是说如果为即将到来的玩家组启动新的游戏服务器很耗时,那么现在可能是开始该过程的时候了。它将创建服务(例如,命名为ClusterIP类型的game-1502350068,以及玩游戏所需的所有ports:(,添加任何内容selector:,但也game: g1502350068(当然,您可以将game: "1502350068"用作合法的 Pod 标签,但需要记住在使用它的任何地方引用它, 因为标签必须是字符串(

    这也是您考虑创建一个新的入口资源,将game-1502350068.example.com映射到上述服务,创建从(大概是通配符(DNS 记录向下到集群和服务的链接。但别担心,目前没有与该选择器匹配的 Pod,因此如果有人尝试连接,流量就会消失

  2. 轮到你了

  3. 随着玩家匹配完成,现在您可以将game: g1502350068标签附加到 Pod(如果您在步骤 1 中启动了它/它们,如果没有,则使用该标签启动它/它们(,并且在 Pod "就绪"之后(无论您如何定义(,流量将一直流过,仅到达与服务选择器匹配的 Pod。

我刚才描述的所有内容都可以通过 kubernetes API 实现 100%,并且在手动执行该过程时调用kubectl --v=100一次或两次将向您显示确切的端点和(我相信(确切的有效负载。然后,正如您可能怀疑的那样,kubernetes API 可以拆除所有这些,为其他玩家节省资源。

最新更新