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

时间:2017-08-10 07:20:00

标签: docker kubernetes

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

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

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

我需要实现的目标:

  1. 客户要求匹配服务找到其他玩家。
  2. 比赛制造商找到其他球员。
  3. 它告诉kubernetes旋转新容器并将匹配的玩家路由到它。
  4. OR:

    1. 客户输入地图。
    2. 通过门户网站。
    3. 我假设一张地图 - 一台服务器。所以我想关闭以前的地图,并使用新地图旋转新服务器。
    4. 使用VM虽然不是一件容易的事,但是使用C#SDK for Azure很容易做到这一点。

      但是对于Kubernetes,我真的不知道从哪里开始寻找。一直在寻找文件,但无法真正找到我正在寻找的东西(或者我不知道我只是看着它......)。

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

      但这并不是我想要的,这里的玩家随机分配,所有需要的容器都在运行。我想对玩家去哪里进行更细粒度的控制,以及一次运行多少个实例。

1 个答案:

答案 0 :(得分:1)

对于顶部“OR”部分,使用Ingress控制器会这样做(我头脑中的那个是haproxy,但是有很多实现):它的工作是成为路由器通知kubernetes服务的互联网流量,宣称他们感兴趣。关于Ingress控制器的一个很棒的事情是,它通过kubernetes API以与kubernetes的所有其他部分完全相同的方式进行控制。

所以,在我脑海里:

  1. 完全在你的设置中,所以我不会说它,除了说如果为即将推出的一组玩家启动一个新的游戏服务器是耗时的,这个可能是开始这个​​过程的时候了。它会创建服务(例如,game-1502350068类型为ClusterIP,并且您需要玩游戏所需的ports:,添加selector:无论如何,还有game: g1502350068(你当然可以使用game: "1502350068"作为合法的Pod标签,但是需要记住在任何地方引用它,因为标签必须是字符串)< / p>

    这也是您考虑创建将game-1502350068.example.com映射到上述服务的新Ingress资源的时间,创建从(可能是通配符)DNS记录到群集的链接到服务。但不要担心,目前没有匹配该选择器的Pod,因此如果有人试图连接,流量就会消失

  2. 由你决定
  3. 玩家匹配完成后,现在您可以将game: g1502350068标签附加到Pod(如果您在步骤1中启动它/它们,或者如果没有,则使用该标签启动/它们),以及在Pod为“Ready”之后(因为你定义了它),流量将一直流过,只到达与服务选择器匹配的Pod
  4. 我刚刚描述的所有内容都是100%通过kubernetes API实现的,并且当您手动执行一次或两次此过程时调用kubectl --v=100将向您显示确切的端点和(我相信)确切的有效负载。然后,正如您可能怀疑的那样,kubernetes API会破坏所有这些,为其他玩家节省资源