4. 故障注入工具选型:Chaos Mesh、LitmusChaos、kube-monkey 对比与安装
在 HPA 伸缩任务编排的故障复测中,选择合适的故障注入工具是实验成功的关键。当前社区主流的开源工具包括 Chaos Mesh、LitmusChaos 和 kube-monkey。三者设计理念、故障类型、安装复杂度差异显著,需根据测试场景精准选型。
4.1 工具核心特性对比
| 对比维度 | Chaos Mesh | LitmusChaos | kube-monkey |
|---|---|---|---|
| 设计定位 | Kubernetes 原生混沌工程平台 | 云原生混沌工程框架(CNCF 沙箱) | Pod 随机杀灭工具(Netflix Chaos Monkey 移植) |
| 故障类型 | Pod 故障、网络延迟/丢包、DNS、HTTP、IO 延迟、压力注入等 20+ 种 | Pod 故障、网络、节点压力、HTTP、云服务 API 故障等 50+ 种(通过实验包扩展) | 仅支持 Pod 随机删除(基于标签选择) |
| 编排方式 | YAML CRD + Dashboard 可视化 | YAML CRD + Litmus Portal Web UI | 配置文件 + 命令行参数 |
| HPA 复测适配度 | 高(支持定时、串行、并行实验,可精确控制故障持续时间) | 高(支持工作流编排,可组合多个故障步骤) | 低(仅随机杀 Pod,无法控制故障时序与类型) |
| 安装复杂度 | 中(Helm 一键安装,需配置 admission webhook) | 中高(需安装 Operator、CRD、Portal 三组件) | 低(单二进制部署,无需 CRD) |
| 社区活跃度 | 高(PingCAP 主导,CNCF 沙箱) | 高(MayaData 主导,CNCF 沙箱) | 低(维护缓慢,功能单一) |
选型建议: 对于 HPA 伸缩任务编排的故障复测,推荐优先使用 Chaos Mesh 或 LitmusChaos。kube-monkey 仅适合做最简单的 Pod 随机杀灭验证,无法满足精细化故障编排需求。
4.2 工具架构与故障注入流程
下图展示了 Chaos Mesh 与 LitmusChaos 在 Kubernetes 集群中的核心架构差异。Chaos Mesh 采用 Sidecar + Webhook 模式注入故障,而 LitmusChaos 基于 Operator + Job 模式执行实验。
架构要点: Chaos Mesh 的 Sidecar 注入对目标 Pod 无侵入,适合生产环境灰度验证;LitmusChaos 的 Job 模式更灵活,但需要目标命名空间有足够的 RBAC 权限。
4.3 安装步骤详解
4.3.1 安装 Chaos Mesh(推荐用于 HPA 复测)
Chaos Mesh 提供 Helm 和 Operator 两种安装方式。以下使用 Helm 3 安装最新稳定版(v2.7.x):
# 1. 添加 Helm 仓库
helm repo add chaos-mesh https://charts.chaos-mesh.org
helm repo update
# 2. 创建命名空间
kubectl create namespace chaos-mesh
# 3. 安装 Chaos Mesh(开启 Dashboard)
helm install chaos-mesh chaos-mesh/chaos-mesh \
--namespace=chaos-mesh \
--set dashboard.securityMode=false \
--set chaosDaemon.runtime=containerd \
--set chaosDaemon.socketPath=/run/containerd/containerd.sock
# 4. 验证安装
kubectl get pods -n chaos-mesh
# 预期输出:chaos-controller-manager-xxx, chaos-daemon-xxx, chaos-dashboard-xxx 均为 Running
# 5. 暴露 Dashboard(开发环境)
kubectl port-forward -n chaos-mesh svc/chaos-dashboard 2333:2333
# 浏览器访问 http://localhost:2333
安装注意: 如果集群使用 containerd 运行时,必须设置
chaosDaemon.runtime=containerd 并指定正确的 socket 路径。默认路径为 /run/containerd/containerd.sock,若使用 CRI-O 或 Docker 需相应调整。
4.3.2 安装 LitmusChaos
LitmusChaos 2.x 版本采用 Operator + Portal 架构,安装步骤稍多:
# 1. 安装 Litmus Chaos Operator
kubectl apply -f https://litmuschaos.github.io/litmus/litmus-operator-v2.14.0.yaml
# 2. 验证 Operator 安装
kubectl get pods -n litmus
# 预期输出:chaos-operator-xxx Running
# 3. 安装 Litmus Portal(Web UI)
kubectl apply -f https://litmuschaos.github.io/litmus/litmus-portal-v2.14.0.yaml
# 4. 获取 Portal 访问地址
kubectl get svc -n litmus
# 默认 NodePort 或 LoadBalancer,根据集群配置访问
# 5. 安装 Chaos Experiments(故障实验包)
kubectl apply -f https://hub.litmuschaos.io/api/chaos/2.14.0?file=charts/generic/experiments.yaml
# 该命令会安装 generic 实验包,包含 pod-delete、network-delay 等常用故障
4.3.3 安装 kube-monkey(轻量级随机杀 Pod)
kube-monkey 安装最简单,适合快速验证:
# 1. 使用 Helm 安装
helm repo add kube-monkey https://asobti.github.io/kube-monkey
helm install kube-monkey kube-monkey/kube-monkey \
--namespace kube-system \
--set config.dryRun=false \
--set config.schedule.interval=30 \
--set config.schedule.startHour=8 \
--set config.schedule.endHour=20
# 2. 验证安装
kubectl get pods -n kube-system | grep kube-monkey
# 3. 配置目标 Deployment(添加 annotation)
# kubectl annotate deployment my-app kube-monkey/enabled=true
# kubectl annotate deployment my-app kube-monkey/mtbf=2
# kubectl annotate deployment my-app kube-monkey/kill-mode="fixed"
# kubectl annotate deployment my-app kube-monkey/kill-value=1
4.4 工具选型决策流程
根据 HPA 伸缩任务编排的故障复测需求,建议按以下流程选择工具:
- 是否需要精确控制故障时序与类型?
- 是 → 进入步骤 2
- 否(仅需随机杀 Pod)→ 选择 kube-monkey
- 是否需要可视化编排与 Dashboard?
- 是 → 进入步骤 3
- 否(偏好 YAML 直接定义)→ 两者均可,推荐 Chaos Mesh(CRD 更简洁)
- 是否已有 Prometheus + Grafana 监控体系?
- 是 → LitmusChaos(内置 chaos-exporter 集成更顺滑)
- 否 → Chaos Mesh(Dashboard 自带实验状态与事件查看)
本课程推荐: 后续章节的故障注入实验将统一使用 Chaos Mesh 作为主要工具,原因包括:安装简洁、CRD 定义直观、支持 Pod 网络延迟/CPU 压力等与 HPA 伸缩强相关的故障类型,且 Dashboard 便于观察实验状态。
4.5 安装后验证清单
| 验证项 | Chaos Mesh | LitmusChaos | kube-monkey |
|---|---|---|---|
| 核心 Pod 运行状态 | controller-manager, daemon, dashboard 均为 Running | chaos-operator, chaos-exporter, portal 均为 Running | kube-monkey Pod Running |
| CRD 注册 | kubectl get crd | grep chaos-mesh 返回 10+ CRD |
kubectl get crd | grep litmus 返回 5+ CRD |
无 CRD |
| Webhook 就绪 | kubectl get mutatingwebhookconfiguration 包含 chaos-mesh |
不依赖 Webhook | 不依赖 Webhook |
| 简单故障注入测试 | 创建 PodChaos 资源,观察 Pod 重启 | 创建 ChaosEngine 资源,观察 Job 执行 | 添加 annotation 后等待调度 |