技術專欄

集結國內外精選文章,掌握最新雲端技術新知與應用 

iKala Cloud / 部落格 / 產業解決方案 / Agones 是什麼?用 Kubernetes 打造開源遊戲伺服器代管平台 (二)

Agones 是什麼?用 Kubernetes 打造開源遊戲伺服器代管平台 (二)

上一篇詳細介紹如何運用 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 Fleetsv0.2 版本釋出、支援 Windows 系統規劃、伺服器數據統計與顯示、自動擴展 node等。

使用者可以搶先使用 Agones v0.1的 alpha 版本,直接安裝在任一 Kubernetes 叢集如 GKE 或是 minikube

相關文章

https://blog.gcp.expert/introduce-agones-host-game-server-on-kubernetes-1/

(原文翻譯自:https://cloudplatform.googleblog.com/2018/03/introducing-Agones-open-source-multiplayer-dedicated-game-server-hosting-built-on-Kubernetes.html)

 

分享本文:
FacebookLineTwitter
回到頂端