原文連接:在 Minecraft 中管理 Kubernetes 集羣node
微軟 2015 年收購 Minecraft 以後不久開源了一個項目叫 Dockercraft,這個項目當時看起來很是有趣,經過 Dockercraft,玩家能夠在 Minecraft 中啓動或中止一個 Docker 容器,而 Docker 容器會以一個 N*N 的方塊房子的方式顯示在玩家面前,每一棟房子都表明一個 Docker 容器。git
房子的外面掛着顯示容器信息的看板,包括容器的名稱、正在運行的進程、CPU 與內存的使用率等信息。github
房子裏面是管理容器的開關,扳動牆上的開關能夠中止和啓動容器,這對於碼農來講是一個很是有趣的服務器。docker
我尋思着,既然有了 Dockercraft,怎麼能沒有 Kubecraft 呢?Google 搜了下還真有,項目名字正好就叫 Kubecraft。它的功能和 Dockercraft 相似,能夠管理 Kubernetes
集羣中的容器,每個房子表明一個 Pod
,房子裏面有開關能夠銷燬 Pod
,真是太好玩了(太無聊了......)。api
官方倉庫給的部署方式是用 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 中,能夠參考下面的部署清單:服務器
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
,否則容器沒法啓動!markdown
你還須要先建立一個 Configmap
來保存 kubeconfig
,例如:app
$ kubectl create cm kubeconfig --from-file=/root/.kube/config
複製代碼
而後就能夠愉快地部署了。oop
除了 Kubecraft 以外,還有一個項目叫 KubeCraftAdmin,功能上並無什麼太大的差別,只是每個動物表明一個 Pod,你只要幹掉一隻雞🐔,Kubernetes 中的 Pod 就被幹死了,刺不刺激?