你是否怀念 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
,如上所述)。

(Jess Cherry, CC BY-SA 4.0)
登录后,你应该能够四处走动,并看到带有 Pod 名称的敌人。

(Jess Cherry, CC BY-SA 4.0)
我玩这个游戏很糟糕,所以我使用了一些作弊码来获得更多乐趣
- 输入
idspispopd
直接穿墙而过,到达你的 Pod 大军。 - 无法驾驭枪支? 没关系;我也很糟糕。 如果你输入
idkfa
并按下数字 5,你将获得更好的武器。
这就是你杀死东西时的样子(我使用 k9s 来查看此视图)。

(Jess Cherry, CC BY-SA 4.0)
最终说明
由于此应用程序需要集群管理员角色,你必须真正注意 Pod 的名称——你可能会遇到 kube-system Pod,你最好逃跑。 如果你杀死其中一个 Pod,你将杀死系统的重要部分。
我喜欢这个应用程序,因为它是在游戏中进行混沌工程的最快方式。 它确实提醒了我我玩这个视频游戏有多糟糕,但尝试它很有趣。 狩猎愉快!
2 条评论