1、CNCF 云原生专场周志强 2021年07月10日本期议题:云原生混沌工程平台 Chaos Mesh 原理与实践关于我周志强GitHub:STRRLPingCAP R&DChaos Mesh 的核心开发成员,拥有多年在云原生领域的开发经验.开源爱好者,Chaos Mesh Committer.目前专注于 Chaos Engineering,致力于构建一站式的 Chaos Engineering Platform.概览1.混沌工程与云原生应用2.Chaos Mesh 设计与实现3.使用案例混沌工程与云原生应用故障随时随地都可能发生!混沌工程与云原生应用分布式系统-越来越复杂混沌工程与云原生应用混
2、沌工程的演进史混沌工程与云原生应用云原生应用 容器化 Kubernetes 弹性 快速伸缩 为失败设计 优雅降级混沌工程与云原生应用混沌工程的目的混沌工程是在分布式系统上进行实验的学科,目的是建立对系统抵御生产环境中失控条件的能力以及信心。韧性 自愈引用自混沌工程原则:https:/principlesofchaos.org/zh/Chaos Mesh 设计与实现Chaos Mesh 是什么 开源云原生混沌工程平台 混沌实验的注入与编排 易用,支持可视化操作https:/chaos-mesh.org/https:/ Mesh 设计与实现什么是云原生云原生技术有利于各组织在公有云、私有云和混合云
3、等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器容器、服务网格、微服务、不可变基础设施不可变基础设施和声明式声明式 API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。1.CNCF Charter https:/ Mesh 设计与实现云原生技术的优点 声明式 API 明确地表示预期状态 控制器可靠地实施预期状态 方便地控制与观测 容器 资源隔离,限制爆炸半径 通过特权容器注入故障 不可变基础设施 稳定地分发 Release 便于试用,安装,部署Chaos Mesh 设计与实现
4、Chaos Mesh 整体架构 用户输入、观测 监听资源变化,进行注入/恢复 在具体节点上进行故障注入Chaos Mesh 设计与实现声明故障apiVersion:chaos-mesh.org/v1alpha1kind:Schedulemetadata:name:network-partitionspec:schedule:every 60s type:NetworkChaos historyLimit:5 concurrencyPolicy:Forbid networkChaos:action:delay mode:one selector:namespaces:-default label
5、Selectors:app:backend target:mode:one selector:namespaces:-default labelSelectors:app:redis duration:30s direction:to delay:latency:10ms correlation:100 jitter:0ms-从 backend 和 redis 的副本中各随机挑选出一个 pod;Chaos Mesh 设计与实现声明故障apiVersion:chaos-mesh.org/v1alpha1kind:Schedulemetadata:name:network-partitionspe
6、c:schedule:every 60s type:NetworkChaos historyLimit:5 concurrencyPolicy:Forbid networkChaos:action:delay mode:one selector:namespaces:-default labelSelectors:app:backend target:mode:one selector:namespaces:-default labelSelectors:app:redis duration:30s direction:to delay:latency:10ms correlation:100
7、 jitter:0ms-从 backend 和 redis 的副本中各随机挑选出一个 pod;-在 backend 到 redis 方向的网络流量上注入网络延迟;Chaos Mesh 设计与实现声明故障apiVersion:chaos-mesh.org/v1alpha1kind:Schedulemetadata:name:network-partitionspec:schedule:every 60s type:NetworkChaos historyLimit:5 concurrencyPolicy:Forbid networkChaos:action:delay mode:one sele
8、ctor:namespaces:-default labelSelectors:app:backend target:mode:one selector:namespaces:-default labelSelectors:app:redis duration:30s direction:to delay:latency:10ms correlation:100 jitter:0ms-从 backend 和 redis 的副本中各随机挑选出一个 pod;-在 backend 到 redis 方向的网络流量上注入网络延迟;-持续 30 秒,每 60 秒执行一次.Chaos Mesh 设计与实现监
9、听资源的变化 监听 PodChaos,NetworkChaos 等资源的 创建/更新/删除 决定当前该 注入/恢复/等待(进行简单的注入,比如 PodKill)向 Chaos Daemon/Sidecar 发送请求Chaos Mesh 设计与实现如何注入延迟?FIFOpfifo_fast/priotbfChaos Mesh 设计与实现ReconcileResourcePhysical ImplementationReplicaSetPodPodContainerConfigMapkey/value in etcd.NetworkChaosipset/iptables/tc qdisc/.Cha
10、os Mesh 设计与实现Chaos Daemon 注入Container 的实体:进程Namespace控制可见性Cgroup限制资源注入的实质侵入 Namespace/Cgroup进行干扰、注入隔离Chaos Mesh 设计与实现侵入 namespacensexec-net=/proc/xxx/ns/net iptables -A.nsexec-net=/proc/xxx/ns/net tc qdisc add.nsexec-pid=/proc/xxx/ns/pid stress-ng nsexec-mnt=/proc/xxx/ns/mnt inject.Chaos Mesh 设计与实现方便的安装,部署通过 helm 安装:Chaos Mesh 设计与实现方便的安装,部署在浏览器中试用:https:/chaos-mesh.org/interactive-tutorial使用案例小鹏汽车 使用使用 Chaos Mesh 测试监控告警系统测试监控告警系统 模拟低网络延迟情况模拟低网络延迟情况 覆盖监控测试系统覆盖监控测试系统 100%通过使用通过使用 Chaos Mesh 减少路试成本减少路试成本 90%使用案例网易伏羲实验室 测试组件测试组件(redis rabbitmq scheduler)3+目前发现的潜在问题目前发现的潜在问题 20+THANKS