让我们为游戏玩家设定一个场景:你正在进行一场人生中最精彩的比赛(你希望今天也能进行流媒体游戏)。你正在瞄准完美的制胜一击,你已经在想象胜利的画面会弹出......然后游戏出现了延迟。你被对手干掉了。游戏结束。
我们都有过这样的经历,在实时游戏中,一个小故障让你失去了荣耀和胜利的时刻。对这种经历的沮丧导致了完全自托管游戏的再次流行,这样你就可以作为玩家控制自己的命运。但遗憾的是,并不是每款游戏或每个玩家都能选择自托管。但是,如果我们告诉你有一种方法,可以在无需购买和维护自己的硬件的情况下,将延迟问题消除在萌芽状态呢?
只需稍加开发,您就可以建立自己的分布式游戏天堂,让服务器离您(玩家)更近,创造自己的低延迟体验。进入强大的三人组: Xonotic, K3s和 阿卡迈云.
边缘到底是什么?
边缘计算不依赖于数百(甚至数千)英里外的大型集中式数据中心,而是将处理能力带到离数据源更近的地方,在这种情况下,数据源就是你。这大大降低了产生可怕延迟的延迟时间,原因很简单,数据不需要跑那么远。
为什么选择 K3?保持轻便灵活
K3s 是一个轻量级 Kubernetes 发行版。可以把 Kubernetes(或 K8s)想象成一个非常智能、高效的应用程序管理器,它可以处理部署、扩展,并确保一切顺利运行。K3s 是 K8s 的一个分支,专为资源有限的环境而设计。它小巧、快速、高效,可以成为您的游戏基础架构帮手。
阿戈内斯呢?游戏服务器大师
Agones是一个开源的 Kubernetes 原生项目,专为管理专用游戏服务器而设计。它能处理游戏服务器实例的扩展、分配和运行等复杂问题,让你可以专注于碎片化游戏,而不是摆弄服务器配置。
让我们开始建设!(有趣的部分)
We’re going to set up a Xonotic server (a fast-paced, free, open-source FPS) on a Linode instance, managed by K3s and Agones. Get ready to experience Xonotic like never before! If you’d like to follow our full guide, go to the docs.
步骤 1:Terraform 时间--奠定基础
Terraform是我们的 "基础设施即代码 "工具。它能让我们在文件中定义服务器设置,使其可重复且易于管理。首先,安装它:
brew install terraform
(注:如果您使用的不是 macOS,请查看Terraform 网站,了解适用于您操作系统的安装说明)。

步骤 2:项目设置 - 您的游戏总部
让我们为项目创建一个目录:
mkdir xonotic
cd xonotic
步骤 3:Terraform 脚本--构建服务器(和防火墙)
创建一个名为 main.tf
并粘贴以下代码。
这就是神奇的地方!我们将定义 Linode 实例、设置防火墙并配置所需的一切。
在本例中,我们在Akamai的分布式计算区域之一丹佛部署了一个专用计算实例。我们建议使用8GB专用实例,它有4个vCPU,适合多个挑战者使用。
注意:您需要访问分布式计算区域,目前这些区域的可用性有限,因此本示例代码无法按原样运行。
# Specify the required Terraform provider
terraform {
required_providers {
linode = {
source = "linode/linode"
version = ">= 1.27.0" # Ensure a version that supports metadata
}
}
}
# Define variables for sensitive information
variable "linode_token" {
description = "Linode API token"
type = string
sensitive = true
}
variable "root_password" {
description = "Root password for the instance"
type = string
sensitive = true
}
variable "admin_ip" {
description = "IPv4 address to be used to access the instance"
type = string
sensitive = true
}
# Configure the Linode provider
provider "linode" {
token = var.linode_token
}
# Define the cloud-init configuration
data "template_file" "cloud_init" {
template = <<EOF
#cloud-config
package_update: true
package_upgrade: true
runcmd:
- apt update -y
- apt upgrade -y
EOF
}
# Create a 8GB dedicated Linode instance in Denver
resource "linode_instance" "my_instance" {
label = "xonotic-game-server"
region = "us-den-1"
type = "g6-dedicated-edge-4"
image = "linode/ubuntu20.04"
root_pass = var.root_password
booted = true
metadata {
user_data = base64encode(data.template_file.cloud_init.rendered)
}
}
# Create a firewall to allow incoming traffic on port 22 and 7000-8000
resource "linode_firewall" "my_firewall" {
label = "xonotic-firewall"
# Drop everything that is not covered by an explicitly rule
inbound_policy = "DROP"
# Allow all outbound traffic
outbound_policy = "ACCEPT"
# Rule to allow SSH (port 22)
inbound {
label = "allow-ssh"
action = "ACCEPT"
protocol = "TCP"
ports = "22"
ipv4 = [var.admin_ip]
}
# Rule to allow custom port range (7000-8000)
inbound {
label = "allow-custom-ports"
action = "ACCEPT"
protocol = "UDP"
ports = "7000-8000"
ipv4 = ["0.0.0.0/0"]
ipv6 = ["::/0"]
}
# Rule to allow Agones port 8080
inbound {
label = "allow-custom-ports"
action = "ACCEPT"
protocol = "TCP"
ports = "8080"
ipv4 = ["0.0.0.0/0"]
ipv6 = ["::/0"]
}
# Associate the firewall with the instance
linodes = [linode_instance.my_instance.id]
}
# Output the instance's IP address
output "instance_ip" {
value = linode_instance.my_instance.ip_address
}
现在,创建一个名为 terraform.tfvars
并添加您的 Linode API 令牌和根密码(别忘了替换占位符!):
linode_token = "your_linode_api_token"
root_password = "your_root_password"
admin_ip = "your_ipv4_address/32"
重要安全提示: 保持您的 terraform.tfvars
文件安全和 从不 提交到公共存储库!
如果您不确定当前的 IP 地址,可以使用以下命令返回当前的公共 IP 地址。
curl http://whatismyip.akamai.com
第 4 步:初始化和应用--让Terraform 做它该做的事!
首先,初始化Terraform:
terraform init
这将下载 Linode 提供程序。然后,应用配置:
terraform apply
系统会提示您确认更改。键入 yes
并点击 Enter。Terraform 现在将为你的 Linode 实例进行配置,并设置防火墙。这可能需要几分钟时间。喝杯咖啡吧(或者练习一下瞄准......)。
步骤 5:SSH 登录 - 服务器在等着你!
Terraform 完成后,将输出实例的 IP 地址。您也可以在 Linode 云管理器上新建实例的网络选项卡中找到反向 DNS 名称。使用 SSH 进行连接:
ssh root@your_instance_ip_or_dns
替换 your_instance_ip_or_dns
使用实际 IP 地址或 DNS 名称。系统会提示你输入在 terraform.tfvars
.
第 6 步:安装 K3s--轻量级 Kubernetes 强国
这非常容易!只需在 Linode 实例上运行此命令即可:
curl -sfL https://get.k3s.io | sh -
下载并安装 K3s。需要一两分钟。
步骤 7:安装 Agones - Game Server Orchestration Time!
现在我们安装Agones,它将管理我们的 Xonotic 游戏服务器。运行以下命令
kubectl create namespace agones-system
kubectl apply --server-side -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/install/yaml/install.yaml
这将为 Agones 创建一个专用命名空间,并将其部署到 K3s 集群。
步骤 8:确认 Agones 正在运行 - 检查状态
让我们确保一切顺利运行:
kubectl describe --namespace agones-system pods
您应该会看到显示 Agones pod 正在运行的输出结果。
第 9 步:部署并获取 Xonotic 游戏服务器状态。
kubectl apply -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/examples/xonotic/fleet.yaml
watch kubectl describe gameserver
步骤 10:获取游戏服务器 IP - 准备连接!
获取游戏服务器及其 IP 地址列表:
kubectl get gs
步骤 11:Xonotic 客户端 - 下载并安装
如果您还没有 Xonotic 客户端,请从https://xonotic.org/ 下载适用于您操作系统的 Xonotic 客户端。
步骤 12:连接和游戏!- 碎片时间
- 启动 Xonotic: 启动客户端。
- 多人模式: Go "多人游戏"。
- 服务器连接:选择手动加入服务器。
- 输入 IP 和端口: 输入从
kubectl get gs
指挥。 - 加入游戏:连接并享受低延迟的 Xonotic 体验!
清理(当你结束统治时)
移除阿戈内斯舰队和游戏服务器实例:
kubectl delete -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/examples/xonotic/fleet.yaml
然后您可以使用 terraform destroy
在项目目录中删除 Linode 实例和防火墙,以避免进一步的成本增加。
结束语游戏的未来掌握在你手中
您刚刚使用边缘计算、K3 和 Agones 构建了一个强大、低延迟的游戏设置。这展示了如何摆脱对游戏提供商自有服务器的完全依赖,让您的游戏体验离家更近。这将使游戏更流畅、反应更灵敏、更有趣,而且不会再有延迟引起的损失。
Akamai在全球拥有超过25个分布式核心计算区域,可供云计算客户使用。为了让工作负载离家更近 ,您可以利用我们的分布式计算区域,在云提供商服务不足的主要城市(包括奥克兰、约翰内斯堡和波哥大)部署专用实例。注册账户,查看可用分布式区域的完整列表,并与我们的云计算顾问取得联系,了解您是否有资格访问您所在位置的资源或创建支持票据。
If you want to learn more, check out our guide on how to set up a Xonotic server with K3s and Agones.
注释