Chaos Mesh 入门教程( 二 )

要验证组件是否在 Kubernetes Cluster 上运行成功 , 可以使用以下方法检查 。
$ kubectl get pods -n chaos-testingNAMEREADYSTATUSRESTARTSAGEchaos-controller-manager-754d4f7585-h9p4c1/1Running07h9mchaos-daemon-946871/1Running07h9mchaos-daemon-k7pnj1/1Running07h9mchaos-daemon-tfgp61/1Running07h9mchaos-dashboard-6fdb79c549-vmvtp1/1Running07h9m我们可以看到有3个组件处于运行状态 , controller、dashboard 以及作为 Daemonset 的运行混沌 daemon 进程 。 接着检查下 CRD 是否在集群上创建成功 。
$ kubectl get crdsNAMECREATED ATiochaos.chaos-mesh.org2020-10-22T09:15:05Zkernelchaos.chaos-mesh.org2020-10-22T09:15:05Znetworkchaos.chaos-mesh.org2020-10-22T09:15:05Zpodchaos.chaos-mesh.org2020-10-22T09:15:05Zpodiochaos.chaos-mesh.org2020-10-22T09:15:05Zpodnetworkchaos.chaos-mesh.org2020-10-22T09:15:05Zstresschaos.chaos-mesh.org2020-10-22T09:15:05Ztimechaos.chaos-mesh.org2020-10-22T09:15:05Z这些 CRD 就代表了上面详细提到的各种故障注入的使用对象 。
要访问 Dashboard , 我们将使用 kube-proxy , 或者你可以直接在Loadbalancer 上暴露它 。 显示获取 Chaos mesh Dashbaord 上的容器端口 。
$ kubectl get deploy chaos-dashboard -n chaos-testing -o=jsonpath="{.spec.template.spec.containers[0].ports[0].containerPort}{'\n'}"2333输出显示 Dashboard 正在监听的端口 。 然后紧接着我们把本地端口转发到 Pod 上的端口 , 我们可以从上面得到 pod 名称得到 pod 输出 。
$ kubectl port-forward -n chaos-testing chaos-dashboard-6fdb79c549-vmvtp 8888:2333现在我们可以通过 http://localhost:8888 访问 Dashboard 了 。从 Dashboard 上可以看到 , 目前我们还没有创建任何实验 。
Chaos Mesh 入门教程文章插图
创建混沌实验这里我们定义一个测试场景 , 在这个场景中 , 我们将为一个命名空间中的 Pod 配置 Chaos , 它将被安排每1分钟杀死一个 Pod 。 本例中 App 没有标签选择器 , 所以在多副本部署的情况下 , 它可以杀死任何 Pod 。 我们可以在配置中拥有不同的作用域 。
首先让我们克隆我们的示例仓库来获得 YAML 资源清单文件 。
$ git clone $ cd pod-chaos然后使用 Kubectl 应用命名空间选择器定义的文件 , 这将创建3个资源对象 。

  • 命名空间的名称为 appns
  • 使用 nginx 镜像部署3个副本
  • 使用 podchaos.chaos-mesh.org CRD 的 PodChaos对象
$ kubectl apply -f pod-namespace-selector.ymlnamespace/appns createddeployment.apps/nginx createdpodchaos.chaos-mesh.org/pod-kill-example created现在我们切换到 Chaos Mesh Dashboard 上验证这个实验 , 使用上面同样的步骤进入 。
Chaos Mesh 入门教程文章插图
我们可以看到实验已经被创建了 , 点击 pod-kill-example 旁边的 DETAIL 按钮可以来获取我们实验的详细信息 。
Chaos Mesh 入门教程文章插图
详细内容基本上和我们的 YAML 文件中的 PodChaos 对象描述是一样的 。
apiVersion: chaos-mesh.org/v1alpha1kind: PodChaosmetadata:name: pod-kill-examplenamespace: chaos-testingspec:action: pod-killmode: oneselector:namespaces:- appnsscheduler:cron: "@every 1m"现在 , 让我们在终端上使用 kubectl 来验证 pod 故障:
  • 初始化状态
$ kubectl get pods -n appns -wNAMEREADYSTATUSRESTARTSAGEnginx-86c57db685-57l8j1/1Running07snginx-86c57db685-mf2m91/1Running05m7snginx-86c57db685-szvqx1/1Running03m7s
  • 中间状态
nginx-86c57db685-mf2m91/1Terminating06mnginx-86c57db685-26cs90/1Pending00snginx-86c57db685-26cs90/1Pending00snginx-86c57db685-mf2m91/1Terminating06mnginx-86c57db685-26cs90/1ContainerCreating00snginx-86c57db685-26cs91/1Running04s我们可以清楚地看到 ,nginx-86c57db685-mf2m9 正在被终止 ,nginx-86c57db685-26cs9 正在被创建 。
  • 最终状态
$ kubectl get pods -n appnsNAMEREADYSTATUSRESTARTSAGEnginx-86c57db685-skcfv1/1Running0118snginx-86c57db685-szvqx1/1Running09m58snginx-86c57db685-znk4r1/1Running058s我们可以看到此时有2个 Pod 被重新创建 , 另外 , 我们还可以在实验详情下查看 Chaos Mesh Dashboard 上的事件 。
Chaos Mesh 入门教程文章插图
实验完成后我们可以执行下面的步骤来清理卸载组件 , 也包括 kind 创建的集群 。
$ kubectl delete ns chaos-testing$ kind delete cluster --name=kind我们还可以使用 Chaos Mesh 创建各种各样的故障场景 , 后面我们再分别介绍一些其他场景 。