繼上一篇詳細介紹如何運用 Kubernetes 以及開源軟體打造 Agones,這篇將帶您初步實作開始使用 Agones。
打造 Agones、多個 AAA 多人遊戲並擁有遊戲產業最多經驗之一的公司,Ubisoft:
“我們的目標是為玩家持續打造一個高品質、完美無缺的遊戲體驗。 Agones 提供一個更有彈性、更好控制的遊戲伺服器讓我們的使用者可以部署。這次的合作結合了 Google Cloud 對於部署 Kubernetes 的專業知識以及我們對於遊戲開發的經驗與理解。”
— Carl Dionne, Development Director, Online Technology Group, Ubisoft.
開始使用 Agones
可以使用 Kubernetes 原生的指令 kubectl 以及 API,因為 Agones 完完全全是用 Kubernetes 打造的。
創建一個遊戲伺服器
在 Kubernetes 上部署一個遊戲伺服器跟一般應用程式部署相同。舉例來說,遊戲伺服器就建置在一個映像檔中:
Dockerfile
FROM debian:stretch
RUN useradd -m server
COPY ./bin/game-server /home/server/game-server
RUN chown -R server /home/server &&
chmod o+x /home/server/game-server
USER server
ENTRYPOINT ["/home/server/game-server"]
藉由安裝 Agones,使用者可以在 Kubernetes 中新增一個 “GameServer” resource,包含 Kubernetes Pod 當中設定。
gameserver.yaml
apiVersion: "stable.agon.io/v1alpha1"
kind: GameServer
metadata:
name: my-game-server
spec:
containerPort: 7654
# Pod template
template:
spec:
containers:
- name: my-game-server-container
image: gcr.io/agon-images/my-game-server:0.1
接著使用 kubectl 指令或是 Kubernetes API:
$ kubectl apply -f gamesever.yaml
gameserver "my-game-server" created
Agones 會負責啟動於 yaml 檔中定義的遊戲伺服器,並分配一個公開的 IP 與 port 給 process,好讓使用者能透過這些資訊連線至伺服器。 Agones 甚至透過整合在伺服器的 SDK,可以追蹤到 GameServer 的生命週期。
使用者依然可以透過 kubectl 以及 Kubernetes API 來取得 GameServer 的詳細資訊,包括 State、玩家連線的 IP 位址以及 Port。
$ kubectl describe gameserver my-game-server
Name: my-game-server
Namespace: default
Labels:
Annotations:
API Version: stable.agones.dev/v1alpha1
Kind: GameServer
Metadata:
Cluster Name:
Creation Timestamp: 2018-02-09T05:02:18Z
Finalizers:
stable.agones.dev
Generation: 0
Initializers:
Resource Version: 13422
Self Link: /apis/stable.agones.dev/v1alpha1/namespaces/default/gameservers/my-game-server
UID: 6760e87c-0d56-11e8-8f17-0800273d63f2
Spec:
Port Policy: dynamic
Container: my-game-server-container
Container Port: 7654
Health:
Failure Threshold: 3
Initial Delay Seconds: 5
Period Seconds: 5
Host Port: 7884
Protocol: UDP
Template:
Metadata:
Creation Timestamp:
Spec:
Containers:
Image: gcr.io/agones-images/my-game-server:0.1
Name: my-game-server-container
Resources:
Status:
Address: 192.168.99.100
Node Name: agones
Port: 7884
State: Ready
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal PortAllocation 3s gameserver-controller Port allocated
Normal Creating 3s gameserver-controller Pod my-game-server-q98sz created
Normal Starting 3s gameserver-controller Synced
Normal Ready 1s gameserver-controller Address and Port populated
Agones 的下一步
Agones 還在早起開發階段,但是我們相當看好它。已經著手在進行新功能 game server Fleets、v0.2 版本釋出、支援 Windows 系統規劃、伺服器數據統計與顯示、自動擴展 node等。
使用者可以搶先使用 Agones v0.1的 alpha 版本,直接安裝在任一 Kubernetes 叢集如 GKE 或是 minikube。
相關文章
https://blog.gcp.expert/introduce-agones-host-game-server-on-kubernetes-1/