chaos-engineering

混沌实验设计、爆炸半径与止损

补充说明

混沌工程不是“随便杀个 Pod 看看”,而是先用稳态假设定义正常,再注入故障验证系统是否维持正常。每个实验必须有爆炸半径、持续时间和中止条件;没有中止条件的实验不能上生产。

从测试环境开始,再到生产的小比例流量。生产实验必须提前通知、冻结无关变更,并指定 IC。

常用示例

实验设计表:

字段 示例
稳态假设 单节点故障时 P99 < 500ms,错误率 < 0.1%
注入方法 每 2 分钟杀掉一个 payment Pod
爆炸半径 namespace=checkout,label app=payment,最多 1 个 Pod
持续时间 10 分钟
中止条件 错误率 > 1% 或 P99 > 1s 持续 2 分钟
恢复方式 停止实验,等待 Deployment 自动恢复

Chaos Mesh PodChaos:

apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
  name: payment-pod-kill
  namespace: chaos-testing
spec:
  action: pod-kill
  mode: one
  selector:
    namespaces: [checkout]
    labelSelectors:
      app: payment
  scheduler:
    cron: "@every 2m"

网络延迟实验:

apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
  name: payment-delay
  namespace: chaos-testing
spec:
  action: delay
  mode: one
  selector:
    namespaces: [checkout]
    labelSelectors:
      app: payment
  delay:
    latency: "200ms"
    jitter: "50ms"
  duration: "5m"

中止阈值:

指标 阈值 动作
错误率 > 1% 持续 2 分钟 立即停止实验
P99 延迟 > 1s 持续 2 分钟 立即停止实验
数据库连接 > 80% 立即停止实验
人工叫停 任何人 立即停止

易错点与排错

读完自测

合上页面,先回答,再展开对照。

  1. 混沌实验开始前必须先定义什么?
  2. 生产实验的爆炸半径应该从多大开始?
  3. 为什么实验结束后还要验证自动恢复?
答案
  1. 稳态假设(可量化的正常指标)和中止条件;没有这两项就不算实验。
  2. 从 1 个 Pod 或 1% 流量开始,确认中止机制有效后再逐步扩大。
  3. 混沌工程验证的是系统在故障下能否自愈;如果恢复依赖人工且未验证,实验结论不成立。

相关条目