自頂向下學習K8S--部署Agones

本文在本人博客,原文地址:http://viogami.tech/index.php/blog/346/

我是gopher,離不開云原生,自然也逃不了理解docker和K8S這倆。今天抽空想玩下agones,進而對K8S有實踐性的理解。

學一個新事物從底層理論學肯定是最系統的,但不是最工程的。對于K8S,我個人認為相比苦苦理解各種集群,節點,pods等等概念,不如實際上手一次,從實踐上逐步理解理論,自頂向下才是最快最高效的學習模式,因為目的是使用K8S,是工程化,而不是了解k8s架構,設計云云。

本文基本從0開始部署Agones,進而逐步理解docker,理解K8S。

相信如果你能發現本文,自然了解Agones是什么,如果不知道自行了解下,不做多介紹,引用官方介紹:

Agones 是一個開源平臺,用于部署、托管、擴展和編排專用游戲服務器,用于大型多人游戲,構建在行業標準的分布式系統平臺
Kubernetes 之上。

部署Agones只是一個任務性的引子,重點還是K8S.

準備工作

安裝docker-desktop

由于我是win機器,在一切之前,得介紹下開發環境,但很簡單。
首先得安裝docker,注意如下:

  • 打開任務管理器,看看cpu有沒有開啟虛擬化,沒有則在bios設置中開啟。(必要)
  • 安裝wsl,無需開啟hyper-v,所以家庭還是專業版的windows沒啥影響。
  • 自備代理工具,docker官網需要魔法。

安裝完docker基本就完成了。

由于是個人開發測試用,只用部署一個單節點集群就好了,而這在docker-desktop中已經集成了,很方便,如下所示,打開即可:

請添加圖片描述

kubectl get nodes

如果返回類似 Ready 狀態的節點,說明 Kubernetes 已經啟動成功。

注意 ?:Docker Desktop 的 Kubernetes 只能運行在單個節點上,不適用于生產環境的高可用集群。

vscode的K8S插件

安裝桌面版的docker是有圖形化界面的,很直觀,但K8S目前我們是沒有GUI的,需要嗎?并不一定,使用gui會更多的限制你。
Kubernetes 本身主要是通過 kubectl 命令行工具和 YAML 配置文件進行管理的。

雖然有kubernetes-dashboard,但別著急,在vscode的插件也有gui可以打開dashboard。推薦安裝docker和k8s插件,在vscode中集成開發,然后我逐步解釋下插件中每個顯示項的作用,從這里就開始理解如何使用K8S辣

請添加圖片描述

  • Namespace(命名空間)Kubernetes 內部的邏輯隔離單位,用于劃分不同的應用、環境或團隊。一個集群可以包含多個 Namespace,每個 Namespace 內的資源相互獨立
  • Workloads(工作負載)管理 Kubernetes 里運行的應用程序,本質上就是 運行 Pod 的控制器。Workload 負責定義應用如何部署、擴縮容、更新和運行。
  • Network(網絡) 負責 Kubernetes Pod 之間、Pod 和外部系統之間的通信。管理 Service、Ingress、Network Policy 這些 K8s 網絡資源。
  • Storage(存儲)管理 Kubernetes 里的持久化存儲,確保 Pod 重新啟動后數據不會丟失。Volume 只在 Pod 生命周期內有效,但 PersistentVolume(PV)可持久存儲數據。
  • Configuration(配置管理)管理應用的配置信息、環境變量、Secrets(敏感信息)。讓應用和環境解耦,比如可以在不修改代碼的情況下更改應用配置。
  • Custom Resource(自定義資源)擴展 Kubernetes,增加新的資源類型,比如 Agones 添加了 GameServer 資源。允許你 創建自己的 K8s API,以適配特定的業務需求。
  • Helm Releases(Helm 版本管理)管理 Helm 安裝的應用(比如 agones)。Helm 是 Kubernetes 的包管理工具,可以一鍵安裝、更新、刪除復雜應用。

但Docker Desktop 不包含K8S的包管理工具 Helm

但安裝了K8S插件會自動提示下載kubectlhelm,前者是命令行操作工具。都是編譯好的exe。如果需要可以配到環境變量中,位置在.../user/.vs-kubernetes

提出疑問-區別概念

好了,在部署之前,安裝了上文所說的插件,如果剛入門K8S,難免有一些疑問,下面我著重進行些概念補充,希望下面可以順利進行~

Kubernetes 中 Node 和 Pod 的關系

Node(節點)就是機器,它可以是:物理機(裸機服務器),虛擬機(云服務器、Docker Desktop 里的虛擬 K8s 節點),你的本機(如果你用 Docker Desktop Kubernetes)

Pod(Pod 是容器的封裝單位),Pod 運行在 Node上,一個Pod 里面可以有一個或多個容器,Pod共享存儲(Volume)、網絡(IP 地址)等,K8s 只管理 Pod,不直接管理容器

如果 Kubernetes 是一個數據中心:

  • Node = 一臺服務器
  • Pod = 服務器上的一個應用進程組(可能包含多個容器)
  • 容器 = 運行的進程(比如 Nginx、MySQL 等)

現實中,一個項目是不是只要一個k8s集群就夠了?

YES!一個 Kubernetes 集群足夠應付絕大部分的項目需求,包括擴展、彈性、資源管理和容器的自動化部署。

一個K8S集群中會有很多nodes,這些nodes就是物理上的機器,可以有很多個,每個nodes里有很多pods,pods才是實際的部署的應用。nodes已經完成了分布式,多集群可能確實在大型復雜項目的跨地區部署中用到,但咱可以不用了解

命名空間和nodes有什么區別,為什么有了nodes還需要namespace

  • Nodes(節點) 物理或虛擬機,負責運行 Pod 實際的計算資源(CPU、內存、存儲)
  • Namespace(命名空間) 邏輯隔離的環境,管理不同的 K8s 資源 邏輯上的組織單位,不影響物理資源分配
    可以把 Node 理解為 “真實的服務器”,而 Namespace 更像是 “應用的文件夾或項目空間”

安裝Agones

好了,終于來到重點也不算是重點的部分了。

但并不重要,因為你可以根據官方文檔逐步操作

根據agones官方文檔,安裝可以通過yaml文件,也可以通過helm包管理安裝。

我是用kubectl命令行拉取的yaml文件完成的安裝

kubectl create namespace agones-system
kubectl apply --server-side -f https://raw.githubusercontent.com/googleforgames/agones/release-1.48.0/install/yaml/install.yaml

然后你就可以在Custom Resource中發現拉去下來的服務了!

接下來按照官方文檔操作進行部署了,并不贅述,因為本文不是介紹怎么部署agones。
在這里插入圖片描述

本人使用rider及其K8S插件,在游戲開發的時候進行服務器集群控制的。記住命令行得到pod的ip和端口,接下來就是網絡通信的知識了。如果要在unity中和部署的服務器應用通信,自寫和后端的通信協議,Agones只是個后臺應用調度工具,不涉及和前端交互。

注意 ? Agones Unity SDK 適用于 服務器端(GameServer) 的 Unity 進程而不是前端!

例如:你用 Unity 制作了一款 服務器端模擬的游戲邏輯,需要讓 Agones 調度這個服務器。或者你的游戲服務器是 Unity 編寫的,想要與 Agones 交互來管理它的生命周期。但是,如果你想讓 Unity 客戶端 連接到 GameServer,那 Unity SDK 并不需要。客戶端應該直接用 WebSocket、TCP、UDP、HTTP 連接 GameServer。

結束

怎么就結束了?
因為從安裝agones敲下一行命令行開始,已經完成了一次K8S的體驗,只要了解從0到啟動一個K8S單節點集群的全過程每個操作的意義,那么恭喜你,已經入門K8S了,就這么簡單,剩下的內容需要在一次次部署應用,一次次開關容器中不斷積累吧。這不是整體圖看這個概念那個概念是什么意思可以解決的。在實踐中結束吧!

如果你有任何疑問,都可以評論聯系我~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/75935.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75935.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/75935.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋杯省模擬賽 階乘求值

問題描述 給定 n,求 n! 除以 1000000007的余數。 其中 n! 表示 n 的階乘,值為從 1 連乘到 n 的積,即 n!123…n。 輸入格式 輸入一行包含一個整數 n。 輸出格式 輸出一行,包含一個整數,表示答案。 樣例輸入 3樣…

如何在Webpack中配置別名路徑?

如何在Webpack中配置別名路徑? 文章目錄 如何在Webpack中配置別名路徑?1. 引言2. 配置別名路徑的基本原理3. 如何配置別名路徑3.1 基本配置3.2 結合Babel與TypeScript3.2.1 Babel配置3.2.2 TypeScript配置 3.3 適用場景與最佳實踐 4. 調試與常見問題4.1 …

協作機械臂需要加安全墻嗎? 安全墻 光柵 干涉區

安全墻是什么 文章目錄 安全墻是什么簡介1. 物理安全墻1.1 定義:1.2 作用機制:1.3 應用場景: 2. 虛擬安全墻2.2 定義:2.3 作用機制:2.3 應用場景: 3. 安全毛毯3.1 工作原理:3.2 特點3.3 應用場景…

Promise怎么使用,以及它解決了什么問題?

什么是 Promise? Promise 是一種用于處理異步操作的 JavaScript 對象,它代表了一個可能還未完成但將來會完成的操作的結果。Promise 的目的是解決回調函數(callback)帶來的問題,比如回調地獄(callback hel…

光譜范圍與顏色感知的關系

光譜范圍與顏色感知是光學、生理學及技術應用交叉的核心課題,兩者通過波長分布、人眼響應及技術處理共同決定人類對色彩的認知。以下是其關系的系統解析: ?1.基礎原理:光譜范圍與可見光? ?光譜范圍定義?: 電磁波譜中能被特定…

如何讓DeepSeek-R1在內網穩定運行并實現隨時隨地遠程在線調用

前言:最近,國產AI圈里的新星——Deepseek,簡直是火到不行。但是,你是不是已經對那些千篇一律的手機APP和網頁版體驗感到膩味了?別急,今天就帶你解鎖一個超炫的操作:在你的Windows電腦上本地部署…

leetcode33.搜索旋轉排序數組

思路源于 【小白都能聽懂的算法課】【力扣】【Leetcode33】搜索旋轉排序數組 | 二分查找 | 數組 主要是數組旋轉后分為左右兩個升序區間 ,如果mid落在左區間并且目標大小也在left-mid中,那么right右縮 class Solution {public int search(int[] nums, i…

《TypeScript 7天速成系列》第6天:TypeScript裝飾器+混入:高級編程模式揭秘

裝飾器是TypeScript中一項強大的元編程特性,被Angular和Vue3等主流框架廣泛使用。今天我們將深入探討這一高級特性。 裝飾器基礎 裝飾器是一種特殊類型的聲明,可以附加到類聲明、方法、訪問器、屬性或參數上。裝飾器使用expression形式,其中…

YOLO歷代發展 圖像增強方式 架構

YOLO1 YOLOV5 數據增強 mosaic 仿射變換(Affine)、透視變換(Perspective) 網絡搭建

NX二次開發刻字功能——布爾運算

刻字功能在經歷、創建文本、拉伸功能以后就剩下布爾運算了。布爾運算的目的就是實現文本時凸還是凹。這部分內容很簡單。 1、首先識別布爾運算的類型,我這里用到一個枚舉類型的選項,凸就是布爾求和,凹就是布爾求差。 2、其放置位置為創建拉伸…

【MySQL基礎】數據庫及表基本操作

作為運維工程師,掌握MySQL的基礎操作是日常工作的重要技能之一。本文將介紹MySQL中數據庫和表的基本操作,幫助您快速上手或復習這些核心概念。 1 數據庫基本操作 1.1 創建數據庫 create database db_name; -- 指定字符集和排序規則 create database d…

Python貝葉斯分層模型專題|對環境健康、醫學心梗患者、體育賽事數據空間異質性實證分析合集|附數據代碼

全文鏈接:https://tecdat.cn/?p41267 在大數據時代,多水平數據結構廣泛存在于環境健康、醫學研究和體育賽事等領域。本專題合集聚焦貝葉斯分層模型(Hierarchical Bayesian Model)的創新應用,通過氡氣污染數據與 季后…

基于 Qt / HTTP/JSON 的智能天氣預報系統測試報告

目錄 一、項目概述 1.1項目背景 1.2項目目標 二、功能需求 2.1 用戶界面功能 2.2 后臺功能 三、技術選擇 3.1 開發框架與工具 3.2 第三方 API 四、UI設計 4.1界面展示 4.2stylesheet樣式 五、代碼實現 1.構造函數 2.網絡請求響應處理函數 3.處理json數據 4.更新…

GitLab 中文版17.10正式發布,27項重點功能解讀【三】

GitLab 是一個全球知名的一體化 DevOps 平臺,很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版,專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料: 極狐GitLab 官網極狐…

DPO介紹+公式推理

1. 什么是DPO? DPO(Direct Preference Optimization)是一種用于對齊大語言模型(LLMs)的新型方法,旨在高效地將人類偏好融入模型訓練中。它提供了一種替代強化學習(如 RLHF, Reinforcement Learn…

C語言基礎—構造類型

數據類型 1.基本類型/基礎類型 整型 短整型:short[int] --2字節 基本整型:int --4字節 長整型:long[int] --32位4字節/64位8字節 長長整型:long long [int] (C99) 注意:以上類型又都分為sig…

2025年高壓電工考試真題分享

以下是一些高壓電工考試題: 單選題 1、高壓架空線路的檔距一般為( )。 A. 20 - 30m B. 30 - 50m C. 50 - 80m D. 80 - 100m 答案:B。解析:高壓架空線路檔距一般在 30 - 50m,這樣的檔距能較好地保證線…

什么是SQL作業

SQL作業是在數據庫服務器上按特定時間或間隔自動執行的計劃任務或流程,這些作業由Microsoft SQL Server中的SQL Server代理管理,對于自動執行日常任務(如數據庫系統中的備份、數據導入和報告生成)以及確保及時準確地處理和更新數據…

【數據分享】基于聯合國城市化程度框架的全球城市邊界數據集(免費獲取/Shp格式)

在全球城市化進程不斷加快的今天,如何精準定義和測量“城市”成為關鍵問題。不同國家和機構采用不同的標準,導致全球城市化水平的統計結果存在較大差異。同時,由于數據來源分散、標準不統一,獲取一套完整、可比的全球城市邊界數據…

劉火良FreeRTOS內核實現與應用學習之6——多優先級

在FreeRTOS中,數字優先級越小,邏輯優先級也越小;在任務創建時,會根據任務的優先級將任務插入就緒列表不同的位置。 List_t pxReadyTasksLists[ configMAX_PRIORITIES ] 就緒列表是一個數組,數組中存儲的是就緒任務TCB(…