在 Minecraft 中管理 Kubernetes 集群

原文连接:在 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: truestdin:true,否则容器没法启动!markdown

你还须要先建立一个 Configmap 来保存 kubeconfig,例如:app

$ kubectl create cm kubeconfig --from-file=/root/.kube/config
复制代码

而后就能够愉快地部署了。oop

除了 Kubecraft 以外,还有一个项目叫 KubeCraftAdmin,功能上并无什么太大的差别,只是每个动物表明一个 Pod,你只要干掉一只鸡🐔,Kubernetes 中的 Pod 就被干死了,刺不刺激?

相关文章
相关标签/搜索