一个有趣的Go项目,3D界面管理k8s集群,真好玩!

大家好,我是小碗汤,今天分享一个用Golang开发,很好玩的工具`KubeCraftAdmin`[1]用Minecraft方式管理k8s的工具,感兴趣的兄弟不妨玩一玩。文末有视频,供您鉴赏~

Minecraft:我的世界,是微软旗下的沙盒游戏。玩家可以在一个3D世界内与方块进行交互。这是一款广受欢迎的游戏,玩家可以用数字块构建梦幻般的虚拟世界

为什么没有一个身历其境的3D沙盒用户界面,来管理容器编排中的工作负载呢?

KubeCraftAdmin的灵感来自于MakeCode for Minecraft 让学习编码变得超级有趣[2],通过WebSocket Server,通过编程方式操纵Minecraft中的世界。

项目用不同的围栏(每个namespace一个)中的不同动物填充。每个动物对应于k8s集群中的一个资源。

  • 猪是Pods

  • 牛是ReplicaSets

  • 鸡是Services

  • 马是Deployments

连接到KubeCraft Admin WS,就可以连接到指定的k8s集群。通过动物反映集群资源。当资源被删除时,动物会死亡。相反地,在Minecraft中杀死动物会删除相应的资源。

KubeCraftAdmin

KubeCraftAdmin: 冒险家的管理工具

0e8bf2bbbca866e3b003f9225d150133.png
你会杀了这个看似无辜的服务吗?

这个项目允许你通过Minecraft做基本的Kubernetes管理。

如果想实操,需要以下条件才行:

  • 一个k8s集群

  • 在集群内部或外部运行kubecraft容器,需要可以连接到k8s集群和Minecraft客户端

  • Minecraft基础版

运行KubeCraftAdmin

运行容器,设置端口映射、挂载.kube目录。容器内部监听8000端口。可以使用环境变量namespaces从集群中指定1到4个名称空间。

docker run --name kca -d -p 8000:8000 -v /root/.kube:/.kube -e namespaces=kca1,kca2 erjadi/kubecraftadmin
# docker ps -f name=kca
CONTAINER ID   IMAGE                   COMMAND       CREATED          STATUS          PORTS                                       NAMES
58ee6241048b   erjadi/kubecraftadmin   "/app/main"   30 seconds ago   Up 29 seconds   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp   kca
  1. 启动 Minecraft 基础版

  2. 打开Activate Cheats选项,创建一个新的世界

ddee57ce38b97e6ac52fae2977c79fcc.png
  1. 当你用下面的命令登录到服务器后,你应该会看到KubeCraftAdmin的闪屏界面。在游戏开始时,需要获得一些道具(刀剑、TNT、火石)。

/connect 10.0.0.1:8000/ws
  1. 找一个区域生成kubecraft围栏。输入init生成结构。

  2. 最后,在beacon[3]上激活集群的连接。

  3. 到此为止,你的围栏中应该填充一些动物(k8s资源)。

技术细节

KubeCraftAdmin是用Golang写的。它建立在Sandertv[4]的MCWSS[5]项目之上。

这个项目在Minecraft基础版和教育版上,利用了Websocket Server[6]的功能。WS连接是一个Minecraft客户端连接,所有的动作都是通过客户端执行的。Server/Local不受影响,也不受此项目的控制。这意味着我们需要激活作弊机制,以便能够生成[7]或杀死[8]实体。

可以在kubecraftadmin.go[9]中找到的主要流程。

简化的KubeCraftAdmin连接到Kubernetes集群,生成所需的实体,并启动一个无尽的循环函数LoopReconcile。每秒钟它都会启动一个名为ReconcileKubetoMC的同步函数,它的基本内容是:

  • 在Minecraft中枚举实体

  • 在Kubernetes中枚举资源

  • 在Minecraft生成或杀死差异

对于反向同步,依赖于mobEvent,它触发ReconcileMCtoKubeMob的执行。基本上执行相同的检查,但这次是将Minecraft实体作为标准,并删除Kubernetes相应的资源。

以下附上视频,供您鉴赏,求个关注、求个赞👍🏻可以吗?da1b62f2a5b84ac67084db968b83cd8b.png



本文翻译自:https://reurl.cc/MbZXrW,版权归原作者所有

欢迎小伙伴们投稿原创文章~

投稿格式:markdown格式的md文件

投稿邮箱: pub@kubeinfo.cn

参考资料

[1]

KubeCraftAdmin: https://github.com/erjadi/kubecraftadmin/

[2]

MakeCode for Minecraft 让学习编码变得超级有趣: https://www.microsoft.com/en-us/research/blog/code-minecraft/

[3]

beacon: https://minecraft.gamepedia.com/Beacon

[4]

Sandertv: https://github.com/Sandertv

[5]

MCWSS: https://github.com/Sandertv/mcwss

[6]

Websocket Server: https://minecraft.gamepedia.com/Commands/wsserver

[7]

生成: https://minecraft.gamepedia.com/Commands/summon

[8]

杀死: https://minecraft.gamepedia.com/Commands/kill

[9]

kubecraftadmin.go: /src/app/kubecraftadmin.go

fd517fcc44681dd5cc7d2b363868f6d6.png

点个在看你最好看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 数组拼接_打印Java数组最优雅的方式是什么?这波操作闪瞎我

在 Java 中,数组虽然是一个对象,但并未明确的定义这样一个类,因此也就没有覆盖 toString() 方法的机会。如果尝试直接打印数组的话,输出的结果并不是我们预期的结果。那有没有一些简单可行的方式呢?如果大家也被这个问…

AmazeUI基本样式

2019独角兽企业重金招聘Python工程师标准>>> AmazeUI是一个轻量级、Mobile first的前端框架,基于开源社区流行的前端框架编写。 Normalize AmazeUI使用了normalize.css,但做了些调整:html添加了-webkit-font-smoothing:antialiase…

Oracle基础中的基础视频讲座录像(西安)供免费下载

下载地址播放器也在上述目录中。记得那年园博会,培训中间有一天参观:转载于:https://blog.51cto.com/botang/1323099

她13岁自己造飞机,17岁进麻省理工,3篇黑洞论文被霍金引用......

全世界只有3.14 % 的人关注了爆炸吧知识13岁的时候,你在干嘛?我想,绝大多数人都没有萨布丽娜这么硬核——独自组装飞机。之后,16岁的萨布丽娜完成了生涯首飞,历史第一年轻。17岁时,她考上麻省理工&#xff…

Windows 10 2022 年更新来了!

面向 Release Preview 频道的 Windows 10 预览体验成员,微软现已发布 Windows 10 Build 19044.1499。主要修复1.微软修复了阻止某些环绕声音频在 Microsoft Edge 中播放的问题。2.微软修复了使用中文输入法时,一些应用停止工作的意外错误。3.微软修复了在…

当代成年人的生活状态......

1 小喵咪举起了它的狙击枪▼2 简直有毒...▼3 哈哈哈哈哈▼4 电焊既视感▼5 请问需要小猫咪吗?▼6 哈哈哈哈哈▼7 一物降一物▼7 数学能有多好玩?▼你点的每个赞,我都认真当成了喜欢

c++ why can't class template hide its implementation in cpp file?

类似的问题还有: why cant class template use Handle Class Pattern to hide its implementation? || why there are linker problems (undefined reference) to my class template? 我出现问题的源码(见main.cpp,Stack.h,Stack.cpp)&…

C# using static 声明

许多实际的扩展可以通过扩展方法来实现,并非所有实际的扩展都有可以扩展的类型。对于某些场景,简单的静态方法比较适合。为了更容易调用这些方法,可以使用 using static 声明除去类名。例如,如果打开了 System.Console using stat…

PHP性能追踪及分析工具xhprof的安装与使用

PHP性能追踪及分析工具xhprof的安装与使用 对于本地开发环境来说,进行性能分析xdebug是够用了,但如果是线上环境的话,xdebug消耗较大,配置也不够灵活,因此线上环境建议使用xhprof进行PHP性能追踪及分析。 我们今天就简…

C 语言 int 型乘法溢出问题

2019独角兽企业重金招聘Python工程师标准>>> long l; int a, b; l a*b; 因为 a*b 的结果仍然以 int 型保存, 所以即使 l 为long,仍然会有溢出,并且截去了部分数据.出现问题. 转载于:https://my.oschina.net/simon203/blog/175885

Android插件化开发基础之Java类加载器与双亲委派模型

类加载器 Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。 在加载阶段,java虚拟机需要完成以下3件事: a.通过一个类的全限定名…

将k8s制作成3D射击游戏,好玩到停不下来,附源码

点击上方蓝字 关注【我的小碗汤】大家好,我是小碗汤,今天演示一个项目,利用Unity做场景、用C#做交互逻辑,将k8s制作成一个3D射击游戏。正好最近在学习Unity,所以利用这个项目开始上手挺合适的。源码、可执行文件可以自…

JavaJVM之ClassLoader源码分析

层次结构和类图 ClassLoader层次结构:UML类图:sun.misc.Launcher.ExtClassLoader sun.misc.Launcher.AppClassLoader 显式加载类 在代码中显式加载某个类,有三种方法:this.getClass().getClassLoader().loadClass()Class.forName(…

ASP.NET Core Web API使用静态swagger.json文件

前言ASP.NET Core Web API默认集成了Swashbuckle,可以在运行时显示Swagger UI:而Swagger UI实际上是解析的动态生成的swagger.json:app.UseSwagger(); app.UseSwaggerUI(c > c.SwaggerEndpoint("/swagger/v1/swagger.json", &qu…

XenApp共享桌面打开文件警告与桌面文件由于Internet文件安全设置无法打开解决办法...

问题现象 1. 在使用了UPM与文件夹重定向后,个人的桌面路径就会变成一个UNC路径,这个时候如果用户登录共享桌面的话可以看到桌面与快速启动栏的文件与快捷方式,但是打开的时候就会遇到以下错误 这种情况是由于我们放的文件是一个网络路径所导致…

周选特辑|一些超棒的开源项目!

编程导航 每周新增资源优选特辑 02编程导航 致力于推荐优质编程资源 💎项目开源仓库:https://github.com/liyupi/code-nav跪求一个 star ⭐️哈喽大家好!我是编程导航的小编火宝。美好的一周又过去了,大家有没有认真学习呢&#x…

Android插件化开发之DexClassLoader动态加载dex、jar小Demo

一、温故动态加载ClassLoader机制 如果对Android的ClassLoader加载机制不熟悉,猛戳Android插件化开发动态加载基础之ClassLoader工作机制 http://blog.csdn.net/u011068702/article/details/53248960 二、介绍 我们知道在Android中可以跟java一样实现动态加载jar&…