模拟网络故障

    NetworkChaos 用于模拟集群中网络故障的场景,目前支持以下几种类型:

    1. Partition:网络断开、分区。
    2. Net Emulation:用于模拟网络状态不良的情况,比如高延迟、高丢包率、包乱序等情况。
    3. Bandwidth:用于限制节点之间通信的带宽。
    1. 请在进行网络注入的过程中保证 Controller Manager 与 Chaos Daemon 之间的连接通畅,否则将无法恢复。
    2. 如果使用 Net Emulation 功能,请确保 Linux 内核拥有 NET_SCH_NETEM 模块。对于 CentOS 可以通过 kernel-modules-extra 包安装,大部分其他发行版已默认安装相应模块。
    1. 单击实验页面中的“新的实验”按钮创建实验:

    2. 在“选择目标”处选择 “网络攻击”,然后选择具体行为,例如 ,最后填写具体配置:

      NetworkChaos 实验

      具体配置的填写方式,参考字段说明

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

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

      该配置将令选中 Pod 内的网络连接产生 10 毫秒的延迟。除了注入延迟以外,Chaos Mesh 还支持注入丢包、乱序等功能,详见

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

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

      该配置将阻止从 app1app2 建立的连接。direction 字段的值可以选择 tofromboth,详见字段说明

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

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

      该配置将限制 app1 的带宽为 1 mbps。

    针对不同的 action,还有不同的配置项可以填写。

    Net Emulation

    参数类型说明是否必填
    delayDelay描述网络的延迟状态
    loss描述网络的丢包状态
    duplicateDuplicate描述网络重复包的状态
    corrupt描述网络包出现错误的状态
    Delay

    的计算模型如下:

    1. 首先生成一个分布与上一个值有关的随机数:

      其中 rnd 为这一随机数。corr 为填写的 correlation

    2. 使用这一随机数决定当前包的延迟:

        其中 sigmajittermulatency

      Reorder
      参数类型说明默认值是否必填示例
      reorderstring表示发生重新排序的概率00.5
      correlationstring表示发生重新排序的概率与前一次的相关性00.5
      gapint表示乱序将包推后的距离05
      Loss
      Duplicate
      参数类型说明默认值是否必填示例
      duplicatestring表示包重复发生的概率00.5
      correlationstring表示包重复发生的概率与前一次是否发生的相关性00.5
      Corrupt

      对于 reorderlossduplicatecorrupt 这些偶发事件,correlation 则更为复杂。具体模型描述参考 。

      Bandwidth

      参数类型说明默认值是否必填示例
      ratestring表示带宽限制的速率1mbps
      limituint32表示在队列中等待的字节数1
      bufferuint32能够瞬间发送的最大字节数1
      peakrateuint64bucket 的最大消耗率1
      minburstuint32peakrate bucket 的大小1

      其中 和 minburst 通常情况下不需要设置。如果需要进一步了解这些字段的含义,可以参考