真是活久见,在 Minecraft 的虚拟游戏里竟然还能管理 Kubernetes!
微软 2015 年收购 Minecraft 之后不久开源了一个项目叫 Dockercraft[1],这个项目当时看起来非常有趣,通过 Dockercraft[2],玩家可以在 Minecraft 中启动或停止一个 Docker 容器,而 Docker 容器会以一个 N*N 的方块房子的方式显示在玩家面前,每一栋房子都代表一个 Docker 容器。
房子的外面挂着显示容器信息的看板,包括容器的名称、正在运行的进程、CPU 与内存的使用率等信息。
房子里面是管理容器的开关,扳动墙上的开关可以停止和启动容器,这对于码农来说是一个非常有趣的服务器。
我寻思着,既然有了 Dockercraft,怎么能没有 Kubecraft 呢?Google 搜了下还真有,项目名字正好就叫 Kubecraft[3]。它的功能和 Dockercraft 类似,可以管理 Kubernetes
集群中的容器,每一个房子代表一个 Pod
,房子里面有开关可以销毁 Pod
,真是太好玩了(太无聊了......)。
官方仓库[4]给的部署方式是用 Docker
跑的,命令如下:
$ docker run -t -d -i -p 25565:25565
--name kubecraft
-e KUBE_CFG_FILE=/etc/kubeconfig
-v ~/.kube/config:/etc/kubeconfig
stevesloka/kubecraft
如果想部署在 Kubernetes 中,可以参考下面的部署清单:
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubecraft
labels:
app: kubecraft
spec:
replicas: 1
selector:
matchLabels:
app: kubecraft
template:
metadata:
labels:
app: kubecraft
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- kubecraft
topologyKey: kubernetes.io/hostname
weight: 1
tolerations:
- key: node-role.kubernetes.io/ingress
operator: Exists
effect: NoSchedule
containers:
- name: kubecraft
image: stevesloka/kubecraft
tty: true
stdin: true
env:
- name: KUBE_CFG_FILE
value: /etc/kubeconfig
ports:
- containerPort: 25565
protocol: TCP
volumeMounts:
- mountPath: /etc/kubeconfig
subPath: kubeconfig
name: kubeconfig
volumes:
- name: kubeconfig
configMap:
name: kubeconfig
---
apiVersion: v1
kind: Service
metadata:
name: kubecraft
labels:
app: kubecraft
spec:
selector:
app: kubecraft
ports:
- protocol: TCP
name: http
port: 25565
targetPort: 25565
一定要加上 tty: true
和 stdin:true
,不然容器无法启动!
你还需要先创建一个 Configmap
来保存 kubeconfig
,例如:
$ kubectl create cm kubeconfig --from-file=/root/.kube/config
然后就可以愉快地部署了。
除了 Kubecraft 之外,还有一个项目叫 KubeCraftAdmin
,功能上并没有什么太大的差异,只是每一个动物代表一个 Pod,你只要干掉一只鸡?,Kubernetes 中的 Pod 就被干死了,刺不刺激?
最后,如果你对该项目感兴趣,公众号后台回复 kubecraftadmin 即可获取 KubeCraftAdmin
项目地址。
参考资料
[1]
Dockercraft: https://github.com/docker/dockercraft
[2]
Dockercraft: https://github.com/docker/dockercraft
[3]
Kubecraft: https://github.com/stevesloka/kubecraft
[4]
官方仓库: https://github.com/stevesloka/kubecraft
- memcached安装及.NET中的Memcached.ClientLibrary使用详解
- AtCoder Beginner Contest 069【A,水,B,水,C,数学,D,暴力】
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
- 洛谷 2634&&BZOJ 2152: 聪聪可可【点分治学习+超详细注释】
- 【经验总结】Java在ACM算法竞赛编程中易错点
- 【Java学习笔记之六】java三种循环(for,while,do......while)的使用方法及区别
- 类A是公共的,应在名为A.java的文件中声明错误
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
- 【Java学习笔记之七】java函数的语法规则总结
- BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】
- BZOJ 3211: 花神游历各国【线段树区间开方问题】
- WP、Win10开发或者WPF开发时绘制自定义窗体~例如:一个手机
- 【Java学习笔记之八】JavaBean中布尔类型使用注意事项
- BZOJ 1597: [Usaco2008 Mar]土地购买【斜率优化+凸包维护】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 企业自建GitLab代码仓库安装与基础配置使用
- 全网最全的数据库操作命令,一口气从头看到尾,蛮有收获的!
- 【C++】 使用sort函数进行容器排序
- 宝塔如何安装 MDClub
- Jackson 的 JsonManagedReference 和 JsonBackReference 注解
- leetcode哈希表之独一无二的出现次数
- Vue 网站首页加载优化
- Swift日常开发随笔
- vue入门003~vue项目引入element并创建一个登录页面
- vue入门002~vue项目的两种创建方式
- IntelliJ IDEA,WebStorm,PhpStorm破解到2089年
- 小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送
- 借助云开发10行代码实现短信验证码的发送
- 借助云开发实现小程序订阅消息(模板消息)推送功能
- 1小时实战入门小程序开发,历史上的今天案例讲解