问题标签 [agones]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1494 浏览

google-cloud-platform - agones和spatial OS有什么区别

最近谷歌宣布了一个名为 Agones 与 ubisoft 合作的开源项目。它是一个开源的、专用的多人游戏服务器托管在谷歌云上。来源:https ://cloudplatform.googleblog.com/2018/03/introducing-Agones-开源多人专用游戏服务器托管内置 Kubernetes.html

但去年,谷歌还介绍了他们的合作伙伴 ( https://improbable.io/ ) 名为 Spatial OS 的项目。它声称是下一代多人游戏。

我的问题有什么区别?在实时多人游戏的性能方面,减少作弊以及哪个服务器维护最低(由开发人员维护)

还是它们实际上是不同的东西,可以一起创造更好的在线多人游戏?

0 投票
1 回答
524 浏览

amazon-web-services - 为 EKS pod 动态创建公共 IP 或子域

复杂的 AWS EKS / ENI / Route53 问题让我们感到困惑。需要专家。

语境:

我们正在为社交平台 ( https://myxr.social ) 开发动态游戏服务器,该服务器使用 WebRTC/UDP SCTP/SRTP 通过https://MediaSoup.org传输游戏和视频数据

每个游戏服务器大约有 50 个客户端 每个客户端需要 2-4 个 UDP 端口

我们的开发运维策略 https://github.com/xr3ngine/xr3ngine/tree/dev/packages/ops

我们正在使用 Kubernetes 和https://agones.dev配置这些游戏服务器

Mediasoup 要求为客户端的每个服务器连接分配单独的端口。每个客户端需要两个端口,一个用于发送数据,一个用于接收数据;每台服务器的目标最多约为 50 个用户,这要求每台服务器有 100 个端口可公开访问。

我们需要一些方法来将此 UDP 流量路由到相应的游戏服务器。入口似乎主要处理 HTTP(S) 流量,配置我们的 NGINX 入口控制器来处理 UDP 流量假设我们提前知道我们的游戏服务器服务,我们不知道,因为游戏服务器会根据需要上下旋转。

问题:

我们看到了两种可能的方法来解决这个问题。

路径 1

分配节点组公共 IP 中的每个游戏服务器,然后为每个客户端分配端口。IP v4 或 v6。这将需要对 AWS 中的 IP 端口进行 SSL 终止。我们可以使用 ENI 和 EKS 为每个带有 SSL 的游戏服务器动态创建和配置 IP 端口吗?基本上通过公共子网将这些 pod 暴露给 Internet,它们每个都有自己的 IP 地址或子域。https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html我们一直在参考这个文档,试图弄清楚这是否可能。

路径 2

为每个游戏服务器动态创建一个子域(例如 gameserver01.gs.xrengine.io 等),并为每个客户端(例如客户端 1 [30000-30004] 等)分配动态端口。这似乎受到 EKS 船队中可访问的端口的限制。

这些方法中的任何一种都可能吗?一个更好吗?你能告诉我们一些关于我们应该如何实施的细节吗?

0 投票
1 回答
1510 浏览

google-cloud-platform - 有没有人在 GKE、Google Game Servers 或 Agones 中为 iPv6 找到了一个好的解决方案?

我目前正在使用 Google 游戏服务器 ( https://cloud.google.com/game-servers ) 托管游戏服务。这基本上是在 GKE 中运行 Agones。除了 iPv6 之外,这在大多数情况下都非常有效。

我正在努力寻找有关如何使这种设置与 iPv6 兼容的任何建议。似乎这应该是答案https://cloud.google.com/load-balancing/docs/ipv6但 Agones 设置为在端口范围内运行服务器,因为它启动并关闭服务器,似乎我需要具有特定端口和与特定机器的非持久连接以使用谷歌负载均衡器解决方案。

作为参考,这是一个依赖于 socket.io 通信的 NodeJS 后端。

任何建议,将不胜感激。

0 投票
2 回答
775 浏览

nginx - K8s 游戏服务器:通过 Service/Ingress 为 Pod 动态转发 TCP 和 UDP

所以在过去的几天里,我试图找到一种动态附加入口名称(如game-1.myapp.com)的方法,以解决 Kubernetes 上 Steam 专用服务器的 TCP 和 UDP 问题。我附上了下图说明我是如何计划的,但是我遇到了一些问题。

我可以使用 Kubernetes API 为每个单独的游戏服务器动态创建命名空间、Pod(由 Stateful Sets 控制)、PVC、服务和入口。每个游戏服务器都位于自己的命名空间中,彼此完全分开。我保证服务器在后台运行,Pod 也在运行且处于活动状态,日志很好。

当我需要将 Stateful Set 服务分配给能够通过使用命名空间 DNS 连续回复 TCP/UDP 流量的 Ingress 时,我被锁定了,该 DNS 路由到集群的 Ingress Controller(在 Minikube 中;对于生产,ALB/NLB应该使用,AFAIK)。

不知何故,我需要一种方法来进入game-xxxxx.myapp.com特定game-xxxxx命名空间的 pod。他们是否有附加端口并不重要。

为此,我可以简单地通过 API 调用 DNS 求解器,myapp.com并在需要时添加或删除A Records。这似乎没问题,但我发现我可以使用 ExternalDNS ( https://github.com/bitnami/charts/tree/master/bitnami/external-dns ) 根据现有服务自动为我执行此操作。

我已经尝试过,还没有运气:

NGINX

设置 NGINX,但我必须为每个服务定义公开的端口。根据他们的文档(https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services),每次修改 ConfigMap 并重新创建 NGINX pod 都是过分的,因为可能有很多变化,这似乎不可行。另外,我非常怀疑 NGINX 在重负载下会变得轻而易举,我发现它更适合 Web 服务器而不是游戏服务器。

此外,我可能需要一种方法来确保我可以拥有重复的端口。例如,我不能在 NGINX 中将相同的28015端口分配给许多其他服务器,即使它们位于不同的命名空间中。如果我使用 Agones ( https://github.com/googleforgames/agones/blob/release-1.9.0/examples/gameserver.yaml ) 分配随机端口,在某些时候我可能会用完它们来分配。

特拉菲克

我曾尝试使用 Traefik,但没有运气。IngressRoute 允许 TCP/UDP 从 Router 路由到 EntryPoint,然后将其路由到分配的服务。我不确定这是如何工作的,我尝试为服务设置注释并定义入口点,但它仍然拒绝工作:https ://doc.traefik.io/traefik/routing/providers/kubernetes-crd/#kind- ingressroutetcp

过去的

Agones 应该适用于游戏服务器,并且它支持TCPUDP服务端口协议,但同样没有运气。

流动

我已经在图表下方发布了关于事情应该如何工作的信息。我还有以下 YAML 文件,它将创建有状态集、PVC 和服务。您可以清楚地看到我尝试了 ExternalName 设置,所以也许我可以将 Minikube IP 设置为该名称并能够连接,但再次失败:

Steam 专用服务器工作流程

编辑:凹凸

0 投票
1 回答
88 浏览

jenkins - 作为 Jenkins 构建过程的一部分,如何跨多个集群创建和修改 Kubernetes 资源?

具体来说,现有 Kubernetes 集群中有几个资源(当前用 定义YAML),我想在构建过程中进行修改,还有一些我想从头开始创建。在每种情况下,我都希望在多个区域中这样做,以使所有区域保持同步。

有问题的资源是Agones fleets,看起来像这样(实际值已删除,但具有代表性):

如果有现有的fleet,我想将最新git commit的注入标签以及要使用的图像(假设它将在注册表中适当地标记)。

如果没有现有的fleet,对于某些值,我想循环并从头开始创建具有与上述相似特征的新车队。我尝试了几种不同的方法,但都失败了——从集群权限问题到尝试for在 Jenkins/Groovy 中使用非常直接的循环时出现的奇怪错误。

0 投票
1 回答
144 浏览

sockets - 使用 Kubernetes/Agones 的游戏网络

我目前正在开发一款多人游戏,旨在处理与单个游戏实例的 20-50 名玩家连接。

我当前的客户端连接模型:

  • 客户端从服务器休息端点请求连接
  • 服务器创建 2 个绑定到随机端口的新套接字(1 个 tcp 和 1 个 udp)
  • 客户端得到响应并连接

我看不出有什么明显的错误,但我现在质疑这是否是完成游戏服务器连接的一般方式。

为了进一步解释,我正在学习如何使用 Kubernetes 和 Agones 通过将它们包装在 Kubernetes pod 中来部署和管理应用程序/游戏实例。我主要使用官方指南 ( https://agones.dev/site/docs/getting-started/create-gameserver/ ) 和相关的 github 示例 ( https://github.com/googleforgames/agones /blob/release-1.15.0/examples)。

对于 Agones,我的理解是客户端连接是通过“GameServer”yaml 中“hostPort”中指定的端口进行的。我之前使用“hostNetwork=true”选项部署了一些带有普通 Kubernetes 的实例,它允许我的上述网络模型通过允许游戏实例直接绑定到主机端口并暴露给外部网络来工作。不过,对于 Agones,似乎至少不鼓励使用此选项(https://github.com/googleforgames/agones/issues/1389)。

我当然不是网络专家,所以请原谅我的无知,但是如果我只暴露一个端口,那么客户端连接应该如何处理呢?是所有流量都多路复用,还是我可以以某种方式直接将连接传递给其他套接字/端口并让它们自动暴露给外部网络?

0 投票
1 回答
57 浏览

kubernetes - Kubernetes / Agones 服务缩减

我有一个运行 x 数量的游戏服务器(pod)的部署。我正在使用 Agones 来确保与玩家连接的游戏服务器不会因缩减规模而停止。此外,我使用一个服务(“连接”到所有游戏服务器)作为 Pod 的 LoadBalancer,据我了解,当玩家连接到该服务时,它会随机选择一个游戏服务器。这在放大时效果很好,但在缩小时效果不佳。由于 Agones 会阻止上面有玩家的游戏服务器缩小,因此 Pod 的数量基本上不会减少,因为该服务没有考虑所需副本的数量(实际数量更高,因为上面有玩家的游戏服务器不会被缩小) .

有没有办法阻止 LoadBalancer 服务选择不再需要的游戏服务器(副本)?例如:当前的网络负载只需要 3 个副本,但目前有 5 个,因为有 5 个服务器上有播放器阻止它们关闭。我只想将新负载分布在 3 个所需的副本(游戏服务器)上,让其他 2 个有机会接触到 0 个玩家,因此它最终能够自行关闭。