【云顾问-混沌】Pod/Node CPU 故障注入

1. 介绍

在复杂的分布式系统中,为了验证服务质量、监控告警、流量调度、弹性伸缩等能力,我们需要模拟不同的故障场景。本文将介绍如何使用混沌工具对 Pod/Node 进行 CPU 负载故障注入,以达到指定的 CPU 负载百分比。

2. 参数

在进行 CPU 负载故障注入时,我们可以通过以下参数来控制:

  • nice:指定 CPU 负载进程的 nice 值(静态优先级),取值范围为[-20, 19]。仅当 cpuPercent 值为 100% 时生效。此参数为可选,>= v1.3.7 版本支持。
  • duration:自动恢复时长,到达时间后会自动销毁故障。单位是秒。通用参数,默认值为 60。
  • nice:指定 CPU 负载进程的 nice 值(静态优先级),取值范围为[-20, 19]。仅当 cpuPercent 值为 100% 时生效。此参数为可选。
  • duration:自动恢复时长,到达时间后会自动销毁故障。单位是秒。通用参数,默认值为 60。

3. 案例

3.1 使所有 CPU 核负载达到 80%
代码语言:bash
复制
./chaos-executor attack --target cpu --action burn --flags "percent=80;duration=100"
3.2 使指定的 CPU 核(如 1,3)负载达到 100%
代码语言:bash
复制
./chaos-executor attack --target cpu --action burn --flags "core-list=1,3;duration=100"

4. 实现原理

混沌工具在进行 CPU 负载故障注入时,主要通过以下方式实现:

  1. 启动 chaos_burncpu 进程,空跑 for 循环来消耗 CPU 时间片。
  2. 配置参数 core-list 时,对每个核绑定一个进程消耗 CPU 时间片。
  3. nice 参数(通过 man nice 了解 nice 意义)仅在 percent 参数设置为 100% 时生效,用于修改 chaos_burncpu 的调度优先级。当设置为负数时,表示会提升 chaos_burncpu 的调度优先级,从而实现模拟 CPU 抢占功能。

5. 验证故障生效

我们可以通过以下命令查看 CPU 负载情况,以验证故障是否生效:

  • 物理机:通过 top 命令查看 CPU 负载情况。CPU 使用率 = 100 - CPU 空闲比例(idle)。
  • 容器

docker stats:查看容器 CPU 使用情况。

crictl stats:查看容器 CPU 使用情况。

kubectl top:查看容器 CPU 使用情况。

通过以上方法,我们可以轻松地对 Pod/Node 进行 CPU 负载故障注入,从而验证系统在不同负载下的表现,以及监控告警、流量调度、弹性伸缩等能力。

使用腾讯云混沌演练平台实施 CPU 高负载。故障实现原理是预先在混沌演练平台探针管理处安装腾讯自研 Agent 探针。