在物理机器上模拟故障
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
本文档介绍如何在 Chaos Mesh 中创建 PhysicalMachineChaos(物理机器混沌)实验,用于在物理机或虚拟机中模拟网络、磁盘、压力、JVM、时间等故障。
PhysicalMachineChaos 介绍
您可以使用 PhysicalMachineChaos 在物理机或虚拟机中模拟网络、磁盘、压力、JVM、时间等故障。在使用 Chaos Mesh 提供的 PhysicalMachineChaos 前,您需要在目标物理机或虚拟机上部署 Chaosd。Chaos Mesh 与 Chaosd 的版本对应关系如下:
| Chaos Mesh version | Chaosd version |
|---|---|
| v2.1.x | v1.1.x |
| v2.2.x | v1.2.x |
部署 Chaosd 服务端
使用 Chaos Mesh 创建 PhysicalMachineChaos 实验前,需在所有待注入故障的物理机或虚拟机上以服务模式部署 Chaosd。部署完成后,按以下方式启动 Chaosd 服务端:
-
部署 Chaosd、生成 TLS 证书并创建
PhysicalMachine:- Chaosd 部署方法请参考下载并部署 Chaosd
- 部署 Chaosd 后,在启动 Chaosd 服务端之前,您需要生成 TLS 证书并在 Kubernetes 集群中创建
PhysicalMachine。TLS 证书生成方法详见为 Chaosd 生成 TLS 证书
-
启动 Chaosd 服务端:
-
通过 Chaosctl 生成 TLS 证书后,运行以下命令以服务模式启动 Chaosd:
chaosd server --https-port 31768 --CA=/etc/chaosd/pki/ca.crt --cert=/etc/chaosd/pki/chaosd.crt --key=/etc/chaosd/pki/chaosd.key备注TLS 证书默认保存在 Chaosctl 的输出目录。若生成证书时手动指定了其他目录,请替换命令行中的路径为实际目录。
-
-
若未通过 Chaosctl 生成 TLS 证书,可运行以下命令以服务模式启动 Chaosd。但出于集群安全考虑,不推荐此方式:
chaosd server --port 31767
使用 Chaos Dashboard 创建实验
-
打开 Chaos Dashboard,点击页面中的 NEW EXPERIMENT 创建新实验:

创建新实验 -
在 Experiment Type 中选择 PHYSIC,并选择具体实验类型(如 NETWORK ATTACK)。选择具体行为后填写对应配置:

PhysicalMachineChaos 实验 -
填写实验信息,指定实验范围和计划持续时间:

PhysicalMachineChaos 实验信息 -
提交实验。
通过 YAML 文件创建实验
-
将实验配置写入 "physicalmachine.yaml" 文件,例如:
apiVersion: chaos-mesh.org/v1alpha1
kind: PhysicalMachineChaos
metadata:
name: physical-network-delay
namespace: chaos-mesh
spec:
action: network-delay
mode: one
selector:
namespaces:
- default
labelSelectors:
'arch': 'amd64'
network-delay:
device: ens33
ip-address: 140.82.112.3
latency: 1000ms
duration: '10m'上述配置会向指定物理机/虚拟机中的 Chaosd 服务发送 HTTP 请求,触发网络延迟实验。
-
使用
kubectl创建实验,命令如下:kubectl apply -f physicalmachine.yaml
配置说明
| Configuration item | Type | Description | Default value | Required | Example |
|---|---|---|---|---|---|
action | string | Defines the actions of physical machines faults, optional values are as follows: stress-cpu, stress-mem, disk-read-payload, disk-write-payload, disk-fill, network-corrupt, network-duplicate, network-loss, network-delay, network-partition, network-dns, process, jvm-exception, jvm-gc, jvm-latency, jvm-return, jvm-stress, jvm-rule-data, clock | None | Yes | stress-cpu |
address | string array | Selects the address of Chaosd service to inject faults, only one of address or selector could be specified | [] | Yes | ["192.168.0.10:31767"] |
selector | struct | Specifies the target PhysicalMachine. For details, refer to Define the experiment scope, only one of address or selector could be specified | None | No | |
mode | string | Specifies the mode of the experiment. The mode options include one (selecting a random PhysicalMachine), all (selecting all eligible PhysicalMachines), fixed (selecting a specified number of eligible PhysicalMachines), fixed-percent (selecting a specified percentage of PhysicalMachines from the eligible PhysicalMachines), and random-max-percent (selecting the maximum percentage of PhysicalMachines from the eligible PhysicalMachines). | None | Yes | one |
value | string | Provides a parameter for the mode configuration, depending on mode. For example, when mode is set to fixed-percent, value specifies the percentage of PhysicalMachines. | None | No | 1 |
duration | string | Specifies the duration of experiments | None | Yes | 30s |
每种故障动作都有其特定的配置。以下部分将介绍各种故障类型及其对应的配置方法。
CPU 压力
要模拟 CPU 压力场景,需要将 action 设置为 "stress-cpu"。相关配置请参考模拟 CPU 压力的参数。
内存压力
要模拟内存压力场景,需要将 action 设置为 "stress-mem"。相关配置请参考模拟内存压力的参数。
磁盘读取负载
要模拟磁盘读取负载场景,需要将 action 设置为 "disk-read-payload"。相关配置请参考模拟磁盘读取负载的参数。
磁盘写入负载
要模拟磁盘写入负载场景,需要将 action 设置为 "disk-write-payload"。相关配置请参考模拟磁盘写入负载的参数。
磁盘填充
要模拟磁盘填充场景,需要将 action 设置为 "disk-fill"。相关配置请参考模拟磁盘填充的参数。
网络数据损坏
要模拟网络数据损坏场景,需要将 action 设置为 "network-corrupt"。相关配置请参考模拟网络数据损坏的参数。
网络延迟
要模拟网络延迟场景,需要将 action 设置为 "network-delay"。相关配置请参考模拟网络延迟的参数。
网络数据包重复
要模拟网络数据包重复场景,需要将 action 设置为 "network-duplicate"。相关配置请参考模拟网络数据包重复的参数。
网络丢包
要模拟网络丢包场景,需要将 action 设置为 "network-loss"。相关配置请参考模拟网络丢包的参数。
网络分区
要模拟网络分区场景,需要将 action 设置为 "network-partition"。相关配置请参考模拟网络分区的参数。
DNS 故障
要模拟 DNS 故障场景,需要将 action 设置为 "network-dns"。相关配置请参考模拟 DNS 故障的参数。
进程故障
要模拟进程故障场景,需要将 action 设置为 "process"。相关配置请参考模拟进程故障的参数。
使 JVM 应用抛出自定义异常
要模拟 JVM 应用抛出自定义异常的场景,需要将 action 设置为 "jvm-exception"。相关配置请参考抛出自定义异常的参数。
增加 JVM 应用的方法延迟
要模拟增加 JVM 应用方法延迟的场景,需要将 action 设置为 "jvm-latency"。相关配置请参考增加方法延迟的参数。
修改 JVM 应用的方法返回值
要模拟修改 JVM 应用方法返回值的场景,需要将 action 设置为 "jvm-return"。相关配置请参考修改方法返回值的参数。
触发 JVM 应用的垃圾回收
要模拟触发 JVM 应用垃圾回收的场景,需要将 action 设置为 "jvm-gc"。相关配置请参考触发垃圾回收的参数。
使用 Byteman 配置文件触发 JVM 应用故障
要模拟 JVM 应用通过 Byteman 配置文件触发故障的场景,需将 action 设置为 "jvm-rule-data"。相关配置参数请参阅「通过设置 Byteman 配置文件触发故障的参数」章节。
时间偏移
要模拟时间偏移场景,需将 action 设置为 "clock"。相关配置参数请参阅「模拟时间偏移的参数」章节。