前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个有趣的Go项目,3D界面管理k8s集群,真好玩!

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

作者头像
我的小碗汤
发布2022-01-14 13:57:31
6240
发布2022-01-14 13:57:31
举报
文章被收录于专栏:我的小碗汤我的小碗汤

大家好,我是小碗汤,今天分享一个用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: 冒险家的管理工具

你会杀了这个看似无辜的服务吗?

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

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

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

运行KubeCraftAdmin

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

代码语言:javascript
复制
docker run --name kca -d -p 8000:8000 -v /root/.kube:/.kube -e namespaces=kca1,kca2 erjadi/kubecraftadmin
代码语言:javascript
复制
# 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选项,创建一个新的世界
  1. 当你用下面的命令登录到服务器后,你应该会看到KubeCraftAdmin的闪屏界面。在游戏开始时,需要获得一些道具(刀剑、TNT、火石)。
代码语言:javascript
复制
/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相应的资源。

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

参考资料

[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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 进击云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • KubeCraftAdmin
  • 运行KubeCraftAdmin
  • 技术细节
    • 参考资料
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档