Chaos Mesh 入门教程


Chaos Mesh 入门教程文章插图
来源:微信公众号:k8s技术圈
作者:阳明
出处:;mid=2247486859 --tt-darkmode-bgcolor: #131313;">混沌工程是在分布式系统上进行实验的学科 , 目的是建立对系统抵御生产环境中失控条件的能力以及信心 。
大规模分布式软件系统的发展正在改变软件工程 , 作为一个行业 , 我们很快采用了提高开发灵活性和部署速度的实践 。 紧随着这些优点的一个迫切问题是:我们对投入生产的复杂系统有多少信心?
【Chaos Mesh 入门教程】即使分布式系统中的所有单个服务都正常运行, 这些服务之间的交互也会导致不可预知的结果 。 这些不可预知的结果, 由影响生产环境的罕见且破坏性的事件复合而成 , 令这些分布式系统存在内在的混沌 。
我们需要在异常行为出现之前 , 在整个系统内找出这些弱点 。 这些弱点包括以下形式:

  • 当服务不可用时的不正确回滚设置;
  • 不当的超时设置导致的重试风暴;
  • 由于下游依赖的流量过载导致的服务中断;
  • 单点故障时的级联失败等 。
我们必须主动的发现这些重要的弱点 , 在这些弱点通过生产环境暴露给我们的用户之前 。 我们需要一种方法来管理这些系统固有的混沌, 通过增加的灵活性和速率以提升我们对生产环境部署的信心, 尽管系统的复杂性是由这些部署所导致的 。
我们采用基于经验和系统的方法解决了分布式系统在规模增长时引发的问题 , 并以此建立对系统抵御这些事件的能力和信心 , 通过在受控实验中观察分布式系统的行为来了解它的特性 , 我们称之为混沌工程 。
什么是 Chos Mesh?Chaos Mesh?是云原生计算基金会(CNCF)托管的项目 。

Chaos Mesh 是一个云原生混沌工程平台 , 提供了在 Kubernetes 平台上进行混沌测试的能力 。

Chaos Mesh 是一个通用的混沌工程解决方案 , 它的特点是对Kubernetes 上的复杂系统进行全方位的故障注入方法 , 涵盖了 Pod、网络、文件系统甚至内核的故障 。 Chaos Mesh 主要包括下面两个组件:
  • Chaos Operator :混沌编排的核心组件 。
  • Chaos Dashboard :用于管理、设计、监控混沌实验的 Web UI 。
Chaos Mesh 使用 CRD 来定义混沌对象 。 Chaos Mesh 的整体架构非常简单 , 组件部署在 Kubernetes 之上 , 我们可以使用 YAML 文件或者使用 Chaos mesh Dashboard 上的 Form 来指定场景 。 其中会有一个 Chaos Daemon , 以 Daemonset 的形式运行 , 对特定节点的网络、Cgroup 等具有系统权限 。
Chaos Mesh 入门教程文章插图
目前实现的 CRD 对象支持6种类型的故障注入 , 分别是 PodChaos、NetworkChaos、IOChaos、TimeChaos、StressChaos 和 KernelChaos , 对应的主要动作如下所示:
  • pod-kill :模拟 Kubernetes Pod 被 kill 。
  • pod-failure :模拟 Kubernetes Pod 持续不可用 , 可以用来模拟节点宕机不可用场景 。
  • network-delay :模拟网络延迟 。
  • network-loss :模拟网络丢包 。
  • network-duplication : 模拟网络包重复 。
  • network-corrupt : 模拟网络包损坏 。
  • network-partition :模拟网络分区 。
  • I/O delay : 模拟文件系统 I/O 延迟 。
  • I/O errno :模拟文件系统 I/O 错误。
安装我们可以直接在 Kubernetes 集群上很方便地安装 Chaos Mesh , 这里我们使用轻量级的 Kind 搭建的 Kubernetes 集群 。 当然在部署之前 , 先确保 Docker 已在本地机器上安装并运行 。
$ curl -sSL| bash上面的命令会安装所有的 CRD、ServiceAccount 和所有组件 , 如果你使用的是 k3s 或 k3d , 需要指定 kind 参数 。
$ curl -sSL| bash -s —-local kind如果你已经安装了大于 0.7 版本的Kind , 那么脚本将继续 , 否则将安装一个新的版本 。 脚本运行后的输出结果如下所示:
Install kubectl clientkubectl Version 1.18.8 has been installedInstall Kind toolKind Version 0.8.1 has been installedInstall local Kubernetes kindNo kind clusters found.Clean data dir: /Users/rbanka/kind/kind/datastart to create kubernetes cluster kindCreating cluster "kind" ...DEBUG: docker/images.go:58] Image: kindest/node:v1.17.2 present locally ? Ensuring node image (kindest/node:v1.17.2)? Preparing nodes :package: :package: :package: :package: ? Writing configuration :scroll: ? Starting control-plane? ? Installing CNI :electric_plug: ? Installing StorageClass :floppy_disk: ? Joining worker nodes :tractor:Set kubectl context to "kind-kind"You can now use your cluster with:kubectl cluster-info --context kind-kindThanks for using kind! :blush:Install Chaos Mesh chaos-meshcustomresourcedefinition.apiextensions.k8s.io/iochaos.chaos-mesh.org createdcustomresourcedefinition.apiextensions.k8s.io/kernelchaos.chaos-mesh.org createdcustomresourcedefinition.apiextensions.k8s.io/networkchaos.chaos-mesh.org createdcustomresourcedefinition.apiextensions.k8s.io/podchaos.chaos-mesh.org createdcustomresourcedefinition.apiextensions.k8s.io/podiochaos.chaos-mesh.org createdcustomresourcedefinition.apiextensions.k8s.io/podnetworkchaos.chaos-mesh.org createdcustomresourcedefinition.apiextensions.k8s.io/stresschaos.chaos-mesh.org createdcustomresourcedefinition.apiextensions.k8s.io/timechaos.chaos-mesh.org creatednamespace/chaos-testing createdserviceaccount/chaos-controller-manager createdsecret/chaos-mesh-webhook-certs createdclusterrole.rbac.authorization.k8s.io/chaos-mesh:chaos-controller-manager-target-namespace createdclusterrole.rbac.authorization.k8s.io/chaos-mesh:chaos-controller-manager-cluster-level createdclusterrolebinding.rbac.authorization.k8s.io/chaos-mesh:chaos-controller-manager-cluster-level createdclusterrolebinding.rbac.authorization.k8s.io/chaos-mesh:chaos-controller-manager-target-namespace createdrole.rbac.authorization.k8s.io/chaos-mesh:chaos-controller-manager-control-plane createdrolebinding.rbac.authorization.k8s.io/chaos-mesh:chaos-controller-manager-control-plane createdservice/chaos-dashboard createdservice/chaos-mesh-controller-manager createddaemonset.apps/chaos-daemon createddeployment.apps/chaos-dashboard createddeployment.apps/chaos-controller-manager createdmutatingwebhookconfiguration.admissionregistration.k8s.io/chaos-mesh-mutation createdvalidatingwebhookconfiguration.admissionregistration.k8s.io/chaos-mesh-validation createdWaiting for pod runningchaos-controller-manager-754d4f7585-h9p4c0/1ContainerCreating010sWaiting for pod runningchaos-controller-manager-754d4f7585-h9p4c0/1ContainerCreating021sWaiting for pod runningchaos-controller-manager-754d4f7585-h9p4c0/1ContainerCreating031sWaiting for pod runningChaos Mesh chaos-mesh is installed successfully