模拟文件 I/O 故障

    本文档主要介绍如何在 Chaos Mesh 中创建 IOChaos 混沌实验。

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

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

    详细的功能介绍参见使用 YAML 文件创建实验

    注意事项

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

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

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

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

      设置实验类型

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

      设置目标和运行时间

    使用 YAML 文件创建实验

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

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

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

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

        依据此配置示例,Chaos Mesh 将向 /var/run/etcd 目录注入文件错误故障,使该目录下的所有文件系统操作有 50% 的概率发生错误,并返回错误码 5 (Input/output error)。

      2. 使用 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。

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

      通用字段

      与 action 相关的字段

      这些字段仅在 action 为对应值时才有意义:

      • latency

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

        常见的错误号见

      • attrOverride

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

        AttrOverrideSpec 定义如下

        TimeSpec 定义如下

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

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

      • mistake

        MistakeSpec 定义如下

        参数类型说明默认值是否必填示例
        fillingstring错误数据的填充内容,只能为 zero(填充 0)或 random(填充随机字节)
        maxOccurrencesint错误在每一次操作中最多出现次数1
        maxLengthint每次错误的最大长度(单位为字节)1
      警告不推荐在除了 READ 和 WRITE 之外的文件系统调用上使用 mistake 错误。这可能会导致预期之外的结果,包括但不限于文件系统损坏、程序崩溃等。 :::

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

      附录 A:methods 类型

      • lookup
      • forget
      • getattr
      • setattr
      • readlink
      • mknod
      • mkdir
      • unlink
      • rmdir
      • symlink
      • rename
      • link
      • open
      • read
      • flush
      • release
      • fsync
      • opendir
      • readdir
      • releasedir
      • fsyncdir
      • statfs
      • setxattr
      • getxattr
      • listxattr
      • removexattr
      • access
      • create
      • getlk
      • setlk
      • bmap

      详见 fuser::Filesystem

      • 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