我尝试在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

使用IBM云容器服务(Kubernetes)引入Minecraft服务器(Spigot)。
水龙头在Minecraft中,有两种玩法形式:“单人游戏”是在本地进行的,而“多人游戏”则是多个用户一起玩的。
“多人游戏”可以让多个用户共同建立村庄,并且外部用户可以开发各种插件,为其提供支持。
这次我们将使用Minecraft服务器中的Spigot。
使用Java的多个API链接在一起,并以jar文件格式进行插件开发,任何人都可以做到这一点。
条件前提
-
需要在IBM Cloud Pay-as-you-go账户上注册
- 需要在IBM Cloud Pay-as-you-go账户上注册
-
- 已经在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
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
由于轻量级计划无法选择部署地区,因此需要在控制台上确认部署地区后,再使用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
$ 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
$ 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
# 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
$ 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
$ 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
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
点击“添加服务器”,按照以下方式进行输入。
名称内容サーバー名事由にわかりやすいもので。今回はibmcloud-spigotとしましたサーバーアドレス{Public IP}:{ポート番号}
今回は、168..**.83:31092となります。
点击“完成”后,会与服务器进行测试连接,并且绿色的天线会升起。
点击服务器名称后,成功登录到了Minecraft的世界。

在Minecraft的世界里,有怪物、动物、村民和魔法师。由于存在敌对角色,如果将其放置到天亮之前,有可能会死亡,所以要注意。
总结我本想介绍一些只有使用IBM云容器服务才能完成的事情,但是这部分我打算在之后的博文中详细说明。
因为实验性的引入,安全方面也存在许多问题。
裸露的spigot服务器也有人试图破坏Minecraft的世界。
由于在网络上也有类似的情况,所以我打算以后再看看。
由于这是一个单节点轻量级计划,所以在有多个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
点击“添加服务器”,按照以下方式进行输入。
名称内容サーバー名事由にわかりやすいもので。今回はibmcloud-spigotとしましたサーバーアドレス{Public IP}:{ポート番号}
今回は、168..**.83:31092となります。
点击“完成”后,会与服务器进行测试连接,并且绿色的天线会升起。
点击服务器名称后,成功登录到了Minecraft的世界。

在Minecraft的世界里,有怪物、动物、村民和魔法师。由于存在敌对角色,如果将其放置到天亮之前,有可能会死亡,所以要注意。
总结我本想介绍一些只有使用IBM云容器服务才能完成的事情,但是这部分我打算在之后的博文中详细说明。
因为实验性的引入,安全方面也存在许多问题。
裸露的spigot服务器也有人试图破坏Minecraft的世界。
由于在网络上也有类似的情况,所以我打算以后再看看。
$ ~/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

名称内容サーバー名事由にわかりやすいもので。今回はibmcloud-spigotとしましたサーバーアドレス{Public IP}:{ポート番号}
今回は、168..**.83:31092となります。
点击“完成”后,会与服务器进行测试连接,并且绿色的天线会升起。
点击服务器名称后,成功登录到了Minecraft的世界。

在Minecraft的世界里,有怪物、动物、村民和魔法师。由于存在敌对角色,如果将其放置到天亮之前,有可能会死亡,所以要注意。
今回は、168..**.83:31092となります。



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

总结我本想介绍一些只有使用IBM云容器服务才能完成的事情,但是这部分我打算在之后的博文中详细说明。
因为实验性的引入,安全方面也存在许多问题。
裸露的spigot服务器也有人试图破坏Minecraft的世界。
由于在网络上也有类似的情况,所以我打算以后再看看。