Docker容器模拟网络延迟和网络丢包
Docker容器模拟网络延迟和网络丢包,Docker增大网络延迟和增加网络丢包,Docker容器网络仿真测试。
一、安装Pumba
Pumba能够完成包括对Docker容器的 kill,stop, remove,pause。当然,Pumba 也能够完成网络模拟,模拟包括一系列的网络问题(延迟,丢包,使用不同的丢包模型,带宽限制等等)。针对网络模拟,Pumba使用的是Linux内核tc netem实现的。 如果目标container不支持tc的话,Pumba将会使用sidekick 附着到目标容器进行控制。
1 2 3 4 |
# 请自己更换最新版本号 wget https://github.com/alexei-led/pumba/releases/download/0.9.0/pumba_linux_amd64 mv pumba_linux_amd64 /usr/local/bin/pumba chmod +x /usr/local/bin/pumba |
二、使用Pumba
你可以传一个容器列表到Pumba中,也可以写一个正则表达式来选择匹配的容器。如果你没有指定容器,那么Pumba将会对所有运行的容器进行干预。如果你使用了–random选项,那么Pumba将会在提供的容器列表中选择一些随机容器进行干扰。当然也能自定义目标容器延迟大小、丢包、干预总时间等,非常适合做日常开发中的网络仿真。
三、利用Pumba为Docker容器增加网络延迟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 模拟一、运行 "ping" 容器 docker run -it --rm --name ping alpine ping 8.8.8.8 # 模拟一、为 "ping" 容器增加网络延迟3000ms,持续20秒 pumba netem --duration 20s --tc-image gaiadocker/iproute2 delay --time 3000 jitter 50 --distribution normal ping ----------------------------- # 模拟二、为kafka-docker_kafka_3容器增加网络延迟20ms,持续7200秒 pumba netem --duration 7200s --tc-image gaiadocker/iproute2 delay --time 20 jitter 50 --distribution normal kafka-docker_kafka_3 # 模拟二、主动ping容器kafka-docker_kafka_3的IP地址,查看网络延迟 64 bytes from 172.19.0.5: icmp_seq=1074 ttl=64 time=37.4 ms 64 bytes from 172.19.0.5: icmp_seq=1075 ttl=64 time=12.7 ms 64 bytes from 172.19.0.5: icmp_seq=1076 ttl=64 time=23.9 ms 64 bytes from 172.19.0.5: icmp_seq=1077 ttl=64 time=35.9 ms 64 bytes from 172.19.0.5: icmp_seq=1078 ttl=64 time=26.7 ms 64 bytes from 172.19.0.5: icmp_seq=1079 ttl=64 time=23.2 ms 64 bytes from 172.19.0.5: icmp_seq=1080 ttl=64 time=12.5 ms 64 bytes from 172.19.0.5: icmp_seq=1081 ttl=64 time=25.7 ms |
四、利用Pumba为Docker容器增加网络丢包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 首先创建一个名为bridge-lost的网络 docker network create -d bridge bridge-lost # 开启iperf server容器 docker run -it --name server --network bridge-lost --rm alpine sh -c "apk add --no-cache iperf; sh" # 查看容器IP地址 ip a # 运行iperf服务器 iperf -s -u -i 1 # 开启iperf client容器 docker run -it --name client --network bridge-lost --rm alpine sh -c "apk add --no-cache iperf; sh" # 发送UDP数据报文 iperf -c 172.20.0.2 -u -t 300 # 此时iperf server无显示丢包 # 往iperf client容器注入20% 的数据丢包,持续2分钟 pumba netem --duration 2m --tc-image gaiadocker/iproute2 loss --percent 20 client # 这时在iperf server可以看到%20的数据丢包。 |
五、附录:利用Pumba干预容器
1 2 3 4 5 6 7 8 |
# 杀掉命名为client开头的容器,re2正则匹配。 pumba kill re2:^client # 停止容器 pumba stop client # 暂停容器 pumba pause client |
by:cpp.la, 于2022-05-27仿真测试