当前位置: 首页 > article >正文

自顶向下学习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了,就这么简单,剩下的内容需要在一次次部署应用,一次次开关容器中不断积累吧。这不是整体图看这个概念那个概念是什么意思可以解决的。在实践中结束吧!

如果你有任何疑问,都可以评论联系我~

相关文章:

自顶向下学习K8S--部署Agones

本文在本人博客,原文地址:http://viogami.tech/index.php/blog/346/ 我是gopher,离不开云原生,自然也逃不了理解docker和K8S这俩。今天抽空想玩下agones,进而对K8S有实践性的理解。 学一个新事物从底层理论学肯定是最…...

unity中Xcharts图表鼠标悬浮表现异常

鼠标悬浮在面板附近,只显示单独的一个项目 而且无论鼠标如何移动,根本没有效果。 解决方案: 需要在对应的Canvas上绑定主相机才可以 鼠标移动到项目上就有信息展示了...

2025年最新自动化/控制保研夏令营预推免面试真题分享(东南大学苏州校区/华东理工/南航/天大)

笔者来2021级本科自动化专业,以下部分将介绍我在夏令营以及预推免期间发生经历和问题 东南大学苏州校区蒙纳士大学联培 东南大学苏州校区的项目算是一个比较小众的项目,是第一年在苏州校区,二三年到南京校区找导师(不提供住宿自…...

【Java SE】包装类 Byte、Short、Integer、Long、Character、Float、Double、Boolean

参考笔记:java 包装类 万字详解(通俗易懂)_java包装类-CSDN博客 目录 1.简介 2.包装类的继承关系图 3.装箱和拆箱 3.1 介绍 3.2 手动拆装箱 3.3. 自动拆装箱 ​4.关于String类型的转化问题 4.1 String类型和基本类型的相互转化 4.1.1 String —…...

口腔种植全流程AI导航系统及辅助诊疗与耗材智能化编程分析

一、系统架构与编程框架设计 口腔种植全流程人工智能导航系统的开发是一项高度复杂的多学科融合工程,其核心架构需在医学精准性、工程实时性与临床实用性之间实现平衡。系统设计以模块化分层架构为基础,结合高实时性数据流与多模态协同控制理念,覆盖从数据采集、智能决策到…...

小林coding-10道Java集合面试题

1.数组与集合区别,用过哪些?说说Java中的集合?Java中的线程安全的集合是什么?Collections和Collection的区别?集合遍历的方法有哪些? 2.List?讲一下java里面list的几种实现,几种实现有什么不同&#xff…...

Java 集合中ArrayList与LinkedList的性能比较

一、需求: 头部插入‌:向列表头部插入10万个整数。‌随机访问‌:从列表中间位置连续获取1万个元素。‌头部删除‌:从列表头部连续删除10万个元素。 二、 使用ArrayList与LinkedList测试 //常量定义,用于测试操作的次数…...

SQL问题分析与诊断(8)——前提

8.1. 前提 与其他关系库类似,SQL Server中,当我们对存在性能问题的SQL语句进行分析和诊断时,除了获取该SQL语句本身外,还需要获取SQL语句相应的查询计划及其相关的数据环境。这里,所谓数据环境,具体是指SQ…...

漏洞发现:AWVS 联动 XRAY 图形化工具.(主动+被动 双重扫描)

漏洞发现:AWVS 联动 XRAY 图形化工具. 漏洞发现是网络安全领域的关键环节,指通过技术手段识别计算机系统、网络设备或软件中存在的设计缺陷、配置错误或代码漏洞的过程。这些漏洞可能被攻击者利用,导致数据泄露、服务中断或权限提升等风险。…...

上门家政小程序实战,从0到1解决方案

一、逻辑分析 上门家政小程序主要涉及用户端和服务端两大部分。用户端需要实现服务浏览、预约下单、订单跟踪等功能;服务端则要处理订单管理、服务人员管理、数据统计等任务。以下是详细的功能模块分析: 用户注册与登录:用户通过手机号或第三…...

Linux ping/telnet/nc命令

在Linux操作系统中,ping命令用于测试网络连接和发送数据包到目的主机。 然而,ping命令默认情况下只能测试IP地址和域名,而无法直接测试端口号。 ping www.baidu.comping 192.168.0.1 测试端口 如果你想测试特定端口是否开放并响应&#xff…...

Netty - 从Nginx 四层(TCP/UDP)流量中获取客户端真实/网络出口IP

文章目录 一、背景与原理1.1 问题场景网络架构影响分析1.1 客户端与Nginx之间存在的NAT/VPN1.2 Nginx与RPC服务之间的NAT 1.2 技术原理 二、环境配置验证2.1 Nginx配置2.2 版本要求 三、Netty服务端实现3.1 Pipeline配置(核心代码)3.2 协议处理器实现3.3…...

【持续集成和持续部署】

大致流程: 提交代码--拉取下来新代码并自动构建与部署--应用接口探活--执行自动化测试--输出自动化测试报告 一、持续集成(Continuous Integration,CI) 持续集成是一种软件开发实践,开发团队成员频繁地将代码集成到…...

Transformers中的BertConfig、BertModel详解

目录 一、功能 二、用法 1.导入BertConfig 2. 初始化默认配置 3.使用配置初始化模型 使用场景: 1.自定义小型BERT模型 2.加载预训练模型配置 从 Hugging Face 模型库加载 bert-base-uncased 的默认配置: 通过 BertConfig,你可以灵活定义…...

Ubuntu下载docker、xshell

配置:VMware虚拟机、Ubuntu24.04.1 首先打开vm启动虚拟机 下载docker Ubuntu启动之后,按CTRLALTT 打开终端 1.更新软件包索引并安装依赖 sudo apt-get updatesudo apt-get install \ca-certificates \curl \gnupg \lsb-release 2.添加docker官方的GP…...

迅为iTOP-RK3576人工智能开发板Android 系统接口功能测试

2.1 开机启动 开发板接通电源,并按下电源开关,系统即启动,在启动过程中,系统会显示下图中的开机画面,它们分别是 Android 系统启动时的 Logo 画面: 最后会显示如下解锁画面: 2.2 命令终端 将…...

Android设计模式之工厂方法模式

一、定义: 定义一个用于创建对象的接口,让子类决定实例化哪个类。 二、组成: 1.抽象工厂:工厂模式的核心,声明工厂方法,返回抽象产品对象。 2.具体工厂:实现工厂方法,返还具体的产品…...

端侧设备(如路由器、家庭网关、边缘计算盒子、工业网关等)的典型系统、硬件配置和内存大小

🏠 家用/工业级边缘设备硬件概览 类型常见设备示例CPU 架构内存范围操作系统类型家用路由器TP-Link、小米、华硕、OpenWrtARM Cortex-A7/A964MB~256MBOpenWrt / DD-WRT / Embedded Linux智能家庭网关华为、绿米、天猫精灵、Aqara HubARM Cortex-M/R128MB~512MBEmbedded Lin…...

office_word中使用宏以及DeepSeek

前言 Word中可以利用DeepSeek来生成各种宏,从而生成我们需要各种数据和图表,这样可以大大减少我们手工的操作。 1、Office的版本 采用的是微软的office2016,如下图: 2、新建一个Word文档 3、开启开发工具 这样菜单中的“开发工具…...

数据结构day04

一 栈 1栈的基本概念 各位同学大家好,从这个小节开始,我们会正式进入第三章的学习,我们会学习栈和队列,那这个小节中我们会先认识栈的基本概念。我们会从栈的定义和栈的基本操作来认识栈这种数据结构,也就是要探讨栈的…...

质量工程:数字化转型时代的质量体系重构

前言:质量理念的范式转移阅读原文 如果把软件开发比作建造摩天大楼: 传统测试 竣工后检查裂缝(高成本返工) 质量工程 从地基开始的全流程监理体系(设计图纸→施工工艺→建材选择→竣工验收) IEEE研究…...

数据结构C语言练习(单双链表)

本篇练习题(单链表): 1.力扣 203. 移除链表元素 2.力扣 206. 反转链表 3.力扣 876. 链表的中间结点 4.力扣 21. 合并两个有序链表 5. 牛客 链表分割算法详解 6.牛客 链表回文结构判断 7. 力扣 160. 相交链表 8. 力扣 141 环形链表 9. 力扣 142 环形链表 II…...

QScreen 捕获屏幕(截图)

一、QScreen核心能力解析 硬件信息获取 // 获取主屏幕对象 QScreen* primaryScreen QGuiApplication::primaryScreen();// 输出屏幕参数 qDebug() << "分辨率:" << primaryScreen->size(); qDebug() << "物理尺寸:" << primar…...

pyQt学习笔记——Qt资源文件(.qrc)的创建与使用

Qt资源文件&#xff08;.qrc&#xff09;的创建与使用 1. 选择打开资源2. 创建新资源3. 添加资源文件夹4. 选择要加载的图片文件5. 编译resource.qrc文件6. 替换PySlide6为PyQt57. 其他说明 1. 选择打开资源 在Qt项目中&#xff0c;可以通过windowIcon点击选择打开资源。 2. 创…...

优雅的开始一个Python项目

优雅的开始一个Python项目 这是我在初始化一个Python项目时&#xff0c;一键生成的项目文件。它自动完成了git初始化、环境管理、日志模块这三件事情&#xff0c;并在最后进入了虚拟环境。 uv安装 uv是一个现代的Python包管理和项目管理工具。uv中文文档 安装uv: # unix: …...

[学成在线]07-视频转码

视频转码 视频上传成功后需要对视频进行转码处理。 首先我们要分清文件格式和编码格式&#xff1a; 文件格式&#xff1a;是指.mp4、.avi、.rmvb等这些不同扩展名的视频文件的文件格式 &#xff0c;视频文件的内容主要包括视频和音频&#xff0c;其文件格式是按照一定的编码…...

qt+opengl 加载三维obj文件

1前面我们已经熟悉了opengl自定义顶点生成一个立方体&#xff0c;并且我们实现了立方体的旋转&#xff0c;光照等功能。下面我们来用opengl来加载一个obj文件。准备我们首先准备一个简单的obj文件&#xff08;head.obj&#xff09;。资源在本页下载 2 在obj文件里面&#xff0c…...

一个简单的用C#实现的分布式雪花ID算法

雪花ID是一个依赖时间戳根据算法生成的一个Int64的数字ID&#xff0c;一般用来做主键或者订单号等。以下是一个用C#写的雪花ID的简单实现方法 using System; using System.Collections.Concurrent; using System.Diagnostics;public class SnowflakeIdGenerator {// 配置常量p…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-2.2.1 Bulk API的正确使用与错误处理

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 Elasticsearch Bulk API 深度实践&#xff1a;性能调优与容错设计1. Bulk API 核心机制解析1.1 批量写入原理剖析1.1.1 各阶段性能瓶颈 2. 高性能批量写入实践2.1 客户端最佳…...

鸿蒙Flutter开发故事:不,你不需要鸿蒙化

在华为牵头下&#xff0c;Flutter 鸿蒙化如火如荼进行&#xff0c;当第一次看到一份上百个插件的Excel 列表时&#xff0c;我也感到震惊&#xff0c;排名前 100 的插件赫然在列&#xff0c;这无疑是一次大规模的军团作战。 然后&#xff0c;参战团队鱼龙混杂&#xff0c;难免有…...