一个有趣的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,一经查实,立即删除!

相关文章

隐藏UITableView当没有数据或数据不够的时候出现的分割线.

在没有分割先的情况下,添加如下方法,当实例化tableview的时候调用该方法. - (void)setExtraCellLineHidden: (UITableView *)tableView{ UIView *view [ [UIView alloc]init]; view.backgroundColor [UIColor clearColor]; [tableView setTableFooterView:view]; [tableView s…

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…

hdu 1466 计算直线的交点数 递推

以前做这道题目的时候,花了好长时间找规律,感觉十分高大上,今天回顾这个题目的时候,突然有了顿悟, 有了递推的思想就容易解决了。 题意:给你n条直线,问:输出这些直线所有相交情况下的…

Android插件化开发基础之App如何动态加载类

在 Java 里面,我们可以把一些类放到 .jar 文件里面,然后用 ClassLoader 动态加载。例如: URLClassLoader ucl URLClassLoader.newInstance(new URL[] {new URL("file:/sdcard/files/test.jar")}); Class clazz ucl.loadClass…

Windows 10 2022 年更新来了!

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

python小工具小发明_【kimol君的无聊小发明】—用python写截屏小工具

前言今天我看了一下自己的文件夹,发现了自己写了许多似乎很无聊的代码。于是乎,一个想法油然而生:“生活已经很无聊了,不如再无聊一点叭”。说干就干,那就开一个专题,我们称之为kimol君的无聊小发明。妙…啊…

npm执行命令后无任何响应(windows下)

曾经执行过npm config set prefix 命令, 导致npm的config乱掉了, 找到这个文件.npmrc, 然后删掉就可以了 。 我的.npmrc位置在C:\Users\Administrator下。转载于:https://www.cnblogs.com/josjo/p/6099631.html

职业技能培训

实战技能 精通web容器 Apache、Nginx 精通Redis、Mongodb、Memcache、Hadoop 精通CGI/FastCGI PHP扩展 精通Qt和Webkt 应用技能 gccgdbmakeautoconfSourceInsightvim理论素养 数据库数据结构操作系统算法WEB转载于:https://www.cnblogs.com/heidsoft/p/3418660.html

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

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)&…

Android插件化开发之动态加载技术系列索引

动态加载介绍 在Android开发中采用动态加载技术,可以达到不安装新的APK就升级APP功能的目的,可以用来到达快速发版的目的,也可以用来修复一些紧急BUG。 现在使用得比较广泛的动态加载技术的核心一般都是使用 ClassLoader ,后者能够…

C# using static 声明

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

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

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

python后面空格报错_python中空格和table混用报错原因

python是一门严格遵守缩进的语言,缩进的规则代表着程序的层级关系。我们来看一段代码。class MyForm(Form):value1 StringField(value1)value2 StringField(value2)value3 StringField(value3) #这行用的是Tab缩进submit SubmitField(Submit)learn pytho…

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.通过一个类的全限定名…