前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【混沌工程】 docker环境下模拟网络延迟和丢包

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

作者头像
保持热爱奔赴山海
发布2020-04-17 16:46:04
3.1K0
发布2020-04-17 16:46:04
举报
文章被收录于专栏:饮水机管理员饮水机管理员

原文地址: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版本可能比较低,实验请用最新版)

代码语言:javascript
复制
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开头的容器

代码语言:javascript
复制
# 在第一个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分配模型

代码语言:javascript
复制
# 运行 "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命令,来为容器增加丢包场景。

代码语言:javascript
复制
# 先创建一个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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pubma
    • Pumba 能做什么?
      • 怎么使用 Pumba
        • 如何安装 Pumba(注意这个文章里面的pumba版本可能比较低,实验请用最新版)
          • Weave 网络
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档