使用Kubernetes搭建Factorio多人游戏服务器 (使用Docker和Kubernetes构建) 的步骤
请用中文来简述这篇文章。
这是Speee Advent Calendar 2017的第13天! 已经过了一半的时间了。
如果可以的话,请订阅。
前天是@yt-tanabe举办的SpeeeKaigi的制作方式(以及工程师文化)主题活动。
今天是@Tei1988使用Kubernetes进行Factorio游戏的日子。
通过阅读这篇文章,您可以学会使用Kubernetes构建Factorio游戏的多人服务器。
首先,Factorio是什么?
有一名玩家在某颗星球上不慎坠落,他利用该星球的资源制造了一枚火箭,并飞向太空等待援助,这是一个故事性的游戏。
官方网站、Steam、预告片
我們正在利用資源來製造火箭,但我們周圍只有鐵礦石和銅礦石等原材料,因此我們需要進行精煉和組合,製造更複雜的零件,例如齒輪和電子電路板。
需要制造火箭所需的零件数量庞大且种类繁多,因此手工制作是不可能的。
因此,我们建立工厂,并通过传送带输送材料,实现生产自动化。
建立多个工厂并实现生产自动化,观察材料不断组合并在传送带上流动,能够体验到一种神秘的成就感。
改進工廠運營率,或者為其他工廠作出調整,改變工廠佈局和資源配置的方式,這與程式編寫中的重構有類似之處。這是一款很好的遊戲,所有人,無論是否經常接觸程式碼,都能夠意識到重構的重要性。
事情的开始
“Factorio可以进行多人游戏。大家一起合作,发射火箭。
公司内已经有几个人拥有了这款游戏,并且决定要进行多人游戏。
那么,我们就需要让它支持多人游戏。
既然如此,我决定在记录步骤的同时,写一篇文章。”
在多人游戏中,有两种方法可供选择。
- 需要一个人担任服务器角色,其他人连接到该服务器来构建游戏服务器。
1种方法构成简单,但是服务器的角色每次都必须参与,给人带来了很大的负担。
因此,这次我们选择了第二种方法。
建立游戏服务器
Factorio提供了一个没有图形功能的、无头的游戏服务器。
另外,有志在dtandersen/factorio中提供了一个只需启动即可的Docker镜像。因此,我们决定使用这个Docker镜像。
我的下一个问题是在哪里部署。
最近我非常喜欢Kubernetes,甚至在Speee DEVELOPER BLOG上写了一篇题为”我 ❤️ Kubernetes”的文章,所以我决定将其部署在GKE上。
以下是部署的步骤,请参考:
那么,我们来亲自试玩一下Factorio的多人游戏吧。在启动Factorio之后,从菜单中选择“多人游戏 > 连接服务器”,然后输入指定的静态IP地址:34197。那么,你能登录成功吗?
顺便说一句,即使Factorio服务器由于某种原因崩溃,Kubernetes的自动部署可以帮助恢复Pod,所以基本上不需要进行任何额外的操作。
最后
我们现在正处于热烈地安装着Mods并和大约7个人一起开心地玩耍的阶段。矿石的种类增多了,所需生产物的种类也增加了,工厂变得非常复杂,不仅这样,重构工厂也变得更有趣了。在进行语音聊天的同时进行游戏会更加顺利。
只需告诉他们IP地址,他们就能立即加入,所以邀请进行多人游戏也非常轻松。
那么,祝你在工厂有一个愉快的生活。
明天,对新技术有着浓厚兴趣并撰写了类似于“尝试将SlackStatus与GoogleCalendar同步”以及“非工程师实现内部维基上的热力图”之类的文章的@nagayamacho3似乎要揭示圣诞老人的真正身份。请期待!
给你一点额外的东西。
(Bonus for you.)
让我们尝试引入Factorio的一个精彩之处 – 模组。
安装Mod
通过安装Mods,可以让Factorio的乐趣更加丰富。
一些玩家在进行多人游戏后,发现普通的Factorio已经无法满足他们的需要,于是决定引入Mods来增加乐趣。
在客户端上,可以从游戏界面安装Mod。只需点击想要安装的Mod,即可完成安装。
而在服务器端,则需要直接将Mod放入特定文件夹中。
由于Mods是与客户端共享的,所以将Mods复制到客户端是最快捷的方法。
这一次,我们决定将Mods添加到Docker镜像中。
另外,我们也决定不再使用ConfigMap来存储配置文件,而是将其包含在镜像中。
创建包含Mods的Docker映像的步骤如下。
-
- 克隆Tei1988/k8s-factorio的mods分支。
-
- 将Mods复制到files/mods文件夹中,不要忘记mod-list.json文件。
-
- 如果需要的话,还可以修改files/config/文件夹下的设置。
-
- 使用docker build -t gcr.io/项目ID/factorio:mods命令构建镜像。
- 使用docker push gcr.io/项目ID/factorio:mods命令推送镜像。
完成了Docker镜像的创建。
接下来,在部署到Kubernetes之前,请删除保存的数据。
如果你想要继续之前的保存进度,请创建一个本地备份,例如复制保存数据到本地或复制pd-factorio磁盘等。
重新创建pd-factorio磁盘会导致保存数据被删除。
最后,将创建的Docker镜像部署到Kubernetes。
我认为您可以使用以下命令进行部署。
-
- 请执行以下操作,以便正确替换IP和项目名称后运行:
将cat k8s.yml.sample文件的内容传递给sed命令,将””替换为”確保した静的IP”,然后将其输出传递给下一个sed命令,将””替换为”プロジェクトID”,最后将结果写入k8s.yml文件。
执行kubectl apply -f k8s.yml命令来应用k8s.yml文件。