docker容器间网络仿真工具-pumba

docker-tc&pumba

docker-tc:docker-tc项目仓库
pumba:pumba项目仓库
这两个项目理论上都可以实现对容器间的网络环境进行各种模拟干预,包括延迟,丢包,带宽限制等。
但是我在实际使用时,发现docker-tc这个工具在进行网络进行模拟时,会使我的程序卡住,一直不执行(程序在不进行任何限速的时候,可以正常工作),因此舍弃这种方式。
pumba相对于docker-tc的缺点是在不使用其他全局监控插件时不能做到完全自动化,docker-tc可以通过在docker compose中使用label标签进行全自动的部署。pumba需要在容器启动后再进行网络相关的设置,因此需要单独开一个终端进行pumba指令的执行,执行期间是独占的,因此也无法将其整理成bash脚本的一个部分。

pumba

安装

方式1:

wget https://github.com/alexei-led/pumba/releases/download/0.10.1/pumba_linux_amd64
sudo mv pumba_linux_amd64 /usr/local/bin/pumba
chmod +x /usr/local/bin/pumba && pumba --help

方式2:

sudo curl -L https://github.com/alexei-led/pumba/releases/download/0.10.1/pumba_linux_amd64 --output /usr/local/bin/pumba
chmod +x /usr/local/bin/pumba && pumba --help

如果出现了pumba的帮助手册就说明安装成功,就可以使用pumba进行docker容器间网络的设置!
如果你需要下载最新版本的pumba,可以需要自己查看版本并更新链接:https://github.com/alexei-led/pumba/releases

实验环境

我的实验环境是三个容器位于同一个自定义的子网,然后它们需要通过网络连接完成协同推理,pumba的作用是限制它们之间的网络环境。
docker-compose.yml定义如下:

# Settings and configurations that are common for all containers
x-paoding-common: &paoding-common
  image: pao-ding:1.0
  volumes:
    - /home/yons/.cache/torch/hub/checkpoints:/root/.cache/torch/hub/checkpoints/
    - /home/yons/whisperliang/Pao-Ding:/Pao-Ding
  
services:
  # # you can make the workfolw automatic by this script
  # paoding-master:
  #   <<: *paoding-common
  #   command: "bash -c 'sleep 10 && python3 main.py master'"
  #   networks:
  #     paoding-network:
  #       ipv4_address: 174.28.0.250
  #   depends_on:
  #     paoding-trainer:
  #       condition: service_healthy
  #     paoding-worker0:
  #       condition: service_healthy
  #     paoding-worker1:
  #       condition: service_healthy

  # paoding-trainer:
  #   <<: *paoding-common
  #   command: python3 main.py trainer
  #   networks:
  #     paoding-network:
  #       ipv4_address: 174.28.0.2
  #   healthcheck:
  #     test: ["CMD", "curl", "-f", "http://localhost:8000"]
  #     interval: 10s
  #     timeout: 5s
  #     retries: 20

  # execute python3 main.py master in docker paoding-master-trainer
  # make sure that pumba script works
  paoding-master-trainer:
    <<: *paoding-common
    command: python3 main.py trainer
    networks:
      paoding-network:
        ipv4_address: 174.28.0.2
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000"]
      interval: 10s
      timeout: 5s
      retries: 20

  paoding-worker0:
    <<: *paoding-common
    command: python3 main.py worker -i 0
    networks:
      paoding-network:
        ipv4_address: 174.28.0.3
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000"]
      interval: 10s
      timeout: 5s
      retries: 20

  paoding-worker1:
    <<: *paoding-common
    command: python3 main.py worker -i 1
    networks:
      paoding-network:
        ipv4_address: 174.28.0.4
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000"]
      interval: 10s
      timeout: 5s
      retries: 20

# volumes:
#   data1-1:

networks:
  paoding-network:
    driver: bridge
    ipam:
      config:
        - subnet: 174.28.0.0/24

实验场景

首先我需要进行的是在特定带宽下进行容器间协同推理的实验。

pumba netem --duration 2m --tc-image gaiadocker/iproute2 rate --rate 32mbit re2:^pao-ding_paoding-worker

我使用docker-compose up -d 启动各容器之后,使用pumba指令进行带宽限制。通过正则匹配,pumba可以自动将符合条件的容器带宽进行限制。
然后我们新开一个终端,输入指令docker exec -it pao-ding_paoding-master-trainer_1 /bin/bash进入docker paoding-master-trainer,并执行python3 main.py master进行协同推理
运行结果如下:
带宽限制结果

从图上可以看出带宽被限制到3.6MB/s(预期的是4MB/s,有误差是正常的,而且这比docker-tc似乎更准确一些)。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值