模拟网络故障
本文档介绍如何在 Chaos Mesh 中利用 NetworkChaos 模拟网络故障。
NetworkChaos 介绍
NetworkChaos 用于模拟集群中网络故障的场景,目前支持以下几种类型:
- Partition:网络断开、分区。
- Net Emulation:用于模拟网络状态不良的情况,比如高延迟、高丢包率、包乱序等情况。
- Bandwidth:用于限制节点之间通信的带宽。
注意事项
- 请在进行网络注入的过程中保证 Controller Manager 与 Chaos Daemon 之间的连接通畅,否则将无法恢复。
- 如果使用 Net Emulation 功能,请确保 Linux 内核拥有 NET_SCH_NETEM 模块。对于 CentOS 可以通过 kernel-modules-extra 包安装,大部分其他发行版已默认安装相应模块。
使用 Dashboard 方式创建实验
-
单击实验页面中的新的实验按钮创建实验:
-
在“选择目标”处选择 “网络攻击”,然后选择具体行为,例如
LOSS
,最后填写具体配置:具体配置的填写方式,参考字段说明。
-
填写实验信息,指定实验范围以及实验计划运行时间:
-
提交实验。
使用 YAML 方式创建实验
Net Emulation 示例
-
将实验配置写入到文件中
network-delay.yaml
,内容示例如下:apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: delay
spec:
action: delay
mode: one
selector:
namespaces:
- default
labelSelectors:
'app': 'web-show'
delay:
latency: '10ms'
correlation: '100'
jitter: '0ms'该配置将令选中 Pod 内的网络连接产生 10 毫秒的延迟。除了注入延迟以外,Chaos Mesh 还支持注入丢包、乱序等功能,详见字段说明
-
使用
kubectl
创建实验,命令如下:kubectl apply -f ./network-delay.yaml
Partition 示例
-
将实验配置写入到文件中
network-partition.yaml
,内容示例如下:apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: partition
spec:
action: partition
mode: all
selector:
namespaces:
- default
labelSelectors:
'app': 'app1'
direction: to
target:
mode: all
selector:
namespaces:
- default
labelSelectors:
'app': 'app2'该配置将阻止从
app1
向app2
建立的连接。direction
字段的值可以选择to
,from
及both
,详见字段说明。 -
使用
kubectl
创建实验,命令如下:kubectl apply -f ./network-partition.yaml
Bandwidth 示例
-
将实验配置写入到文件中
network-bandwidth.yaml
,内容示例如下:apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: bandwidth
spec:
action: bandwidth
mode: all
selector:
namespaces:
- default
labelSelectors:
'app': 'app1'
bandwidth:
rate: '1mbps'
limit: 20971520
buffer: 10000该配置将限制
app1
的带宽为 1 mbps。 -
使用
kubectl
创建实验,命令如下:kubectl apply -f ./network-bandwidth.yaml