上篇介绍了k8s集群的搭建,这一篇就主要介绍怎么运行agones提供的unity3d示例。

一、环境准备

打开110虚拟机,为了操作简单,我就直接用root用户操作了,创建一个目录,下面所有的操作都在这个目录下完成

$ mkdir /root/kubernetes
$ cd /root/kubernetes

二、在k8s集群中安装agones

官方提供了两种方式安装agones,yaml配置文件和helm,这儿直接通过yaml配置文件的方式安装。

1、创建agones-system命名空间

$ kubectl create namespace agones-system

2、apply配置文件,成功后会发现集群中多了几个以agones开头命名的pod

$ kubectl apply -f https://raw.githubusercontent.com/googleforgames/agones/release-1.9.0/install/yaml/install.yaml

301e2fec2c3a4f23904525fae6efb88a.png

如果在apply的过程中发现访问不了这个资源,可以直接在windows浏览器中打开这个资源,然后ctrl+s保存到本地文件install.yaml,用WinSCP将文件拷贝到“/root/kubernetes”目录,然后输入命令:

$ kubectl apply -f install.yaml

三、制作unity-simple-server镜像

从github克隆 agones项目到windwos宿主机上,进入“agones/examples/unity-simple”示例目录,README.md文件有详细的说明,这里只做简单的记录,其中1到5步可以直接在windows上完成,第6步需要在110虚拟机上完成。制作完成后的镜像我已经上传到Docker Hub上面,可以直接通过“docker pull guozhulei/unity-simple-server:0.3”命令获取。

1、用2018.4.2f1或者更高版本的unity打开这个示例,点击“Build Tool->Build Server”编译linux版本的服务器,这时会在示例目录下创建一个“Builds”目录,

d6a70581664b78cd8061a16a3a1a27ba.png

2、由于我是用的Docker Hub存放docker镜像,需要修改示例的Makefile文件,把仓库地址改为自己的私有地址,修改后的Makefile文件为:

REPOSITORY = guozhulei

mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
project_path := $(dir $(mkfile_path))
server_tag = $(REPOSITORY)/unity-simple-server:0.3

build-image:
    docker build $(project_path) --tag=$(server_tag)

# check if hosted on Google Cloud Registry
gcr-check:
    gcloud container images describe $(server_tag)

3、修改示例的Dockerfile文件为:

FROM ubuntu:18.04

WORKDIR /unity

# Need to build with UnityEditor in advance.
COPY Builds/Server/ ./

# [Workaround] Wait until the sidecar is ready.
CMD sleep 2
CMD chmod +x ./UnitySimpleServer.x86_64
CMD ./UnitySimpleServer.x86_64

4、修改gameserver.yaml文件为:

apiVersion: "agones.dev/v1"
kind: GameServer
metadata:
 generateName: "unity-simple-server-"
spec:
 ports:
  - name: default
 portPolicy: Dynamic
 containerPort: 7777
 template:
 spec:
 containers:
      - name: unity-simple-server
 image: guozhulei/unity-simple-server:0.3
 resources:
 requests:
 memory: "128Mi"
 cpu: "128m"
 limits:
 memory: "128Mi"
 cpu: "128m"

5、将Makefile文件、Dockerfile文件、gameserver.yaml文件、Builds文件夹,用WinSCP拷贝到“/root/kubernetes”目录,文件名或者文件夹名不能变。

6、生成docker镜像,并上传docker镜像到私有云

$ make build-image
$ docker push guozhulei/unity-simple-server:0.3

四、运行示例

1、运行服务器

$ kubectl create -f gameserver.yaml

2c7aad4bb8d63a1251c72f7780522f6b.png

用“kubectl get pods”命令可以看到是“ContainerCreating”,创建完成后就是“Running”状态。

2、等到创建完成后,查看服务器连接地址和端口号

$ kubectl get gs

4904f68af9c0001eb98509d4f3e8b490.png

3、在unity编辑器上编译客户端,依次点击“Build Tool->Build Client”,生成成功后打开客户端“agonesexamplesunity-simpleBuildsClientUnitySimpleClient.exe”,按照下图中标记的顺序依次操作,如果能看到服务器的返回,说明客户端和服务器通信成功

5a6ca0222ee350a9fa20ff18bdbb6d75.png

五、遇到的问题

1、在用unity编辑器打开示例的时候,发现cs脚本都只引用了一个路径,会报错,按照引用的路径把对应的文件拷贝到对应的位置就可以了。

2、在unity编辑器编译服务器的时候,因为我用了更高版本的编辑器,导致有些命名空间不对,直接按照对应的提示把不必要的代码全部删除了。

3、在“四-1”这步运行服务器的时候,发现服务器的状态一直是“CrashLoopBackOff”

10c6fed3737d68ec5981975df1676f19.png

直接去111虚拟机工作节点查看docker容器的日志,显示没权限

df0f8f5bd76355cfeafea0b0bece0835.png

只得手动进入一下“guozhulei/unity-simple-server:0.3”这个镜像看看为什么,发现没执行权限

$ docker run -it guozhulei/unity-simple-server:0.3 /bin/bash
$ ll

01692b0d64ad6473aa1e9f28fa142667.png

所以这就是为什么要在“三-3”这步修改Dockerfile文件,增加执行权限的命令。

4、如果k8s版本高于1.16.*,可能会遇到下面提示的错误,这是由于Go版本更新的问题,目前没找到解决办法,只能用官方推荐的k8s版本

Error from server (InternalError): error when creating "gameserver.yaml": Internal error 
occurred: failed calling webhook "mutations.agones.dev": Post "https://agones-controller-
service.agones-system.svc:443/mutate?timeout=30s": x509: certificate relies on legacy Common 
Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐