[转帖]【混沌工程】 docker环境下模拟网络延迟和丢包

混沌,工程,docker,环境,模拟,网络,延迟 · 浏览次数 : 0

小编点评

**Pumba** 是一个用于测试网络服务稳定性的工具。它可以用于模拟网络问题,包括延迟、丢包、带宽限制等。 **主要功能:** * 对 Docker 容器进行干预 * 网络模拟,模拟网络问题 * 随机干掉某些测试容器 * 使用 tc netem 实现网络模拟 * 支持多种网络模式 **安装:** 使用以下命令安装 Pumba: ``` curl -L https://github.com/alexei-led/pumba/releases/download/0.5.2/pumba_linux_amd64mv pumba_linux_amd64 /usr/local/bin/pumbachmod +x /usr/local/bin/pumba ``` **使用:** 1. 创建一个容器列表。 2. 使用正则表达式选择匹配的容器。 3. 指定运行时间参数。 4. 使用 -random选项选择随机容器。 5. 使用 -interval 参数指定持续时间。 **示例:** ``` docker run -d --rm --name test1 alpine tail -f /dev/null docker run -d --rm --name test2 alpine tail -f /dev/null docker run -d --rm --name skipme alpine tail -f /dev/null docker run -d --rm --name ping alpine ping 8.8.8.8 docker run -it --rm --name ping alpine ping 8.8.8.8 docker run -d --rm --name skipme alpine tail -f /dev/null docker run -d --rm --name server alpine sh -c "apk add --no-cache iperf; sh" docker run -it --name client --network bridge --rm alpine sh -c "apk add --no-cache iperf; sh" docker run -d --rm --name client --network bridge --rm alpine sh -c "apk add --no-cache iperf; sh" docker run -d --rm --name weaviate-loss --net bridge --rm --volume /tmp/weaviate-loss:/tmp/weaviate-loss alpine iperf -c 172.17.0.2 -u -t 300 docker run -it --name client --network bridge --rm alpine sh -c "apk add --no-cache iperf; sh" ```

正文

https://cloud.tencent.com/developer/article/1616202?areaSource=&traceId=

 

原文地址:https://www.chenquan.me/archives/315

混沌工程最早是Netflix引入的,用来验证服务稳定性的工程。地址:https://github.com/Netflix/chaosmonkey

国内的阿里云也开源了一个chaos工具,见这里:https://github.com/chaosblade-io/chaosblade

我们这里介绍的一更mini的工具pubma, 下面我就直接贴原作者的博客内容了

Pubma

地址https://github.com/alexei-led/pumba

Pumba 能做什么?

简单地说,Pubma 能够完成包括对Docker容器的 killstop, removepause

当然, Pubma 也能够完成网络模拟,模拟包括一系列的网络问题(延迟,丢包,使用不同的丢包模型,带宽限制等等)。

针对网络模拟,Pumba使用的是Linux内核tc netem实现的。 如果目标container不支持tc的话,Pumba将会使用sidekick 附着到目标容器进行控制。

怎么使用 Pumba

通常可以传一个容器列表到Pumba中,可以简单地写一个正则表达式来选择匹配的容器。如果你没有指定容器,那么Pumba将会对所有运行的容器进行干预。

如果你使用了--random选项,那么Pumba将会在提供的容器列表中选择一些随机容器进行干扰。

你也可以通过传入一些重复参数,以及持续时间参数来更加精细地控制你需要产生的chaos 混沌。

如何安装 Pumba(注意这个文章里面的pumba版本可能比较低,实验请用最新版)

curl -L https://github.com/alexei-led/pumba/releases/download/0.5.2/pumba_linux_amd64
mv pumba_linux_amd64 /usr/local/bin/pumba
chmod +x /usr/local/bin/pumba

通过正则随机干掉某些test开头的容器

# 在第一个terminal中运行7个测试容器,并什么都不做
for i in {0..7}; do docker run -d --rm --name test$i alpine tail -f /dev/null; done

# 然后运行一个 名叫 `skipme` 的容器
docker run -d --rm --name skipme alpine tail -f /dev/null

# 在另一个 terminal 中查看当前运行的docker 容器
watch docker ps -a

# 回到第一个terminal中,然后每隔10s kill一个'test'开头的容器,并且忽略`skipme`容器
pumba --random --interval 10s kill re2:^test
# 你可以随时按下 Ctrl-C 来停止 Pumba

为ping增加3000ms(正负50ms)的延迟,持续20秒,并使用normal分配模型

# 运行 "ping" 容器在terminal 1中
docker run -it --rm --name ping alpine ping 8.8.8.8

# 在termainal2中, 运行 pumba netem delay 命令, 分配到 "ping" 容器; 使用一个 "tc" 辅助容器
pumba netem --duration 20s --tc-image gaiadocker/iproute2 delay --time 3000 jitter 50 --distribution normal ping

# pumba 将会在 20s 后退出, 或者用 Ctrl-C 退出

模拟丢包情况,UDP为例

在第一个terminal中,我们运行一个 server Docker 容器,然后用ipref来监控这个dokcer,这个server容器会启动一个UDP服务器

在第二个terminal中,启动一个有iperf监控报文发送容器,该容器会发UDP数据包到 server 容器。然后我们在第三个Terminal中运行 pumba netem loss命令,来为容器增加丢包场景。

# 先创建一个docker网络
docker network create -d bridge bridge

# Terminal 1
# 运行 server 容器
docker run -it --name server --network bridge --rm alpine sh -c "apk add --no-cache iperf; sh"
# 在进入交互命令行的Server容器中运行UDP服务,在5001端口监听
sh$ ip a # 先查看下这个容器的ip地址,例如我这里是172.17.0.2 
sh$ iperf -s -u -i 1

# Terminal 2
# 运行 client 容器
docker run -it --name client --network bridge --rm alpine sh -c "apk add --no-cache iperf; sh"
# 在进入交互命令行的 client容器中,发送UDP数据报到服务端,可以看到没有数据丢包
sh$ iperf -c 172.17.0.2 -u -t 300

# Terminal 1
# 我们可以看到服务端没有数据丢包
# Terminal 3
# 往client容器注入 20% 的数据丢包,持续2分钟
pumba netem --duration 2m --tc-image gaiadocker/iproute2 loss --percent 20 client

# Terminal 2
# 重新在客户端container 中发送数据报,可以看到20%的丢包
sh$ iperf -c 172.17.0.2 -u -t  300

Weave 网络

这部分内容,请直接看作者blog https://www.chenquan.me/archives/315

与[转帖]【混沌工程】 docker环境下模拟网络延迟和丢包相似的内容:

[转帖]【混沌工程】 docker环境下模拟网络延迟和丢包

https://cloud.tencent.com/developer/article/1616202?areaSource=&traceId= 原文地址:https://www.chenquan.me/archives/315 混沌工程最早是Netflix引入的,用来验证服务稳定性的工程。地址:h

[转帖]中国混沌工程调查报告2021(观点摘要,调查背景和混沌工程应用现状)

https://www.jianshu.com/p/9de94066ab46 随着分布式架构的普及以及云计算技术的成熟,国内企业应用云原生化推进业务系统的迭代速度越来越快,后端系统架构日趋复杂,服务间的依赖越来越多,调用的链路越来越长。宕机引发巨额损失、严重影响用户体验的新闻层出不穷,为了让云基础设

[转帖]Nginx惊群效应引起的系统高负载

https://zhuanlan.zhihu.com/p/401910162 原创:蒋院波 导语:本文从进程状态,进程启动方式,网络io多路复用纬度等方面知识,分享解决系统高负载低利用率的案例 前言: 趣头条SRE团队,从服务生命周期管理、混沌工程、业务核心链路治理、应急预案、服务治理(部署标准化、

[转帖]人工智能 Java混合模式火焰图

https://www.dazhuanlan.com/smallnight/topics/1040103 在做性能调优的时候,我们通常会借助一些性能分析工具(比如 perf,DTrace)分析系统资源的使用情况,比如 CPU、内存等,但这些工具分析的结果通常是文本形式,不够直观,不便于快速定位系统瓶

[转帖]人工智能 Java混合模式火焰图

https://www.dazhuanlan.com/smallnight/topics/1040103 在做性能调优的时候,我们通常会借助一些性能分析工具(比如 perf,DTrace)分析系统资源的使用情况,比如 CPU、内存等,但这些工具分析的结果通常是文本形式,不够直观,不便于快速定位系统瓶

[转帖]软件定义边界SDP

SDP简介 发生变化的边界模型SDP的概念SDP架构SDP工作流SDP部署模式客户端—网关模型客户端—服务器模型服务器—服务器模型客户端—服务器—客户端模型 SDP应用场景企业应用隔离私有云和混合云软件即服务(SaaS)基础设施即服务(IaaS)平台即服务(PaaS)基于云的虚拟桌面基础架构(VDI

[转帖]Tcpdump抓包命令

tcpdump和ethereal可以用来获取和分析网络通讯活动,他们都是使用libpcap库来捕获网络封包的。 ​在混杂模式下他们可以监控网络适配器的所有通讯活动并捕获网卡所接收的所有帧。 ​要想设置网络接口为混杂模式并执行这些命令来捕获所有的网络封包,需要具有超级用户的权限。 你可以使用这些工具来

[转帖][译] 基于 Envoy、Cilium 和 eBPF 实现透明的混沌测试(KubeCon, 2019)

http://arthurchiao.art/blog/transparent-chaos-testing-with-envoy-cilium-ebpf-zh/ 译者序 本文内容来自 2019 年的一个技术分享 Transparent Chaos Testing with Envoy, Cilium

[转帖]没 K8s 用不了 Chaos Mesh?试试 Chaosd

https://cn.pingcap.com/blog/cannot-use-chaosmesh-without-k8s-then-try-chaosd Chaosd 是什么? 相信大家对 Chaos Mesh 已经比较了解了:支持多种类型的混沌实验,有 Dashboard web 界面直接管理实验

[转帖]混合部署拓扑

https://docs.pingcap.com/zh/tidb/stable/tune-tikv-thread-performance 本文介绍 TiDB 集群的 TiKV 和 TiDB 混合部署拓扑以及主要参数。常见的场景为,部署机为多路 CPU 处理器,内存也充足,为提高物理机资源利用率,可单