自顶向下学习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.mzph.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(…