跳至主内容
版本:下一版本

在物理机器上模拟故障

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

本文档介绍如何在 Chaos Mesh 中创建 PhysicalMachineChaos(物理机器混沌)实验,用于在物理机或虚拟机中模拟网络、磁盘、压力、JVM、时间等故障。

PhysicalMachineChaos 介绍

您可以使用 PhysicalMachineChaos 在物理机或虚拟机中模拟网络、磁盘、压力、JVM、时间等故障。在使用 Chaos Mesh 提供的 PhysicalMachineChaos 前,您需要在目标物理机或虚拟机上部署 Chaosd。Chaos Mesh 与 Chaosd 的版本对应关系如下:

Chaos Mesh versionChaosd version
v2.1.xv1.1.x
v2.2.xv1.2.x

部署 Chaosd 服务端

使用 Chaos Mesh 创建 PhysicalMachineChaos 实验前,需在所有待注入故障的物理机或虚拟机上以服务模式部署 Chaosd。部署完成后,按以下方式启动 Chaosd 服务端:

  1. 部署 Chaosd、生成 TLS 证书并创建 PhysicalMachine

  2. 启动 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 创建实验

  1. 打开 Chaos Dashboard,点击页面中的 NEW EXPERIMENT 创建新实验:

    创建新实验
    创建新实验

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

    PhysicalMachineChaos 实验
    PhysicalMachineChaos 实验

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

    PhysicalMachineChaos 实验信息
    PhysicalMachineChaos 实验信息

  4. 提交实验。

通过 YAML 文件创建实验

  1. 将实验配置写入 "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 请求,触发网络延迟实验。

  2. 使用 kubectl 创建实验,命令如下:

    kubectl apply -f physicalmachine.yaml

配置说明

Configuration itemTypeDescriptionDefault valueRequiredExample
actionstringDefines 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, clockNoneYesstress-cpu
addressstring arraySelects the address of Chaosd service to inject faults, only one of address or selector could be specified[]Yes["192.168.0.10:31767"]
selectorstructSpecifies the target PhysicalMachine. For details, refer to Define the experiment scope, only one of address or selector could be specifiedNoneNo
modestringSpecifies 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).NoneYesone
valuestringProvides a parameter for the mode configuration, depending on mode. For example, when mode is set to fixed-percent, value specifies the percentage of PhysicalMachines.NoneNo1
durationstringSpecifies the duration of experimentsNoneYes30s

每种故障动作都有其特定的配置。以下部分将介绍各种故障类型及其对应的配置方法。

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"。相关配置参数请参阅「模拟时间偏移的参数」章节。