在 Kubernetes 上玩 Doom

通过玩 Kube DOOM 获得乐趣的同时终止 Pod。
72 人喜欢这篇文章。
A cat under a keyboard.

Opensource.com

你是否怀念 Doom 和其他像素风格的视频游戏,那些只需要鼠标和希望就能在局域网上与朋友一起生存的游戏? 你知道我在说什么;那些周末都用来研究如何携带台式机,以及如何在你的工装裤口袋里装下多少瓶激浪的日子? 如果这段回忆让你心中感到温暖,那么这篇文章就是为你准备的。

准备好再次玩 Doom 吧,只不过这次你玩 Doom 是出于合法的工作原因:进行混沌工程。我将使用我Kube DOOM 的分支(带有一个新的 Helm Chart,因为这就是我有时度过周末的方式)。我还在原始 Kube DOOM 创建者那里提交了一个 Pull Request,正在等待回复。

本系列的第一篇文章解释了什么是混沌工程,第二篇文章演示了如何获取你的系统稳态,以便你可以将其与混沌状态进行比较。在接下来的几篇文章中,我介绍了一些你可以使用的混沌工程工具:Litmus,用于在你的 Kubernetes 集群中测试任意故障和实验;Chaos Mesh,一个带有 Web 用户界面的开源混沌编排器;以及 Kube-monkey,用于通过在你的集群中调度随机终止 Pod 来对你的系统进行压力测试。

在第六篇文章中,我将使用 Pop!_OS 20.04、Helm 3、Minikube 1.14.2、VNC 查看器和 Kubernetes 1.19。

配置 Minikube

如果你还没有安装 Minikube,请按照适合你环境的方式安装 Minikube。 如果你有足够的资源,我建议给你的虚拟机比默认内存和 CPU 功率多一点的资源

$ minikube config set memory 8192
❗  These changes will take effect upon a minikube delete and then a minikube start
$ minikube config set cpus 6
❗  These changes will take effect upon a minikube delete and then a minikube start

然后启动并检查你的系统状态

$ minikube start
?  minikube v1.14.2 on Debian bullseye/sid
?  minikube 1.19.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.19.0
?  To disable this notice, run: 'minikube config set WantUpdateNotification false'

✨  Using the docker driver based on user configuration
?  Starting control plane node minikube in cluster minikube
?  Creating docker container (CPUs=6, Memory=8192MB) ...
?  Preparing Kubernetes v1.19.0 on Docker 19.03.8 ...
?  Verifying Kubernetes components...
?  Enabled addons: storage-provisioner, default-storageclass
?  Done! kubectl is now configured to use "minikube" by default
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

使用 Helm 预安装 Pod

在继续之前,你需要将一些 Pod 部署到你的集群中。 为此,我生成了一个简单的 Helm Chart,并将我的 values 文件中的副本数从 1 更改为 8。

如果你需要生成 Helm Chart,你可以阅读我关于创建 Helm Chart 的文章以获得指导。 我创建了一个名为 nginx 的 Helm Chart,并创建了一个命名空间,使用以下命令将我的 Chart 安装到其中。

创建命名空间

$ kubectl create ns nginx

在你的新命名空间中使用名称安装 Chart

$ helm install chaos-pods nginx -n nginx

NAME: chaos-pods
LAST DEPLOYED: Sun May 23 10:15:52 2021
NAMESPACE: nginx
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace nginx -l "app.kubernetes.io/name=nginx,app.kubernetes.io/instance=chaos-pods" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace nginx $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace nginx port-forward $POD_NAME 8080:$CONTAINER_PORT

安装 Kube DOOM

你可以使用任何你想要的虚拟网络计算机 (VNC) 查看器;我在我的 Linux 机器上安装了 TigerVNC。 有几种方法可以设置 Kube DOOM。 在我生成我的 Helm Chart 之前,你可以使用 kind 设置它,或者在本地与 Docker 一起使用,并且 README 包含这些用法的说明。

开始使用 git clone

$ git clone git@github.com:Alynder/kubedoom.git
Cloning into 'kubedoom'...

然后将目录更改为 kubedoom/helm 文件夹

$ cd kubedoom/helm/

由于基本 values 文件已正确设置,你只需要运行一个安装命令即可

$ helm install kubedoom kubedoom/ -n kubedoom
NAME: kubedoom
LAST DEPLOYED: Mon May 31 11:16:58 2021
NAMESPACE: kubedoom
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export NODE_PORT=$(kubectl get --namespace kubedoom -o jsonpath="{.spec.ports[0].nodePort}" services kubedoom-kubedoom-chart)
  export NODE_IP=$(kubectl get nodes --namespace kubedoom -o jsonpath="{.items[0].status.addresses[0].address}")
  echo http://$NODE_IP:$NODE_PORT

一切都应该已安装、设置并准备就绪。

玩 Kube DOOM

现在你只需要进入游戏,运行一些命令,然后开始玩你的新混沌视频游戏。 第一个命令是端口转发,后跟 VNC 查看器连接命令。 VNC 查看器连接需要密码,密码是 idbehold

找到用于端口转发的 Pod

$ kubectl get pods -n kubedoom
NAME                                       READY   STATUS    RESTARTS   AGE
kubedoom-kubedoom-chart-676bcc5c9c-xkwpp   1/1     Running   0          68m

使用你的 Pod 名称运行 port-forward 命令

$  kubectl port-forward  kubedoom-kubedoom-chart-676bcc5c9c-xkwpp 5900:5900 -n kubedoom
Forwarding from 127.0.0.1:5900 -> 5900
Forwarding from [::1]:5900 -> 5900

一切都已准备好可以玩了,所以你只需要运行 VNC 查看器命令(如下所示,带有输出)

$  vncviewer viewer localhost:5900

TigerVNC Viewer 64-bit v1.10.1
Built on: 2020-04-09 06:49
Copyright (C) 1999-2019 TigerVNC Team and many others (see README.rst)
See https://www.tigervnc.org for information on TigerVNC.

Mon May 31 11:33:23 2021
 DecodeManager: Detected 64 CPU core(s)
 DecodeManager: Creating 4 decoder thread(s)
 CConn:       Connected to host localhost port 5900

接下来,你将看到密码请求,因此输入密码(idbehold,如上所述)。

登录后,你应该能够四处走动,并看到带有 Pod 名称的敌人。

我玩这个游戏很糟糕,所以我使用了一些作弊码来获得更多乐趣

  • 输入 idspispopd 直接穿墙而过,到达你的 Pod 大军。
  • 无法驾驭枪支? 没关系;我也很糟糕。 如果你输入 idkfa 并按下数字 5,你将获得更好的武器。

这就是你杀死东西时的样子(我使用 k9s 来查看此视图)。

最终说明

由于此应用程序需要集群管理员角色,你必须真正注意 Pod 的名称——你可能会遇到 kube-system Pod,你最好逃跑。 如果你杀死其中一个 Pod,你将杀死系统的重要部分。

我喜欢这个应用程序,因为它是在游戏中进行混沌工程的最快方式。 它确实提醒了我我玩这个视频游戏有多糟糕,但尝试它很有趣。 狩猎愉快!

下一步阅读
User profile image.
技术游民,从事任何我能找到的工作。 IT 领域筒仓预防的倡导者,与所有团队信息共享的重要性。 相信教育所有人及开源开发。 热爱所有科技事物。 专注于 K8s、混沌以及任何我能找到的新鲜事物! Mastodon ID

2 条评论

我想玩 DOOM!! :)

好!

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.