模拟网络故障
NetworkChaos 用于模拟集群中网络故障的场景,目前支持以下几种类型:
- Partition:网络断开、分区。
- Net Emulation:用于模拟网络状态不良的情况,比如高延迟、高丢包率、包乱序等情况。
- Bandwidth:用于限制节点之间通信的带宽。
- 请在进行网络注入的过程中保证 Controller Manager 与 Chaos Daemon 之间的连接通畅,否则将无法恢复。
- 如果使用 Net Emulation 功能,请确保 Linux 内核拥有 NET_SCH_NETEM 模块。对于 CentOS 可以通过 kernel-modules-extra 包安装,大部分其他发行版已默认安装相应模块。
单击实验页面中的“新的实验”按钮创建实验:
在“选择目标”处选择 “网络攻击”,然后选择具体行为,例如 ,最后填写具体配置:
具体配置的填写方式,参考字段说明。
填写实验信息,指定实验范围以及实验计划运行时间:
将实验配置写入到文件中
network-delay.yaml
,内容示例如下:该配置将令选中 Pod 内的网络连接产生 10 毫秒的延迟。除了注入延迟以外,Chaos Mesh 还支持注入丢包、乱序等功能,详见
使用
kubectl
创建实验,命令如下:kubectl apply -f ./network-delay.yaml
将实验配置写入到文件中
network-partition.yaml
,内容示例如下:该配置将阻止从
app1
向app2
建立的连接。direction
字段的值可以选择to
,from
及both
,详见字段说明。使用
kubectl
创建实验,命令如下:kubectl apply -f ./network-partition.yaml
将实验配置写入到文件中
network-bandwidth.yaml
,内容示例如下:该配置将限制
app1
的带宽为 1 mbps。-
针对不同的 action
,还有不同的配置项可以填写。
Net Emulation
参数 | 类型 | 说明 | 是否必填 |
---|---|---|---|
delay | Delay | 描述网络的延迟状态 | 否 |
loss | 描述网络的丢包状态 | 否 | |
duplicate | Duplicate | 描述网络重复包的状态 | 否 |
corrupt | 描述网络包出现错误的状态 | 否 |
Delay
的计算模型如下:
首先生成一个分布与上一个值有关的随机数:
其中
rnd
为这一随机数。corr
为填写的correlation
。使用这一随机数决定当前包的延迟:
其中
sigma
为jitter
,mu
为latency
。
Reorder
参数 | 类型 | 说明 | 默认值 | 是否必填 | 示例 |
---|---|---|---|---|---|
reorder | string | 表示发生重新排序的概率 | 0 | 否 | 0.5 |
correlation | string | 表示发生重新排序的概率与前一次的相关性 | 0 | 否 | 0.5 |
gap | int | 表示乱序将包推后的距离 | 0 | 否 | 5 |
Loss
Duplicate
参数 | 类型 | 说明 | 默认值 | 是否必填 | 示例 |
---|---|---|---|---|---|
duplicate | string | 表示包重复发生的概率 | 0 | 否 | 0.5 |
correlation | string | 表示包重复发生的概率与前一次是否发生的相关性 | 0 | 否 | 0.5 |
Corrupt
对于 reorder
,loss
,duplicate
,corrupt
这些偶发事件,correlation
则更为复杂。具体模型描述参考 。
Bandwidth
参数 | 类型 | 说明 | 默认值 | 是否必填 | 示例 |
---|---|---|---|---|---|
rate | string | 表示带宽限制的速率 | 是 | 1mbps | |
limit | uint32 | 表示在队列中等待的字节数 | 是 | 1 | |
buffer | uint32 | 能够瞬间发送的最大字节数 | 是 | 1 | |
peakrate | uint64 | bucket 的最大消耗率 | 否 | 1 | |
minburst | uint32 | peakrate bucket 的大小 | 否 | 1 |
其中 和 minburst
通常情况下不需要设置。如果需要进一步了解这些字段的含义,可以参考