新闻详情

新闻详情

首页 / 资讯中心 / 详情

Chaos Mesh 深入解析:Kubernetes 云原生混沌工程平台的架构、特性与快速上手指南

发布时间:2026/9/27 8:42:43来源:尧图网络
Chaos Mesh 深入解析:Kubernetes 云原生混沌工程平台的架构、特性与快速上手指南
云原生运维测试可观测性【免费下载链接】chaos-meshA Chaos Engineering Platform for Kubernetes.项目地址https://gitcode.com/gh_mirrors/ch/chaos-mesh点击查看免费下载Chaos Mesh 是一个开源的、云原生的 Kubernetes 混沌工程平台它通过 Kubernetes 自定义资源CRD来定义、编排并观测针对工作负载、基础设施、云服务和应用的受控故障注入。本文以仓库 README.md 为核心骨架结合cmd/、controllers/、api/、pkg/等目录的源码实现系统讲解 Chaos Mesh 的核心特性、三大运行时组件的职责划分、实验编排能力以及从 Helm 安装到运行首个故障实验的完整路径帮助你快速掌握这套平台的架构全貌与实战用法。项目概览与定位Chaos Mesh 由 Cloud Native Computing FoundationCNCF托管是 CNCF 孵化项目之一。它是一个面向 Kubernetes 的混沌工程平台核心理念是把故障注入变成 Kubernetes 原生资源——用户通过标准的 Kubernetes API 工具和 RBAC 来创建、管理混沌实验Controller Manager 负责调和期望状态Chaos Daemon 在节点上执行特权级故障操作。在深入细节之前先用一个宏观视角理解它解决的问题生产系统中的故障Pod 崩溃、网络延迟、磁盘 I/O 错误、时钟偏移等难以在测试环境复现Chaos Mesh 的价值在于把这些故障封装成语义清晰、可声明、可编排、可观测的 Kubernetes 资源对象让团队可以像管理普通工作负载一样管理破坏。核心特性README 中列举了 Chaos Mesh 的五大特性下面结合源码逐条展开。广泛的故障覆盖Broad fault coverageChaos Mesh 支持的故障类型覆盖了应用运行时的各个层面Pod 层Pod 删除pod-kill、Pod 故障pod-failure、容器杀死container-kill等网络层延迟delay、丢包loss、重复duplicate、篡改corrupt、分区partition、带宽限制bandwidth、DNS 故障DNSChaos、HTTP 故障HTTPChaos系统层I/O 故障IOChaos、时间偏移TimeChaos、压力注入StressChaos、内核故障KernelChaos基础设施层块设备故障BlockChaos、物理机故障PhysicalMachineChaos云服务层AWSEC2 停止/重启、卷分离、AzureVM 停止/重启、磁盘分离、GCP节点停止/重置、磁盘丢失上的故障注入应用层JVM 故障JVMChaos。这些类型都在 api/v1alpha1/ 目录下以 CRD 类型定义。以网络混沌为例api/v1alpha1/networkchaos_types.go 中定义了NetworkChaosAction枚举netem、delay、loss、duplicate、corrupt、partition、bandwidth其中netem会把多种动作合并为一次 Netem RPC 发送给 Chaos DaemonDirection枚举to、from、both则控制故障注入的流量方向。每种顶层混沌 Kind 都通过 api/v1alpha1/kinds.go 中的chaosKindMap全局注册表登记AllKinds()返回全部混沌类型AllKindsIncludeScheduleAndWorkflow()则额外包含Schedule和Workflow两个编排类型供调度与工作流模块按名称动态生成对象。Kubernetes 原生 APIKubernetes-native API混沌实验以自定义资源的形式存在通过 Kubernetes API 管理并使用标准的 Kubernetes 工具和 RBAC。这意味着你可以用kubectl apply、kubectl get、kubectl delete直接操作混沌资源混沌资源的访问权限受 Kubernetes RBAC 约束天然复用集群已有的鉴权体系实验对象会被 Controller Manager 以声明式level-based的方式调和。RBAC 的完整定义位于 config/rbac/role.yamlHelm 安装时也会通过rbac.create控制是否创建对应 RBAC 资源。实验编排Experiment orchestrationChaos Mesh 提供了三种编排资源支持从简单定时到复杂工作流的完整场景Schedule基于 Cron 表达式周期性执行混沌实验支持Forbid禁止并发默认与Allow允许并发两种并发策略Workflow支持串行serial或并行parallel的故障编排可以链式组合多个混沌步骤StatusCheck在实验中周期性地执行 HTTP 健康检查用于判定应用在混沌注入期间的可用性状态。以 api/v1alpha1/schedule_types.go 中的ScheduleSpec为例它包含scheduleCron 表达式、startingDeadlineSeconds启动截止时间、concurrencyPolicy并发策略默认Forbid、historyLimit历史记录上限最小为 1以及type与内联的ScheduleItem指定要调度哪种混沌类型。对应的工作流示例可参考 examples/workflow/serial.yaml、examples/workflow/parallel.yaml 和 examples/workflow/status-check.yaml。可视化 DashboardDashboard 提供 Web UI 和 HTTP API用于创建、管理并查看实验、Schedule 与 Workflow 的状态。它是可选的——如果团队习惯直接用 Kubernetes API 管理实验可以不安装 Dashboard。多集群执行Multi-cluster executionChaos Mesh 支持从管理集群management cluster注册远程集群RemoteCluster并把支持的混沌实验分发到远程集群执行。这一能力由 controllers/multicluster/ 目录下的控制器实现包括远程集群生命周期管理、远程混沌创建与状态/终结器同步。相关示例参见 examples/remote-cluster/。架构三大运行时组件README 明确指出 Chaos Mesh 有三个主要的运行时组件这也是理解整个平台的最重要框架Chaos Controller ManagerController Manager 是大脑职责包括监听watch所有 Chaos Mesh 自定义资源通过准入 Webhookadmission webhooks校验请求编排 Workflow 与实验调度协调故障注入与恢复recovery流程。其入口位于 cmd/chaos-controller-manager/main.go。从源码可以看到main.go通过 Uber Fx 依赖注入框架组装整个应用fx.New(...)将provider.Module、controllers.Module、selector.Module以及混沌对象与 Webhook 对象分组注入最终由Run函数注册 controller-runtime Manager、各类 Webhook 和/validate-auth鉴权 Webhook基于SecurityMode、ClusterScoped、TargetNamespace、EnableFilterNamespace等配置。控制器的装配点在 controllers/fx.go它提供 Chaos Daemon 客户端构建器、事件记录器、公共管线步骤与远程集群注册表注册公共混沌管线、Pod 级控制器PodHTTPChaos/PodIOChaos/PodNetworkChaos、工作流控制器、状态检查与多集群控制器并加载chaosimpl.AllImpl中注册的全部混沌实现。Controller Manager 的环境配置定义在 pkg/config/controller.go通过envconfig从环境变量读取关键项包括环境变量默认值说明CHAOS_DAEMON_SERVICE_PORT31767Chaos Daemon gRPC 服务端口ENABLE_LEADER_ELECTIONtrue是否启用 leader election保证同一时刻只有一个活跃 Controller ManagerENABLE_FILTER_NAMESPACEfalse仅向带chaos-mesh.org/injectenabled注解的命名空间注入故障CLUSTER_SCOPEDtrue是否以集群范围所有命名空间控制混沌对象TARGET_NAMESPACE空当CLUSTER_SCOPEDfalse时的目标命名空间SECURITY_MODEtrue是否启用准入 Webhook 的权限校验ENABLED_CONTROLLERS/ENABLED_WEBHOOKS*启用的控制器 / Webhook 白名单Chaos DaemonChaos Daemon 以 DaemonSet 形式运行在每个 Kubernetes 节点上是手脚。它执行特权级的节点与容器操作覆盖运行时、进程、网络、文件系统、时钟和内核层面的故障注入。其入口位于 cmd/chaos-daemon/main.go服务端逻辑集中在 pkg/chaosdaemon/如dns_server.go、ipset_server.go、iptables_server.go、tc_server.go、time_server_linux.go、stress_server_linux.go等按故障类型划分的服务实现。由于需要操纵宿主机网络栈、文件系统与时钟Chaos Daemon 默认以特权容器运行Helm 中chaosDaemon.privilegedtrue并在 Controller Manager 与 Daemon 之间启用 mTLSchaosDaemon.mtls.enabledtrue。Chaos DashboardDashboard 提供 HTTP API 与 Web 界面由 cmd/chaos-dashboard/main.go 启动其 API 服务、存储、收集器与 TTL 控制器分布在 pkg/dashboard/。Dashboard 通过 Uber Fx 组装main.go中还包含了根 Swagger 注解API 文档生成见make swagger_spec。组件协作流程用户通过 Kubernetes API直接或经 Dashboard创建或更新 Chaos Mesh 资源 → Controller Manager 调和期望状态 → 需要节点级操作时委托给 Chaos Daemon。顶层混沌对象经由 controllers/common/pipeline/README.md 描述的公共调和管线处理其步骤顺序是固定不变量顺序步骤负责的状态或效果1finalizers.InitStep为存活混沌对象添加公共 records 终结器2desiredphase.Step根据删除、一次性行为、时长与暂停状态推导Run/Stop3condition.Step从当前持久化对象推导 selected/injected/recovered/paused 条件4records.Step选择目标并通过Apply/Recover驱动每个 record 走向期望阶段5finalizers.CleanStep删除恢复完成或强制清理时移除终结器这套管线把目标选择、迭代、阶段迁移、持久化与重试集中在公共层而每个混沌实现如 controllers/chaosimpl/podchaos/只需实现针对单个目标的Apply与Recover行为——这是 controllers/README.md 中强调的一个字段只有一个逻辑写入者设计规则。快速上手从安装到运行第一个实验使用 Helm 安装Chaos Mesh 的官方安装方式是 Helm 3。仓库内完整的 Helm Chart 位于 helm/chaos-mesh/其详细使用说明见 helm/chaos-mesh/README.md。安装前提Helm 3 或更高版本受支持的 Kubernetes 集群与容器运行时创建集群级资源的权限CRD、ClusterRole、ClusterRoleBinding、准入 Webhook 配置允许在 Chaos Daemon 所在节点运行特权工作负载。方式一安装已发布的 Chart推荐生产使用helm repo add chaos-mesh https://charts.chaos-mesh.org helm repo update helm search repo chaos-mesh/chaos-mesh --versions helm install chaos-mesh chaos-mesh/chaos-mesh \ --namespace chaos-mesh \ --create-namespace \ --version version方式二从仓库源码安装开发/测试本地改动在仓库根目录执行helm upgrade --install chaos-mesh ./helm/chaos-mesh \ --namespace chaos-mesh \ --create-namespace源码 Chart 默认使用latest镜像标签需要可复现的安装时用--set images.tagtag固定镜像版本复杂配置则建议写入 values 文件helm upgrade --install chaos-mesh ./helm/chaos-mesh \ --namespace chaos-mesh \ --create-namespace \ --values my-values.yaml验证安装kubectl get pods --namespace chaos-mesh \ --selector app.kubernetes.io/instancechaos-meshChart 安装了什么根据 helm/chaos-mesh/README.mdChart 默认安装以下组件组件工作负载类型默认用途Controller managerDeployment3 副本启用调和 Chaos Mesh 资源并提供准入 WebhookChaos daemonDaemonSet特权启用执行节点级与容器级故障注入DashboardDeployment启用提供 Web UI 与 APIDNS serverDeployment启用支撑 DNSChaosPrometheusDeployment禁用可选的 Chart 内置 Prometheus 实例BPF kernel helperDaemonSet sidecar禁用通过chaos-kernel支持内核故障注入Delve sidecarsSidecar禁用支持远程调试 Chaos Mesh 组件此外还会创建所需的 Service、RBAC 资源、证书 Secret或 cert-manager 资源、准入 Webhook 配置以及 helm/chaos-mesh/crds/ 中的 CRD。常用 Helm 配置速查核心全局配置来自 helm/chaos-mesh/values.yamlValue默认值用途images.registryghcr.io全局镜像仓库组件可覆盖images.taglatest全局镜像标签组件可覆盖clusterScopedtrue集群级 vs 命名空间级调和与 RBACrbac.createtrue是否创建 Chart RBAC 资源timezoneUTC组件时区enableProfilingtrue组件性能分析端点extraObjects[]渲染额外的 Kubernetes 对象关键组件配置Value默认值用途controllerManager.replicaCount3Controller Manager 副本数controllerManager.targetNamespacechaos-meshclusterScopedfalse时监听的命名空间controllerManager.enableFilterNamespacefalse仅向带chaos-mesh.org/injectenabled注解的命名空间注入controllerManager.enabledControllers[*]启动的控制器列表controllerManager.enabledWebhooks[*]启动的 Webhook 列表controllerManager.leaderElection.enabledtrueController leader electionchaosDaemon.runtimedocker容器运行时适配器chaosDaemon.socketPath/var/run/docker.sock宿主机容器运行时 socketchaosDaemon.privilegedtrue以特权容器运行 daemonchaosDaemon.mtls.enabledtrueController 与 daemon 间 mTLSchaosDaemon.resourceProfilelight资源基线light/standard/intensivedashboard.createtrue安装 Dashboarddashboard.securityModetrueDashboard 需要凭据dashboard.service.typeNodePortDashboard Service 类型dashboard.persistentVolume.enabledfalse持久化默认 SQLite 数据库dnsServer.createtrue安装 DNSChaos serverprometheus.createfalse安装内置 Prometheuswebhook.certManager.enabledfalse使用 cert-manager 管理证书bpfki.createfalse启用chaos-kernel辅助组件chaosDlv.enablefalse添加 Delve 调试 sidecar容器运行时适配默认运行时是 Docker。改用 containerd 或 CRI-O 时需同时配置运行时与宿主机 socketchaosDaemon: runtime: containerd socketPath: /run/containerd/containerd.sockchaosDaemon: runtime: crio socketPath: /var/run/crio/crio.sock命名空间隔离模式设置clusterScopedfalse可将调和与目标绑定限制在单个命名空间CRD 与控制面部分资源仍为集群级clusterScoped: false controllerManager: targetNamespace: testing dnsServer: targetNamespace: testing如果希望保持集群级操作、但只允许注入到主动opt-in的命名空间则设置controllerManager.enableFilterNamespacetrue并注解命名空间kubectl annotate namespace testing chaos-mesh.org/injectenabled升级与卸载升级时先阅读 release notes 与 CRD 变更并复用安装时的 values 文件helm upgrade chaos-mesh chaos-mesh/chaos-mesh \ --namespace chaos-mesh \ --version version \ --values my-values.yaml卸载helm uninstall chaos-mesh --namespace chaos-meshCRD 生命周期注意事项Helm 不会升级或删除crds/目录中的 CRD。升级前需要单独审查并应用变更后的 CRDhelm uninstall会有意保留 CRD 及所有 Chaos Mesh 自定义资源在集群中删除 CRD 属于独立的破坏性操作会连同其自定义资源一并删除。源码开发时可用kubectl apply --filename helm/chaos-mesh/crds/更新已安装的 CRD。运行第一个混沌实验安装完成后即可通过kubectl直接创建混沌实验。以最简单的 PodChaospod-kill为例examples/pod-kill-example.yaml 给出了完整清单apiVersion: chaos-mesh.org/v1alpha1 kind: PodChaos metadata: name: pod-kill-example spec: action: pod-kill mode: one selector: labelSelectors: app.kubernetes.io/component: tikv应用后Controller Manager 的公共管线会为目标 Pod 执行Apply注入故障注入与恢复的状态会通过实验的status字段和 Dashboard 呈现。仓库 examples/ 目录还提供了大量可直接复用的场景模板包括网络延迟examples/network-delay-example.yaml、网络分区examples/network-partition-example.yaml、Pod 故障examples/pod-failure-example.yaml、I/O 故障examples/io-delay-example.yaml、时间偏移examples/time-chaos-example.yaml、定时调度examples/schedule-podchaos.yaml以及工作流examples/workflow/serial.yaml等。不想搭集群README 推荐了一个约 20 分钟的交互式 Killercoda 在线练习场景在真实的双节点 Kubernetes 集群上安装 Chaos Mesh运行 PodChaos 与 NetworkChaos 实验探索 Dashboard并串联一个 Workflow。深入仓库源码导航与开发指引如果想继续深入README 指向了三份核心文档仓库内已有完整内容控制器架构指南详细介绍 controller-runtime reconciler 的组织方式。所有控制器通过 Uber Fx 在controllers.Module中组装由cmd/chaos-controller-manager加载。设计规则包括每个字段只有一个逻辑写入者、调和必须是幂等且 level-based、冲突重试时只重放自己拥有的字段、遵循 controller-runtime v0.21 的错误与 requeue 语义RequeueAfter用于已知延迟reconcile.TerminalError仅用于重试无意义的情形。命令入口点指南cmd/下每个子目录构建一个命令。产品镜像中交付的二进制为chaos-controller-manager、chaos-daemon、cdhchaos-daemon-helper与chaos-dashboardwatchmaker是 Linux 专用的进程时钟偏移辅助工具chaos-builder与generate-makefile是仓库开发工具不随服务部署。入口点应保持精简业务逻辑放在可导入的包中控制器装配在controllers/daemon 服务在pkg/chaosdaemon/Dashboard 服务在pkg/dashboard/。Helm Chart 指南values.yaml是带注释的主配置参考与默认值来源values.schema.json由它生成crds/由api/与config/crd/bases/生成修改 API 类型后运行make generate并一起审查config/crd/bases/、helm/chaos-mesh/crds/与manifests/crd.yaml的输出。常用开发命令来自两份指南均在仓库根目录执行# 聚焦测试 go test ./controllers/common/... go test ./controllers/schedule/... go test ./controllers/statuscheck/... go test ./controllers/multicluster/... go test ./controllers/chaosimpl/podchaos/... go test ./cmd/chaos-controller-manager/provider/... go test ./pkg/chaosdaemon/... go test ./pkg/dashboard/... go test ./cmd/chaos-builder/... # 构建二进制 make local/chaos-controller-manager make local/chaos-dashboard make images/chaos-daemon/bin/chaos-daemon make images/chaos-daemon/bin/cdh make image-chaos-mesh # 代码/CRD/文档生成 make chaos-build # 仅混沌 API 生成 make generate # deepcopy、clients、CRD、Swagger 等全套生成 make generate-makefile make swagger_spec make helm-values-schema注意Chaos Daemon 与 watchmaker 的 Linux 实现依赖 Linux 特性、CGO 或原生辅助对象并在正常运行中需要提权应在 Linux 环境使用对应 Make 目标构建验证不要直接在开发机上执行故障注入辅助程序。开源治理与生态作为 CNCF 孵化项目Chaos Mesh 遵循 Apache License 2.0见 LICENSE。仓库同时提供了完整的社区治理材料贡献流程见 CONTRIBUTING.md所有贡献者须遵守 CODE_OF_CONDUCT.md安全问题按 SECURITY.md 流程上报生产用户列表见 ADOPTERS.md。结语Chaos Mesh 用一套简洁而完备的资源模型把混沌工程从临时脚本注入故障演进为声明式、可编排、可观测的 Kubernetes 原生实践。从本文的梳理可以看到三大运行时组件Controller Manager / Chaos Daemon / Dashboard各司其职公共调和管线保证了故障生命周期的确定性Schedule / Workflow / StatusCheck 提供了从定时触发到复杂编排的完整能力而 Helm Chart 让安装与配置管理变得标准而可控。如果你正准备在 Kubernetes 上落地混沌工程实践不妨从 examples/ 中的示例清单开始结合 controllers/README.md 与 cmd/README.md 深入源码逐步构建属于自己团队的故障演练体系。赞分享云原生运维测试可观测性【免费下载链接】chaos-meshA Chaos Engineering Platform for Kubernetes.项目地址https://gitcode.com/gh_mirrors/ch/chaos-mesh点击查看免费下载相关推荐Chaos Mesh 终极指南云原生混沌工程快速上手Chaos Mesh 终极指南云原生混沌工程快速上手 Chaos Mesh 是一款强大的云原生混沌工程平台专为 Kubernetes 环境设计帮助开发者通云原生运维测试可观测性Chaos Mesh云原生混沌工程平台的革命性突破与核心架构解析Chaos Mesh云原生混沌工程平台的革命性突破与核心架构解析 在当今云原生技术快速发展的时代 Chaos Mesh 作为一款开源的云原生混沌工程平台正云原生运维测试可观测性Corange物理系统实现碰撞检测与刚体物理的C语言解决方案Corange物理系统实现碰撞检测与刚体物理的C语言解决方案 Corange是一个纯C语言编写的游戏引擎其物理系统提供了高效的碰撞检测与刚体物理解决方案。对上一篇如何使用SCRCPY实现无线投屏新手必备的10分钟快速上手指南下一篇3步攻克db_tutorial聚合查询从B树存储到GROUP BY实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

undici MockPool 完整指南:按路由拦截 HTTP 请求、定义 Mock 响应与编写无网络依赖的测试 2026/9/27 9:33:54

undici MockPool 完整指南:按路由拦截 HTTP 请求、定义 Mock 响应与编写无网络依赖的测试

后端网络通信 【免费下载链接】undici An HTTP/1.1 client, written from scratch for Node.js 项目地址: https://gitcode.com/gh_mirrors/un/undici 点击查看 免费下载 MockPool 是 undici 内置测试利器:它继承自 Pool,能够拦截与已注册路…

阅读更多 →
TypeGraphQL 泛型类型(Generic Types)实战指南:用类工厂模式实现可复用的分页响应类型 2026/9/27 9:33:53

TypeGraphQL 泛型类型(Generic Types)实战指南:用类工厂模式实现可复用的分页响应类型

后端GraphQLAPI设计 【免费下载链接】type-graphql Create GraphQL schema and resolvers with TypeScript, using classes and decorators! 项目地址: https://gitcode.com/gh_mirrors/ty/type-graphql 点击查看 免费下载 TypeGraphQL 提供了一套基于 TypeScript …

阅读更多 →
第242篇_数字藏品平台交易数据采集 2026/9/27 9:33:53

第242篇_数字藏品平台交易数据采集

【Python爬虫实战】第242篇:把热销榜和成交记录全拉下来——数字藏品平台藏品价格与成交量抓取实战 所属专栏:【Python爬虫实战】从零到企业级爬虫工程师(CSDN 付费专栏) 本篇篇目:第 242 篇(垂直行业数据采集专题) 难度等级:中级,列表页 + 详情页双段式采集 阅读时长…

阅读更多 →
Animate2025安装教程(非常详细)从零基础入门到精通 2026/9/27 9:33:53

Animate2025安装教程(非常详细)从零基础入门到精通

前言 大家好!今天我要给大家带来一篇关于Adobe Animate下载安装的超详细教程。作为一名动画爱好者,我深知初学者安装软件时可能遇到的各种困惑。无论你是准备学习动画制作的新手,还是需要升级到最新版本的老手,这篇animate安装教…

阅读更多 →
GenOffice Sheets 技术指南:AI 原生电子表格的架构、流式 XLSX 读取与保真保存 2026/9/27 9:33:53

GenOffice Sheets 技术指南:AI 原生电子表格的架构、流式 XLSX 读取与保真保存

人工智能AI 应用桌面应用AI AgentMCP 服务AI 技能 【免费下载链接】genoffice Free, open-source AI Office suite: Docs, Sheets, Slides, PDF, Markdown and HTML editors with a built-in AI agent, plus a genoffice CLI and agent skill so Claude Code, Codex and Cursor…

阅读更多 →
Laya 多语决策模型 ANE 迁移工程实录:固定形状 BC1S 重写、Compute Plan 验证与压缩筛选 2026/9/27 9:33:25

Laya 多语决策模型 ANE 迁移工程实录:固定形状 BC1S 重写、Compute Plan 验证与压缩筛选

【免费下载链接】laya-coreml Local Laya typed decisions on Apple Core ML and Neural Engine. Validated ports, ~5 ms short decisions on M3 Max, reproducible speed and energy benchmarks. 项目地址: https://gitcode.com/gh_mirrors/la/laya-coreml 点击查…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉