原文链接:在 Minecraft 中管理 Kubernetes 集群
微软 2015 年收购 Minecraft 之后不久开源了一个项目叫 Dockercraft,这个项目当时看起来非常有趣,通过 Dockercraft,玩家可以在 Minecraft 中启动或停止一个 Docker 容器,而 Docker 容器会以一个 N*N 的方块房子的方式显示在玩家面前,每一栋房子都代表一个 Docker 容器。
房子的外面挂着显示容器信息的看板,包括容器的名称、正在运行的进程、CPU 与内存的使用率等信息。
房子里面是管理容器的开关,扳动墙上的开关可以停止和启动容器,这对于码农来说是一个非常有趣的服务器。
我寻思着,既然有了 Dockercraft,怎么能没有 Kubecraft 呢?Google 搜了下还真有,项目名字正好就叫 Kubecraft。它的功能和 Dockercraft 类似,可以管理 Kubernetes 集群中的容器,每一个房子代表一个 Pod,房子里面有开关可以销毁 Pod,真是太好玩了(太无聊了......)。
官方仓库给的部署方式是用 Docker 跑的,命令如下:
$ docker run -t -d -i -p 25565:25565 \ --name kubecraft \ -e KUBE_CFG_FILE=http://www.likecs.com/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=http://www.likecs.com/root/.kube/config然后就可以愉快地部署了。
除了 Kubecraft 之外,还有一个项目叫 KubeCraftAdmin,功能上并没有什么太大的差异,只是每一个动物代表一个 Pod,你只要干掉一只鸡