1. 程式人生 > >在 Minecraft 中管理 Kubernetes 叢集

在 Minecraft 中管理 Kubernetes 叢集

> 原文連結:[在 Minecraft 中管理 Kubernetes 叢集](https://fuckcloudnative.io/posts/minecraft-as-a-k8s-admin-tool/) 微軟 2015 年收購 Minecraft 之後不久開源了一個專案叫 [Dockercraft](https://github.com/docker/dockercraft),這個專案當時看起來非常有趣,通過 [Dockercraft](https://github.com/docker/dockercraft),玩家可以在 Minecraft 中啟動或停止一個 Docker 容器,而 Docker 容器會以一個 N*N 的方塊房子的方式顯示在玩家面前,每一棟房子都代表一個 Docker 容器。 **房子的外面掛著顯示容器資訊的看板,包括容器的名稱、正在執行的程序、CPU 與記憶體的使用率等資訊。** ![](https://img2020.cnblogs.com/other/1737323/202010/1737323-20201012110429363-975654228.png) ![](https://img2020.cnblogs.com/other/1737323/202010/1737323-20201012110429755-706966265.png) 房子裡面是管理容器的開關,扳動牆上的開關可以停止和啟動容器,這對於碼農來說是一個非常有趣的伺服器。 我尋思著,既然有了 Dockercraft,怎麼能沒有 Kubecraft 呢?Google 搜了下還真有,專案名字正好就叫 [Kubecraft](https://github.com/stevesloka/kubecraft)。它的功能和 Dockercraft 類似,可以管理 `Kubernetes` 叢集中的容器,每一個房子代表一個 `Pod`,房子裡面有開關可以銷燬 `Pod`,真是太好玩了(太無聊了......)。 ![](https://img2020.cnblogs.com/other/1737323/202010/1737323-20201012110430168-1376501331.jpg) ![](https://img2020.cnblogs.com/other/1737323/202010/1737323-20201012110430461-1619223353.jpg) ![](https://img2020.cnblogs.com/other/1737323/202010/1737323-20201012110430831-1464883282.jpg) ![](https://img2020.cnblogs.com/other/1737323/202010/1737323-20201012110431198-1867150941.jpg) [官方倉庫](https://github.com/stevesloka/kubecraft)給的部署方式是用 `Docker` 跑的,命令如下: ```bash $ docker run -t -d -i -p 25565:25565 \ --name kubecraft \ -e KUBE_CFG_FILE=/etc/kubeconfig \ -v ~/.kube/config:/etc/kubeconfig \ stevesloka/kubecraft ``` 如果想部署在 Kubernetes 中,可以參考下面的部署清單: ```yaml 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`,例如: ```bash $ kubectl create cm kubeconfig --from-file=/root/.kube/config ``` 然後就可以愉快地部署了。 除了 Kubecraft 之外,還有一個專案叫 [KubeCraftAdmin](https://github.com/erjadi/kubecraftadmin),功能上並沒有什麼太大的差異,只是**每一個動物代表一個 Pod,你只要幹掉一隻雞