使用开源 Web 界面测试你的 Kubernetes 实验

Chaos Mesh 通过 Web 前端实现混沌工程。在本系列的第四篇文章中了解更多信息。
64 位读者喜欢这篇文章。
Digital creative of a browser on the internet

你是否想通过制造混乱来测试你的系统,但更喜欢使用可视化工具而不是终端?那么,这篇文章就是为你准备的,我的朋友。在本系列的第一篇文章中,我解释了什么是混沌工程;在第二篇文章中,我演示了如何获取你的系统的稳态,以便你可以将其与混沌状态进行比较;在第三篇文章中,我展示了如何使用 Litmus 进行测试在你的 Kubernetes 集群中进行任意故障和实验。

第四篇文章介绍了Chaos Mesh,这是一个带有 Web 用户界面 (UI) 的开源混沌编排器,任何人都可以使用。它允许你在 Web UI 中创建实验和显示统计信息,用于演示或可视化故事讲述。云原生计算基金会托管了 Chaos Mesh 项目,这意味着它是 Kubernetes 的一个不错的选择。那么,让我们开始吧!在本演练中,我将使用 Pop!_OS 20.04、Helm 3、Minikube 1.14.2 和 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

安装 Chaos Mesh

通过将存储库添加到 Helm 来开始安装 Chaos Mesh

$ helm repo add chaos-mesh https://charts.chaos-mesh.org
"chaos-mesh" has been added to your repositories

然后搜索你的 Helm chart

$ helm search repo chaos-mesh
NAME                 	CHART VERSION	APP VERSION	DESCRIPTION                                       
chaos-mesh/chaos-mesh	v0.5.0       	v1.2.0     	Chaos Mesh® is a cloud-native Chaos Engineering...

找到你的 chart 后,你可以开始安装步骤,首先创建一个 chaos-testing 命名空间

$ kubectl create ns chaos-testing
namespace/chaos-testing created

接下来,在此命名空间中安装你的 Chaos Mesh chart,并将其命名为 chaos-mesh

$ helm install chaos-mesh chaos-mesh/chaos-mesh --namespace=chaos-testing
NAME: chaos-mesh
LAST DEPLOYED: Mon May 10 10:08:52 2021
NAMESPACE: chaos-testing
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Make sure chaos-mesh components are running
   kubectl get pods --namespace chaos-testing -l app.kubernetes.io/instance=chaos-mesh

按照输出的指示,检查 Chaos Mesh 组件是否正在运行

$ kubectl get pods --namespace chaos-testing -l app.kubernetes.io/instance=chaos-mesh
NAME                                       READY   STATUS    RESTARTS   AGE
chaos-controller-manager-bfdcb99fd-brkv7   1/1     Running   0          85s
chaos-daemon-4mjq2                         1/1     Running   0          85s
chaos-dashboard-865b778d79-729xw           1/1     Running   0          85s

现在一切都运行正常,你可以设置服务以查看 Chaos Mesh 仪表板,并确保 chaos-dashboard 服务可用

$ kubectl get svc -n chaos-testing
NAME                            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                       AGE
chaos-daemon                    ClusterIP   None            <none>        31767/TCP,31766/TCP           3m42s
chaos-dashboard                 NodePort    10.99.137.187   <none>        2333:30029/TCP                3m42s
chaos-mesh-controller-manager   ClusterIP   10.99.118.132   <none>        10081/TCP,10080/TCP,443/TCP   3m42s

现在你已经知道服务正在运行,继续公开它、重命名它,并使用 minikube service 打开仪表板

$ kubectl expose service chaos-dashboard --namespace chaos-testing --type=NodePort --target-port=2333 --name=chaos
service/chaos exposed

$ minikube service chaos --namespace chaos-testing
|---------------|-------|-------------|---------------------------|
|   NAMESPACE   | NAME  | TARGET PORT |            URL            |
|---------------|-------|-------------|---------------------------|
| chaos-testing | chaos |        2333 | http://192.168.49.2:32151 |
|---------------|-------|-------------|---------------------------|
?  Opening service chaos-testing/chaos in default browser...

当浏览器打开时,你将看到一个令牌生成器窗口。选中 集群范围 旁边的框,并按照屏幕上的说明进行操作。

然后你可以登录 Chaos Mesh 并查看仪表板。

你已经安装了你的 Chaos Mesh 实例,可以开始进行混沌测试了!

在你的集群中变得混乱

现在一切都已启动并运行,你可以设置一些新的实验来尝试。该文档提供了一些预定义的实验,我将从选项中选择 StressChaos。在本演练中,你将在一个新的命名空间中创建一些东西来进行压力测试,并对其进行扩展,以便它可以对多个对象进行压力测试。

创建命名空间

$ kubectl create ns app-demo
namespace/app-demo created

然后在你的新命名空间中创建部署

$ kubectl create deployment nginx --image=nginx --namespace app-demo
deployment.apps/nginx created

将部署扩展到八个 pod

$ kubectl scale deployment/nginx --replicas=8 --namespace app-demo
deployment.apps/nginx scaled

最后,通过检查命名空间中的 pod 来确认一切都已启动并正常工作

$ kubectl get pods -n app-demo
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6799fc88d8-7kphn   1/1     Running   0          69s
nginx-6799fc88d8-82p8t   1/1     Running   0          69s
nginx-6799fc88d8-dfrlz   1/1     Running   0          69s
nginx-6799fc88d8-kbf75   1/1     Running   0          69s
nginx-6799fc88d8-m25hs   1/1     Running   0          2m44s
nginx-6799fc88d8-mg4tb   1/1     Running   0          69s
nginx-6799fc88d8-q9m2m   1/1     Running   0          69s
nginx-6799fc88d8-v7q4d   1/1     Running   0          69s

现在你已经有了一些要测试的对象,你可以开始定义你的实验了。首先创建 chaos-test.yaml

$ touch chaos-test.yaml

接下来,创建混沌测试的定义。只需将此实验定义复制并粘贴到你的 chaos-test.yaml 文件中

apiVersion: chaos-mesh.org/v1alpha1
kind: StressChaos
metadata:
  name: burn-cpu
  namespace: chaos-testing
spec:
  mode: one
  selector:
    namespaces:
      - app-demo
    labelSelectors:
      app: "nginx"
  stressors:
    cpu:
      workers: 1
  duration: '30s'
  scheduler:
    cron: '@every 2m'

此测试将在 app-demo 命名空间中的 pod 上每 2 分钟燃烧 1 个 CPU 30 秒。最后,应用 YAML 文件以启动实验并查看仪表板中发生的情况。

应用实验文件

$ kubectl apply -f chaos-test.yaml 
stresschaos.chaos-mesh.org/burn-cpu created

然后转到你的仪表板并单击 实验 以查看压力测试的运行情况。你可以通过按实验右侧的 暂停 按钮来暂停实验。

单击 仪表板 以查看包含实验总数、状态图以及正在运行的事件或先前运行的测试的时间线的状态。

选择 事件 以查看时间线以及下面的包含详细信息的实验。

恭喜你完成了你的第一次测试!现在你已经完成了这项工作,我将分享更多关于你可以使用你的实验做的其他事情的细节。

但是等等,还有更多

你可以使用命令行对此实验执行的其他操作包括

  • 更新实验以更改其工作方式
  • 如果你需要将集群恢复到稳态,则暂停实验
  • 恢复实验以继续测试
  • 如果你的测试不再需要该实验,则删除该实验

更新实验

例如,更新集群中的实验以增加测试之间的持续时间。返回到你的 cluster-test.yaml 并编辑调度程序以将 2 分钟更改为 20 分钟

之前

  scheduler:
    cron: '@every 2m'

之后

  scheduler:
    cron: '@every 20m'

保存并重新应用你的文件;输出应显示新的压力测试配置

$ kubectl apply -f chaos-test.yaml 
stresschaos.chaos-mesh.org/burn-cpu configured

如果你查看仪表板,实验应显示新的 cron 配置。

暂停和恢复实验

在命令行上手动暂停实验将需要向实验添加注释。恢复实验将需要删除注释。

要添加注释,你将需要 YAML 文件中实验的 kind、name 和 namespace。

暂停实验

$ kubectl annotate stresschaos burn-cpu experiment.chaos-mesh.org/pause=true  -n chaos-testing

stresschaos.chaos-mesh.org/burn-cpu annotated

Web UI 显示它已暂停。

恢复实验

你需要相同的信息来恢复你的实验。但是,你使用破折号而不是单词 true 来删除暂停。

$ kubectl annotate stresschaos burn-cpu experiment.chaos-mesh.org/pause-  -n chaos-testing

stresschaos.chaos-mesh.org/burn-cpu annotated

现在你可以看到实验已在 Web UI 中恢复。

删除实验

完全删除实验需要一个简单的 delete 命令和文件名

$ kubectl delete -f chaos-test.yaml 

stresschaos.chaos-mesh.org "burn-cpu" deleted

再次,你应该在 Web UI 中看到期望的结果。

许多这些任务都是使用命令行完成的,但你也可以使用 UI 创建你自己的实验,或导入你创建为 YAML 文件的实验。这有助于许多人更轻松地创建新实验。每个实验还有一个“下载”按钮,因此你可以通过单击几个按钮来查看你创建的 YAML 文件。

最后的想法

现在你有了这个新工具,你可以在你的环境中变得混乱。Chaos Mesh 允许更友好的用户交互,这意味着更多人可以加入混沌团队。我希望你在这里学到了足够的知识来扩展你的混沌工程。祝你 pod 狩猎愉快!

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

评论已关闭。

© . All rights reserved.