我尝试在IBM云容器服务上启动了一个Minecraft服务器(Spigot)

我在IBM云容器服务上搭建了一个Minecraft服务器(Spigot)
这篇文章是2017年IBM云冒险日历第14天的文章。

首先最近,Minecraft和任天堂Switch版相继上市,引起了身边的热潮。而在PC版(Java版)中,现在可以自己运营多人游戏服务器了。然而,仅仅有能力运营多人游戏服务器并不足够有趣。你还可以制作自己的插件,拓展了无限的可能性。

“在教育领域中,Minecraft得到了广泛应用。Minecraft的开发团队被Microsoft收购,他们还提供了可以在Windows10、X-Box、Nintendo Switch等跨平台进行游戏的版本,并推出了专为教育目的的Education Edition。”

有什么好笑的呢?Minecraft是一款被称为“盒子庭院游戏”的模拟游戏。有许多像《模拟城市》和《A 列车行驶》等标题也出现了。这是我非常喜欢的领域。

在这个微缩模拟世界游戏中,你可以建造自己的家园、冒险探索,还能够制作电路并尝试创作各种东西,这使得《我的世界》成为一款更贴近真实生活的游戏。教育领域尤其重视其中的「制作电路并尝试创作各种东西」这一部分,甚至有一些地方将其纳入课程中。

IBM云和Minecraft实际上,关于在IBM Cloud上使用Minecraft进行实验的事情已经进行过了。
虽然在网上也有公开,但是版本有点旧,所以今天的文章首先将重点放在“在IBM Cloud上搭建Minecraft的多人游戏服务器”,然后日后再来处理“连接Watson”的部分。

使用 Spigot 服务器和 Watson Diag,与 Dr.Watson 进行对话
IBM developerWorks 医疗版 Minecraft

image.png

使用IBM云容器服务(Kubernetes)引入Minecraft服务器(Spigot)。

水龙头在Minecraft中,有两种玩法形式:“单人游戏”是在本地进行的,而“多人游戏”则是多个用户一起玩的。

“多人游戏”可以让多个用户共同建立村庄,并且外部用户可以开发各种插件,为其提供支持。
这次我们将使用Minecraft服务器中的Spigot。

使用Java的多个API链接在一起,并以jar文件格式进行插件开发,任何人都可以做到这一点。

条件前提

    1. 需要在IBM Cloud Pay-as-you-go账户上注册

 

    1. 已经在IBM Cloud上部署了Container Service轻型计划集群或更高版本

 

    在IBM Cloud Container Service(Kubernetes)集群的相同区域存在CloudFoundry组织和命名空间。

使用IBM云按需付费账户进行注册。目前有一种名为IBM Cloud免费账户的账户,无需信用卡注册即可免费使用。然而到发布日期为12/14时,尚无法部署kubernetes集群。

2. 已经在IBM Cloud上部署了Container Service的Lite计划集群或更高级别的计划。您可以在IBM Cloud按需付费账户上使用免费的Kubernetes集群,只需要提供信用卡信息和身份证明。

3. 在IBM云容器服务(kubernetes)集群的相同地区中,存在CloudFoundry组织和命名空间。在本文中

登录这次轻量级计划的Kubernetes集群已经部署在悉尼。
由于轻量级计划无法选择部署地区,因此需要在控制台上确认部署地区后,再使用bx命令进行登录。

$ bx login -a api.au-syd.bluemix.net
API エンドポイント: api.au-syd.bluemix.net

确认群集

$ bx target --cf
$ bx cs clusters
OK
Name    ID                                 State    Created          Workers   Datacenter   Version   
hogehoge   d576c****1884e62a5f4e132a20e4b2c   normal   34 minutes ago   1         mel01        1.7.4_1504   

为了kubectl,读取集群配置文件。

$ bx cs cluster-config ssk8s
コマンド実行結果に出てくる "export KUBECONFIG="をコピーして実行する
$ export KUBECONFIG=/Users/sakaigawa/.bluemix/plugins/container-service/clusters/hogehoge/kube-config-mel01-hogehoge.yml

创建Dockerfile

# v0.1 run spigot!
FROM centos:latest
MAINTAINER Shoichiro Sakaigawa “sakaigawa@pumpkinheads.jp”
RUN yum update-y &&\
    yum install -y git wget java-1.8.0-openjdk java-1.8.0-openjdk-devel &&\
    mkdir minecraft &&\
    wget "https://hub.spigotmc.org//jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar" -O minecraft/BuildTools.jar &&\
    git config --global core.autocrlf input &&\
    java -jar minecraft/BuildTools.jar --rev 1.12.2 &&\
    rm -rf Bukkit CraftBukkit Spigot BuildData apache-maven-* work craftbukkit-*.jar minecraft
RUN echo "eula=true" > eula.txt &&\
    mkdir plugins
CMD java -Xms512m -Xmx1024m -jar spigot-1.12.2.jar nogui
EXPOSE 25565

容器构建登录至IBM云的Docker Registry,这是Docker-Registry的私有版本,并构建带有标记的docker镜像。

$ bx cr login
$ docker build -t registry.au-syd.bluemix.net/hogehoge/spigot-ibm-cloud .

将构建好的容器推送到Docker注册表。

$ docker push registry.au-syd.bluemix.net/hogehoge/spigot-ibm-cloud
$ bx cr image-list
イメージをリストしています...

リポジトリー                                         名前空間   タグ     ダイジェスト   作成            サイズ   脆弱性の状況   
registry.au-syd.bluemix.net/hogehoge/spigot-ibm-cloud   hogehoge      latest   fb75af728a41   5 minutes ago   398 MB   OK   

OK

定义/提交Deploy/Service的设置配置。这次我们主要试验一下,所以不详细写内容,
Pod一个,端口使用NodePort方式进行公开,不进行负载均衡。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: spigot
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: spigot
    spec:
      containers:
      - name: spigot
        image: registry.au-syd.bluemix.net/ssk8s/spigot-ibm-cloud
---
apiVersion: v1
kind: Service
metadata:
  name: spigot-service
  labels:
    run: spigot
spec:
  selector:
    app: spigot
  type: NodePort
  ports:
   - protocol: TCP
     port: 25565

使用 kubectl 执行 Pod 和 Service 的部署。

$ ~/kubectl create -f deploy.yml 
deployment "spigot" created
service "spigot-service" created

让我们试着连接到Minecraft。

请确认服务器地址。使用bx cs workers命令,找到执行Kubernetes的worker的外部IP。
由于这是一个单节点轻量级计划,所以在有多个Kubernetes集群节点的情况下,需要先确定Pod正在运行的worker,然后进行操作。
将命令结果中的公共IP记录下来。

$ bx cs workers ssk8s
OK
ID                                                 Public IP      Private IP       Machine Type   State    Status   Version   
kube-mel01-pad576*****884e62a5f4e132a20e4b2c-w1   168.*.***.83   10.118.1**.178   free           normal   Ready    1.7.4_1504   

使用kubectl get svc命令来查看外部公开端口号。在这个例子中,我们发现容器的端口是25565,而外部的端口是冒号右边的31092。

$ ~/kubectl get svc
NAME             CLUSTER-IP      EXTERNAL
-IP   PORT(S)           AGE
kubernetes       172.21.0.1      <none>        443/TCP           1d
spigot-service   172.21.47.159   <nodes>       25565:31092/TCP   1d
image.png点击“添加服务器”,按照以下方式进行输入。

名称内容サーバー名事由にわかりやすいもので。今回はibmcloud-spigotとしましたサーバーアドレス{Public IP}:{ポート番号}
今回は、168..**.83:31092となります。

image.png点击“完成”后,会与服务器进行测试连接,并且绿色的天线会升起。

image.png点击服务器名称后,成功登录到了Minecraft的世界。

image.png
在Minecraft的世界里,有怪物、动物、村民和魔法师。由于存在敌对角色,如果将其放置到天亮之前,有可能会死亡,所以要注意。

image.png

总结我本想介绍一些只有使用IBM云容器服务才能完成的事情,但是这部分我打算在之后的博文中详细说明。

因为实验性的引入,安全方面也存在许多问题。
裸露的spigot服务器也有人试图破坏Minecraft的世界。
由于在网络上也有类似的情况,所以我打算以后再看看。

bannerAds