

一、概述
混沌工程通过主动注入故障验证系统在异常情况下的行为,发现分布式系统中的未知弱点。Chaos Mesh 是 CNCF 托管的云原生混沌工程平台,提供丰富的故障注入能力,支持 Pod 故障、网络异常、IO 延迟、压力测试等多种实验类型。相比传统的故障演练,Chaos Mesh 通过 Kubernetes CRD 实现故障场景的代码化,支持定时执行、条件触发、自动回滚等高级特性。
在微服务架构下,服务依赖关系复杂,级联故障、雪崩效应等问题难以通过传统测试发现。通过混沌实验可验证熔断降级、超时重试、资源隔离等容错机制的有效性,在故障真实发生前建立信心。Chaos Mesh 的安全边界设计确保实验不会扩散到非目标资源,回滚机制保证实验结束后系统自动恢复。
组件 | 版本要求 | 说明 |
|---|---|---|
操作系统 | Linux 内核 4.x+ | 需支持 cgroup、namespace、iptables |
Kubernetes | 1.20+ | Chaos Mesh 3.0+ 要求 K8s 1.20+ |
Helm | 3.5+ | 推荐使用 Helm 安装 Chaos Mesh |
Docker/containerd | 1.20+ / 1.5+ | 容器运行时,需支持 CRI 接口 |
权限要求 | 集群管理员 | 需创建 CRD、ClusterRole 等集群资源 |
硬件配置 | 2C4G | Controller Manager 推荐 4C8G |
# 验证 Kubernetes 集群版本
kubectl version --short
# 检查节点状态和内核版本
kubectl get nodes -o wide
# 验证容器运行时
kubectl get nodes -o jsonpath='{.items[*].status.nodeInfo.containerRuntimeVersion}'
# 检查是否已有混沌实验残留
kubectl get podchaos,networkchaos,iochaos,stresschaos --all-namespaces
# 验证 Helm 版本
helm version
# 添加 Chaos Mesh Helm 仓库
helm repo add chaos-mesh https://charts.chaos-mesh.org
helm repo update
# 创建命名空间
kubectl create namespace chaos-mesh
# 安装 Chaos Mesh(包含 Dashboard)
helm install chaos-mesh chaos-mesh/chaos-mesh \
--namespace chaos-mesh \
--set chaosDaemon.runtime=containerd \
--set chaosDaemon.socketPath=/run/containerd/containerd.sock \
--set dashboard.create=true \
--set dashboard.securityMode=false \
--version 2.6.0
# 等待所有组件就绪
kubectl wait --for=condition=available --timeout=300s \
deployment/chaos-controller-manager \
deployment/chaos-dashboard \
-n chaos-mesh
# 验证 CRD 安装
kubectl get crd | grep chaos-mesh.org
说明:chaosDaemon.runtime 根据实际容器运行时选择(docker/containerd/crio),socketPath 需与节点实际路径匹配。生产环境建议启用 dashboard.securityMode 并配置认证。
# protected-namespaces.yaml
apiVersion:v1
kind:ConfigMap
metadata:
name:chaos-mesh
namespace:chaos-mesh
data:
# 受保护的命名空间,禁止注入故障
protected-namespaces:|
- kube-system
- kube-public
- kube-node-lease
- chaos-mesh
- istio-system
- monitoring
# 应用配置
kubectl apply -f protected-namespaces.yaml
# 重启 Controller Manager 生效
kubectl rollout restart deployment/chaos-controller-manager -n chaos-mesh
# chaos-operator-role.yaml
apiVersion:rbac.authorization.k8s.io/v1
kind:ClusterRole
metadata:
name:chaos-operator
rules:
-apiGroups:["chaos-mesh.org"]
resources:["*"]
verbs:["create","get","list","watch","update","delete"]
-apiGroups:[""]
resources:["pods","pods/log","pods/exec"]
verbs:["get","list","watch"]
-apiGroups:["apps"]
resources:["deployments","statefulsets"]
verbs:["get","list"]
---
apiVersion:rbac.authorization.k8s.io/v1
kind:ClusterRoleBinding
metadata:
name:chaos-operator-binding
roleRef:
apiGroup:rbac.authorization.k8s.io
kind:ClusterRole
name:chaos-operator
subjects:
-kind:ServiceAccount
name:chaos-operator
namespace:default
---
apiVersion:v1
kind:ServiceAccount
metadata:
name:chaos-operator
namespace:default
# 创建专用 ServiceAccount
kubectl apply -f chaos-operator-role.yaml
参数说明:
chaos-mesh.org API Group:所有混沌实验 CRD 的权限pods/log、pods/exec:部分实验类型(如 IOChaos)需执行命令注入故障# dashboard-ingress.yaml
apiVersion:networking.k8s.io/v1
kind:Ingress
metadata:
name:chaos-dashboard
namespace:chaos-mesh
annotations:
nginx.ingress.kubernetes.io/rewrite-target:/
spec:
ingressClassName:nginx
rules:
-host:chaos.example.com
http:
paths:
-path:/
pathType:Prefix
backend:
service:
name:chaos-dashboard
port:
number:2333
# 应用 Ingress
kubectl apply -f dashboard-ingress.yaml
# 或使用端口转发(开发测试)
kubectl port-forward -n chaos-mesh svc/chaos-dashboard 2333:2333
# 访问 Dashboard
# http://localhost:2333
# test-app.yaml
apiVersion:apps/v1
kind:Deployment
metadata:
name:web-server
namespace:default
spec:
replicas:3
selector:
matchLabels:
app:web-server
template:
metadata:
labels:
app:web-server
spec:
containers:
-name:nginx
image:nginx:1.25
ports:
-containerPort:80
resources:
requests:
cpu:100m
memory:128Mi
limits:
cpu:500m
memory:512Mi
---
apiVersion:v1
kind:Service
metadata:
name:web-server
namespace:default
spec:
selector:
app:web-server
ports:
-port:80
targetPort:80
# 部署测试应用
kubectl apply -f test-app.yaml
# 验证应用运行
kubectl get pods -l app=web-server
kubectl run curl-test --image=curlimages/curl --rm -it --restart=Never -- curl -I http://web-server
# pod-kill-experiment.yaml
apiVersion:chaos-mesh.org/v1alpha1
kind:PodChaos
metadata:
name:web-server-pod-kill
namespace:default
spec:
action:pod-kill
mode:one
selector:
namespaces:
-default
labelSelectors:
app:web-server
duration:"30s"
scheduler:
cron:"@every 2m"
# 应用实验
kubectl apply -f pod-kill-experiment.yaml
# 观察 Pod 被杀死和重启
kubectl get pods -l app=web-server -w
# 查看实验状态
kubectl describe podchaos web-server-pod-kill
# 查看实验事件
kubectl get events --field-selector involvedObject.name=web-server-pod-kill
# 删除实验(停止定时执行)
kubectl delete podchaos web-server-pod-kill
预期结果:
NAME READY STATUS RESTARTS AGE
web-server-7d4b6c8f9d-abc12 1/1 Running 0 5m
web-server-7d4b6c8f9d-def34 0/1 Terminating 0 3m # 被 Chaos Mesh 杀死
web-server-7d4b6c8f9d-ghi56 1/1 Running 0 5m
web-server-7d4b6c8f9d-jkl78 0/1 ContainerCreating 0 1s # Deployment 自动重建
# network-delay.yaml
apiVersion:chaos-mesh.org/v1alpha1
kind:NetworkChaos
metadata:
name:web-server-network-delay
namespace:default
spec:
action:delay
mode:all
selector:
namespaces:
-default
labelSelectors:
app:web-server
delay:
latency:"200ms"
correlation:"50"
jitter:"50ms"
duration:"5m"
direction:to
target:
mode:all
selector:
namespaces:
-default
labelSelectors:
app:backend-service
参数说明:
action: delay:注入网络延迟,其他选项包括 loss(丢包)、duplicate(重复包)、corrupt(损坏包)、partition(网络分区)latency: "200ms":基础延迟时长correlation: "50":延迟相关性(0-100),值越高延迟越稳定jitter: "50ms":延迟抖动范围direction: to:流量方向,to 表示目标 Pod 发出的流量,from 表示进入目标 Pod 的流量target:可选,指定受影响的目标服务(不指定则影响所有流量)# io-delay.yaml
apiVersion:chaos-mesh.org/v1alpha1
kind:IOChaos
metadata:
name:mysql-io-delay
namespace:default
spec:
action:delay
mode:one
selector:
namespaces:
-default
labelSelectors:
app:mysql
volumePath:/var/lib/mysql
path:"/var/lib/mysql/**/*"
delay:"200ms"
percent:50
duration:"5m"
containerNames:
-mysql
参数说明:
action: delay:IO 延迟,其他选项包括 errno(返回错误码)、attrOverride(修改文件属性)volumePath:注入故障的挂载点路径path:受影响的文件路径,支持通配符percent: 50:50% 的 IO 操作受影响containerNames:指定容器名称(Pod 内多容器场景)# stress-cpu.yaml
apiVersion:chaos-mesh.org/v1alpha1
kind:StressChaos
metadata:
name:web-server-cpu-stress
namespace:default
spec:
mode:one
selector:
namespaces:
-default
labelSelectors:
app:web-server
stressors:
cpu:
workers:2
load:80
memory:
workers:1
size:"512MB"
duration:"3m"
containerNames:
-nginx
参数说明:
cpu.workers: 2:启动 2 个 CPU 压力进程cpu.load: 80:每个进程占用 80% CPUmemory.size:分配并占用的内存大小stress-ng 工具实现,Chaos Daemon 注入到目标容器场景描述:应用使用 Istio/Envoy 配置熔断策略,连续 5 次 5xx 错误后熔断 30 秒。通过注入网络故障触发熔断,验证降级逻辑。
实现代码:
# circuit-breaker-test.yaml
apiVersion:chaos-mesh.org/v1alpha1
kind:NetworkChaos
metadata:
name:backend-unavailable
namespace:default
spec:
action:loss
mode:all
selector:
namespaces:
-default
labelSelectors:
app:backend-service
loss:
loss:"100"
correlation:"100"
duration:"2m"
direction:from
# 启动实验
kubectl apply -f circuit-breaker-test.yaml
# 并发请求触发熔断
for i in {1..100}; do
kubectl exec -it curl-test -- curl -s -o /dev/null -w "%{http_code}\n" http://frontend-service &
done
# 观察 Istio Envoy 指标
kubectl exec -it <frontend-pod> -c istio-proxy -- curl localhost:15000/stats | grep upstream_rq
# 清理实验
kubectl delete networkchaos backend-unavailable
运行结果:
# 前 5 次请求返回 503(backend 不可达)
503
503
503
503
503
# 熔断器打开,后续请求立即返回 503(不再请求 backend)
503
503
...
# 30 秒后熔断器半开,尝试恢复
200
场景描述:PostgreSQL 主从架构,使用 Patroni 管理高可用。模拟主库 Pod 删除,验证从库自动晋升,应用连接切换时长。
实现步骤:
#!/bin/bash
# monitor-db-switch.sh
whiletrue; do
PRIMARY=$(kubectl exec -it postgres-0 -- patronictl list | grep Leader | awk '{print $2}')
QUERY_TIME=$(kubectl exec -it app-pod -- psql -h postgres -U user -d db -c "SELECT now();" 2>&1 | grep ERROR || echo"OK")
echo"$(date '+%H:%M:%S') | Primary: $PRIMARY | Query: $QUERY_TIME"
sleep 1
done
# db-failover-test.yaml
apiVersion:chaos-mesh.org/v1alpha1
kind:PodChaos
metadata:
name:postgres-primary-kill
namespace:default
spec:
action:pod-kill
mode:one
selector:
namespaces:
-default
labelSelectors:
app:postgres
role:master
duration:"10s"
# 启动监控
./monitor-db-switch.sh &
# 执行实验
kubectl apply -f db-failover-test.yaml
# 观察输出
# 10:30:00 | Primary: postgres-0 | Query: OK
# 10:30:05 | Primary: postgres-0 | Query: ERROR connection refused
# 10:30:08 | Primary: postgres-1 | Query: ERROR connection refused
# 10:30:12 | Primary: postgres-1 | Query: OK
# 结论:切换时长 12 秒,其中 7 秒不可用
场景描述:串行执行网络延迟 → 磁盘压力 → Pod 杀死,模拟多重故障场景,验证系统综合韧性。
实现步骤:
# complex-workflow.yaml
apiVersion:chaos-mesh.org/v1alpha1
kind:Workflow
metadata:
name:complex-chaos-workflow
namespace:default
spec:
entry:the-entry
templates:
-name:the-entry
templateType:Serial
deadline:30m
children:
-workflow-network-delay
-workflow-io-stress
-workflow-pod-kill
-workflow-suspend
-workflow-final-check
-name:workflow-network-delay
templateType:NetworkChaos
deadline:5m
networkChaos:
direction:to
action:delay
mode:all
selector:
labelSelectors:
app:web-server
delay:
latency:"500ms"
duration:"3m"
-name:workflow-io-stress
templateType:IOChaos
deadline:5m
ioChaos:
action:delay
mode:one
selector:
labelSelectors:
app:web-server
volumePath:/var/log
path:"/var/log/**/*"
delay:"100ms"
percent:80
duration:"3m"
-name:workflow-pod-kill
templateType:PodChaos
deadline:2m
podChaos:
action:pod-kill
mode:one
selector:
labelSelectors:
app:web-server
-name:workflow-suspend
templateType:Suspend
deadline:2m
suspend:
duration:"1m"
-name:workflow-final-check
templateType:Task
deadline:5m
task:
container:
name:check
image:curlimages/curl:latest
command:
-sh
--c
-|
for i in {1..10}; do
CODE=$(curl -s -o /dev/null -w "%{http_code}" http://web-server)
if [ "$CODE" != "200" ]; then
echo "Health check failed: $CODE"
exit 1
fi
sleep 1
done
echo "All checks passed"
# 执行 Workflow
kubectl apply -f complex-workflow.yaml
# 查看执行状态
kubectl get workflow complex-chaos-workflow -w
# 查看每个步骤状态
kubectl describe workflow complex-chaos-workflow
# 清理
kubectl delete workflow complex-chaos-workflow
原则一:小范围开始,逐步扩大
# 第一阶段:单个 Pod
spec:
mode:one
# 第二阶段:固定数量
spec:
mode:fixed
value:"2"
# 第三阶段:百分比
spec:
mode:fixed-percent
value:"30"
# 第四阶段:全部 Pod
spec:
mode:all
原则二:建立观测基线
# 实验前记录正常指标
kubectl exec -it prometheus-0 -- promtool query instant \
'rate(http_requests_total[5m])'
# 实验中对比异常指标
kubectl exec -it prometheus-0 -- promtool query instant \
'rate(http_requests_errors[5m])'
原则三:定义明确的成功标准
措施一:配置资源选择器保护
# 使用 fieldSelectors 精确选择
spec:
selector:
namespaces:
-default
labelSelectors:
app:web-server
environment:staging# 避免误操作生产环境
fieldSelectors:
-key:spec.nodeName
operator:In
values:
-node-01
-node-02
措施二:启用 Admission Webhook 审计
# chaos-mesh values.yaml
webhook:
certManager:
enabled:true
failurePolicy:Fail# 验证失败则拒绝实验
timeoutSeconds:5
FailureInjectionNamespaces:
-default
-staging
措施三:配置自动恢复机制
spec:
duration:"5m" # 强制 5 分钟后自动停止
scheduler:
cron:"@every 1h"
concurrencyPolicy:Forbid # 禁止并发执行
startingDeadlineSeconds:300
策略一:定时自动化演练
# 每周五凌晨 2 点执行
spec:
scheduler:
cron:"0 2 * * 5"
策略二:集成 CI/CD 流水线
# GitLab CI 示例
chaos-test:
stage:test
script:
-kubectlapply-fchaos/network-delay.yaml
-sleep300
-kubectldelete-fchaos/network-delay.yaml
-./scripts/verify-metrics.sh
only:
-schedules
策略三:游戏日(Game Day)演练
⚠️ 警告:生产环境必须配置 protectedNamespaces、启用 Webhook 验证、限制 RBAC 权限,避免误操作核心组件。
duration 未配置时实验永久生效,必须手动删除 CRD 资源才能恢复mode: all 可能影响所有符合条件的 Pod,务必通过 labelSelectors 精确限定范围错误现象 | 原因分析 | 解决方案 |
|---|---|---|
Experiment stuck in "Running" | duration 过期但未自动清理 | 手动删除 CRD 资源或重启 Controller Manager |
No pods selected | Label Selector 不匹配 | 使用 kubectl get pods -l <selector> 验证 |
Permission denied | ServiceAccount 权限不足 | 检查 RBAC 配置,授予 chaos-mesh.org API 权限 |
IOChaos not working | 容器运行时配置错误 | 验证 chaosDaemon.socketPath 与节点实际路径匹配 |
Workflow execution failed | 某个步骤超时或失败 | 查看 Workflow 事件,调整 deadline 参数 |
chaos-mesh/chaos-mesh:v2.6.0-arm64PTP_SYS_OFFSET,部分云环境虚拟机不支持# 查看 Controller Manager 日志
kubectl logs -n chaos-mesh deployment/chaos-controller-manager --tail=100 -f
# 查看 Chaos Daemon 日志(节点级组件)
kubectl logs -n chaos-mesh daemonset/chaos-daemon -c chaos-daemon --tail=100
# 查看 Dashboard 日志
kubectl logs -n chaos-mesh deployment/chaos-dashboard --tail=100 -f
# 查看实验执行记录
kubectl get events --field-selector involvedObject.kind=PodChaos -n default
# 查看 Workflow 步骤日志
kubectl logs -n default workflow-complex-chaos-workflow-<pod-name>
问题一:实验创建成功但未生效
# 诊断命令
kubectl describe podchaos web-server-pod-kill
# 检查 Controller Manager 日志
kubectl logs -n chaos-mesh deployment/chaos-controller-manager | grep "web-server-pod-kill"
# 验证 Label Selector
kubectl get pods -l app=web-server --show-labels
解决方案:
protectedNamespaces 列表问题二:IOChaos 返回 Permission Denied
# 诊断命令
kubectl logs -n chaos-mesh daemonset/chaos-daemon | grep "io chaos"
# 检查 Chaos Daemon 权限
kubectl exec -it -n chaos-mesh chaos-daemon-<pod> -- ls -la /run/containerd/containerd.sock
解决方案:
chaosDaemon.socketPath 配置正确问题三:Workflow 卡在某个步骤
症状:Workflow 状态显示 Running,但某个 Template 长时间未完成
排查:
# 查看 Workflow 详情
kubectl describe workflow complex-chaos-workflow
# 查看当前执行的步骤
kubectl get podchaos,networkchaos,iochaos -n default
解决:调整步骤的 deadline 参数,或手动删除卡住的 Chaos 资源
# 开启 Controller Manager 调试日志
kubectl set env -n chaos-mesh deployment/chaos-controller-manager LOG_LEVEL=debug
# 开启 Chaos Daemon 详细日志
kubectl set env -n chaos-mesh daemonset/chaos-daemon LOG_LEVEL=debug
# 查看 Chaos Daemon 执行的具体命令
kubectl exec -it -n chaos-mesh chaos-daemon-<pod> -- cat /var/log/chaos-daemon.log
# 实验执行统计
kubectl get podchaos,networkchaos,iochaos,stresschaos --all-namespaces
# Controller Manager 资源使用
kubectl top pod -n chaos-mesh -l app.kubernetes.io/component=controller-manager
# Chaos Daemon 资源使用(每个节点)
kubectl top pod -n chaos-mesh -l app.kubernetes.io/component=chaos-daemon
# 查看实验执行时长
kubectl get workflow complex-chaos-workflow -o jsonpath='{.status.startTime}'
kubectl get workflow complex-chaos-workflow -o jsonpath='{.status.endTime}'
指标名称 | 正常范围 | 告警阈值 | 说明 |
|---|---|---|---|
chaos_mesh_experiments | - | 异常率 >10% | 实验执行成功率统计 |
chaos_daemon_cpu_usage | <500m | >1000m | Daemon 消耗 CPU,高值可能影响节点 |
chaos_controller_reconcile_duration | <1s | >5s | Controller 协调循环耗时 |
workflow_step_duration | 按步骤定义 | 超时 | Workflow 每个步骤执行时长 |
target_pod_restart_count | - | 增长异常 | 目标 Pod 重启次数,区分正常重启和异常 |
# prometheus-rule.yaml
apiVersion:monitoring.coreos.com/v1
kind:PrometheusRule
metadata:
name:chaos-mesh-alerts
namespace:chaos-mesh
spec:
groups:
-name:chaos-mesh
interval:30s
rules:
-alert:ChaosExperimentFailed
expr:|
chaos_mesh_experiments{phase="Failed"} > 0
for:1m
labels:
severity:warning
annotations:
summary:"混沌实验执行失败"
description:"实验 {{ $labels.name }} 执行失败"
-alert:ChaosDaemonHighCPU
expr:|
sum(rate(container_cpu_usage_seconds_total{pod=~"chaos-daemon.*"}[5m])) by (pod) > 1
for:5m
labels:
severity:warning
annotations:
summary:"Chaos Daemon CPU 使用率过高"
description:"节点 {{ $labels.pod }} 的 Chaos Daemon CPU 使用超过 1 核"
-alert:WorkflowStepTimeout
expr:|
time() - chaos_mesh_workflow_step_start_time > chaos_mesh_workflow_step_deadline
for:1m
labels:
severity:critical
annotations:
summary:"Workflow 步骤执行超时"
description:"Workflow {{ $labels.workflow }} 步骤 {{ $labels.step }} 超时"
#!/bin/bash
# chaos-backup.sh
# 功能:备份所有混沌实验定义
BACKUP_DIR="/backup/chaos-mesh/$(date +%Y%m%d)"
mkdir -p "${BACKUP_DIR}"
# 备份所有 Chaos 资源
for kind in podchaos networkchaos iochaos stresschaos timechaos dnschaos kernelchaos; do
kubectl get ${kind} --all-namespaces -o yaml > "${BACKUP_DIR}/${kind}.yaml"
done
# 备份 Workflow
kubectl get workflow --all-namespaces -o yaml > "${BACKUP_DIR}/workflows.yaml"
# 备份 Schedule(定时任务)
kubectl get schedule --all-namespaces -o yaml > "${BACKUP_DIR}/schedules.yaml"
# 备份配置
kubectl get cm -n chaos-mesh chaos-mesh -o yaml > "${BACKUP_DIR}/config.yaml"
# 压缩备份
tar -czf "${BACKUP_DIR}.tar.gz""${BACKUP_DIR}"
echo"Backup completed: ${BACKUP_DIR}.tar.gz"
# 删除所有 Chaos 资源
kubectl delete podchaos --all --all-namespaces
kubectl delete networkchaos --all --all-namespaces
kubectl delete iochaos --all --all-namespaces
kubectl delete stresschaos --all --all-namespaces
kubectl delete workflow --all --all-namespaces
# 解压备份
tar -xzf /backup/chaos-mesh/20240315.tar.gz -C /tmp
# 恢复资源(不会立即执行,需手动触发)
kubectl apply -f /tmp/20240315/
# 检查资源状态
kubectl get podchaos,networkchaos,workflow --all-namespaces
# 测试单个实验
kubectl apply -f /tmp/20240315/podchaos.yaml
kubectl describe podchaos <name>
# 检查是否有卡住的实验
kubectl get events --all-namespaces | grep chaos
# 重启 Controller Manager
kubectl rollout restart deployment/chaos-controller-manager -n chaos-mesh
# 安装和管理
helm install chaos-mesh chaos-mesh/chaos-mesh -n chaos-mesh --version 2.6.0
helm upgrade chaos-mesh chaos-mesh/chaos-mesh -n chaos-mesh
helm uninstall chaos-mesh -n chaos-mesh
# 实验管理
kubectl apply -f experiment.yaml # 创建实验
kubectl get podchaos,networkchaos --all-namespaces # 查看所有实验
kubectl describe podchaos <name> # 查看实验详情
kubectl delete podchaos <name> # 停止实验
kubectl get events --field-selector involvedObject.kind=PodChaos # 查看实验事件
# Workflow 管理
kubectl apply -f workflow.yaml # 创建 Workflow
kubectl get workflow # 查看 Workflow 状态
kubectl describe workflow <name> # 查看执行详情
kubectl delete workflow <name> # 删除 Workflow
# 日志和调试
kubectl logs -n chaos-mesh deployment/chaos-controller-manager -f
kubectl logs -n chaos-mesh daemonset/chaos-daemon -c chaos-daemon -f
kubectl exec -it -n chaos-mesh chaos-daemon-<pod> -- sh
PodChaos Actions:
pod-kill:杀死 Pod(SIGKILL)pod-failure:Pod 不可用(修改 Pod 状态)container-kill:杀死容器(SIGKILL)NetworkChaos Actions:
delay:网络延迟,参数:latency、jitter、correlationloss:丢包,参数:loss、correlationduplicate:重复包,参数:duplicate、correlationcorrupt:包损坏,参数:corrupt、correlationpartition:网络分区,参数:direction、targetbandwidth:带宽限制,参数:rate、limit、bufferIOChaos Actions:
delay:IO 延迟,参数:delay、percenterrno:返回错误码,参数:errno、percentattrOverride:修改文件属性,参数:attrStressChaos Stressors:
cpu:CPU 压力,参数:workers、loadmemory:内存压力,参数:workers、size术语 | 英文 | 解释 |
|---|---|---|
混沌工程 | Chaos Engineering | 通过主动注入故障验证系统韧性的方法论 |
故障注入 | Fault Injection | 向系统引入异常行为(网络延迟、Pod 崩溃等) |
韧性 | Resilience | 系统在故障情况下保持服务可用的能力 |
稳态 | Steady State | 系统正常运行时的基线指标状态 |
爆炸半径 | Blast Radius | 故障影响范围,混沌实验应控制爆炸半径 |
游戏日 | Game Day | 团队集中演练故障场景的活动 |
自动回滚 | Auto Rollback | 实验结束后自动恢复系统到正常状态 |
Workflow | 工作流 | 编排多个混沌实验的执行顺序和依赖关系 |
好了,今天的分享就到这吧,觉得有用的话,别忘了点赞、在看、转发给身边需要的程序员朋友吧~