kruise-game 是 openkruise 旗下的一個開源項目,旨在為遊戲工作負載(即遊戲伺服器)帶來雲端原生轉型。
但是遊戲伺服器到底是什麼?
遊戲伺服器基本上就是虛擬機器或容器,處理 PVP 多人線上遊戲後端的核心功能
下面我展示了現代 PvP 線上遊戲使用的基本遊戲伺服器架構
為什麼我們真的需要克魯斯遊戲。預設的 k8s 資源不足以滿足遊戲工作負載嗎?
現代 PvP 遊戲變得越來越複雜,例如,它們需要多個遊戲伺服器來處理不同類型的服務。
現代 PvP 遊戲(例如 valorant)需要遊戲伺服器進行遊說、配對,以及運行實際遊戲邏輯和管理遊戲狀態的伺服器。處理如此多的遊戲伺服器是一項艱鉅的任務,無法手動完成。那現在怎麼辦?
我們有 kubernetes 來拯救。 K8s 具有自動化操作和管理
功能可以為我們處理這個負擔,只需部署您的遊戲伺服器映像,我們就完成了,對嗎?不是真的
我希望事情這麼簡單。問題是你沒有在這裡部署常用的無狀態 Web 應用程式。遊戲伺服器不同,它們的要求也不同。 k8s 預設資源適合無狀態應用程序,但遊戲伺服器有更複雜的生命週期,它們是有狀態的,而且它們的網路要求也不同。
首先,遊戲伺服器需要直接無損連接到客戶端(udp 連線),為此我們需要 pod 的固定 IP 位址,k8s pod 的 IP 在刪除、縮放期間會變更。
如果將pod 用於遊戲伺服器,您也缺乏對pod 的控制,有一種稱為滾動更新的東西,您可以更新遊戲伺服器的某些實例來測試更新,並逐漸推廣到其他實例防止停機,K8s 調度程式不知道您正在使用遊戲伺服器,它會以隨機方式更新pod,基本上您無法控制遊戲伺服器的更新策略。所以您對遊戲伺服器更新幾乎沒有靈活性。
為了緩解這些問題,kruise-game 定義了兩個專門為遊戲伺服器工作負載設計的自訂資源 gameServer 和 gameserverSet
gameServer:指指定遊戲伺服器進行維運與管理作業的抽象。主要用於遊戲伺服器的更新順序控制、狀態控制、遊戲伺服器網路變更等運維和管理操作。
gameServerSet:指一組遊戲伺服器生命週期管理的抽象。主要用於副本數量管理、遊戲伺服器啟動等生命週期控制。
kruise-game 提供的遊戲伺服器管理功能:-
基於鏡像的熱更新和配置的熱重載
更新、刪除、隔離指定遊戲伺服器
內建多種網路模型(固定IP位址與連接埠、無損直連、全球加速)
自動縮放
自動化運作(服務品質)
獨立於雲端服務供應商
複雜的遊戲伺服器編排
下圖展示了 kruise-game 在 k8s 上的部署架構
開始玩克魯斯遊戲:0
你需要一個 kruise-game 的 k8s 集群,獲得 k8s 集群的最簡單方法是在你的機器上安裝 minikube,同時確保你的機器上安裝了 helm。
2.啟動 minikube
minikube start
3.使用helm安裝kruise-game
#kruise-game relies on openkruise so you need to install openkruise first # Firstly add openkruise charts repository if you haven't do this. $ helm repo add openkruise https://openkruise.github.io/charts/ # [Optional] $ helm repo update # Install the latest version. $ helm install kruise openkruise/kruise --version 1.6.3 #now instakk kruise-game $ helm install kruise-game openkruise/kruise-game --version 0.8.0
4.前往您的 minikube 儀表板
minikube dashboard
5.你應該有 kruise-game-system 命名空間,恭喜你安裝了 kruise-game
有關 kruise-game 的更多資訊和詳細信息,請參閱 kruise-game 文件。
感謝您的閱讀,希望您喜歡這個:)。
以上是使用 kruiseGame 進行雲端原生遊戲的詳細內容。更多資訊請關注PHP中文網其他相關文章!