模拟文件 I/O 故障

    IOChaos 是 Chaos Mesh 中的一种故障类型。通过创建 IOChaos 类型的混沌实验,你可以模拟文件系统发生故障的情景。目前,IOChaos 支持模拟以下故障类型:

    • latency:为文件系统调用加入延迟
    • fault:使文件系统调用返回错误
    • attrOverride:修改文件属性
    • mistake:使文件读到或写入错误的值

    详细的功能介绍参见。

    注意事项

    1. 创建 IOChaos 实验前,请确保目标 Pod 上没有运行 Chaos Mesh 的 Controller Manager。

    2. IOChaos 可能会损坏你的数据,在生产环境中请谨慎使用。

    1. 单击实验页面中的新的实验按钮创建实验。

    2. 选择目标处选择文件系统注入,并选择具体行为,如LATENCY

      设置实验类型

    3. 填写实验信息,指定实验范围以及实验计划运行时间。

      设置目标和运行时间

    4. 提交实验。

    使用 YAML 文件创建实验

    1. 将实验配置写入到文件中 ,内容示例如下:

      依据此配置示例,Chaos Mesh 将向 /var/run/etcd 目录注入延迟故障,使该目录下的所有文件系统操作(包括读,写,列出目录内容等)产生 100 毫秒延迟。

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

      1. kubectl apply -f ./io-latency.yaml
    1. 使用 kubectl 创建实验,命令如下:

      1. kubectl apply -f ./io-fault.yaml
    1. 将实验配置写入到文件中 io-attr.yaml,内容示例如下:

      依据此配置示例,Chaos Mesh 将向 目录注入 attrOverride 故障,使该目录下的所有文件系统操作将有 10% 的概率使目标文件的权限变为 72(即八进制下的 110),这将使得文件只能由拥有者与其所在的组执行,无权进行其他操作。

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

      1. kubectl apply -f ./io-attr.yaml
    1. 将实验配置写入到文件中 io-mistake.yaml,内容示例如下:

      依据此配置示例,Chaos Mesh 将向 /var/run/etcd 目录注入读写错误故障,使该目录下的读写操作将有 10% 的概率将发生错误。其中以字节为单位,最大长度为 10 的 1 处随机位置将被替换为 0。

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

      1. kubectl apply -f ./io-mistake.yaml

    通用字段

    与 action 相关的字段

    • latency

      参数类型说明默认值是否必填示例
      delaystring具体的延迟时长100 ms
    • fault

      常见的错误号见附录 B

    • attrOverride

      参数类型说明默认值是否必填示例
      attrAttrOverrideSpec具体的属性覆写规则见下

      AttrOverrideSpec 定义如下

      TimeSpec 定义如下

      参数类型说明默认值是否必填示例
      secint以秒为单位的时间戳
      nsecint以纳秒为单位的时间戳

      关于参数的具体含义,你可以参考 。

    • mistake

      MistakeSpec 定义如下

      参数类型说明默认值是否必填示例
      fillingstring错误数据的填充内容,只能为 zero(填充 0)或 random(填充随机字节)
      maxOccurrencesint错误在每一次操作中最多出现次数1
      maxLengthint每次错误的最大长度(单位为字节)1

    警告

    不推荐在除了 READ 和 WRITE 之外的文件系统调用上使用 mistake 错误。这可能会导致预期之外的结果,包括但不限于文件系统损坏、程序崩溃等。

    如果你不确定某个 Chaos 的效果,也可以使用 在本地测试相应功能。Chaos Mesh 同样使用 toda 实现 IOChaos。

    附录 A:methods 类型

    • lookup
    • forget
    • getattr
    • setattr
    • readlink
    • mknod
    • mkdir
    • unlink
    • rmdir
    • symlink
    • rename
    • link
    • open
    • read
    • write
    • release
    • fsync
    • opendir
    • readdir
    • releasedir
    • fsyncdir
    • statfs
    • setxattr
    • getxattr
    • listxattr
    • removexattr
    • access
    • create
    • getlk
    • setlk
    • bmap
    • 1: Operation not permitted
    • 2: No such file or directory
    • 5: I/O error
    • 6: No such device or address
    • 12: Out of memory
    • 16: Device or resource busy
    • 17: File exists
    • 20: Not a directory
    • 22: Invalid argument
    • 24: Too many open files
    • 28: No space left on device

    详见 Linux 源码