资讯专栏INFORMATION COLUMN

Docker Overlay网络的MTU

wuyangnju / 3030人阅读

摘要:如果的网卡为,则不需要此步骤设置和的以下步骤得在或之前做假设你有三个机器,,准备搞一个集群获得的参数,注意停掉删掉虚拟网卡启动重建,记得设置之前得到的参数和正确的值再到和上执行相同的命令。

原文地址

Docker Daemon生产环境配置提到了MTU设置,但是这只是针对于名为bridge的docker bridge network,对于overlay network是无效的。

如果docker host machine的网卡MTU为1500,则不需要此步骤

设置ingressdocker_gwbridge的MTU

以下步骤得在swarm init或join之前做

假设你有三个机器,manager、worker-1、worker-2,准备搞一个Docker swarm集群

1) [manager] docker swarm init

2) [manager] 获得docker_gwbridge的参数,注意Subnet

$ docker network inspect docker_gwbridge
[
    {
        "Name": "docker_gwbridge",
        ...
        "IPAM": {
            ...
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    ...
                }
            ]
        },
        ...
    }
]

3) [manager] docker swarm leave --force

4) [manager] 停掉docker sudo systemctl stop docker.service

5) [manager] 删掉虚拟网卡docker_gwbridge

$ sudo ip link set docker_gwbridge down
$ sudo ip link del dev docker_gwbridge

6) [manager] 启动docker sudo systemctl start docker.service

7) [manager] 重建docker_gwbridge

记得设置之前得到的Subnet参数和正确的MTU值

$ docker network rm docker_gwbridge
$ docker network create 
  --subnet 172.18.0.0/16 
  --opt com.docker.network.bridge.name=docker_gwbridge 
  --opt com.docker.network.bridge.enable_icc=false 
  --opt com.docker.network.bridge.enable_ip_masquerade=true 
  --opt com.docker.network.driver.mtu=1450 
  docker_gwbridge

再到worker-1和worker-2上执行相同的命令。

8) [manager] docker swarm init

9) [manager] 先观察ingress network的参数,注意SubnetGateway

$ docker network inspect ingress
[
    {
        "Name": "ingress",
        ...
        "IPAM": {
            ...
            "Config": [
                {
                    "Subnet": "10.255.0.0/16",
                    "Gateway": "10.255.0.1"
                }
            ]
        },
        ...
    }
]

10) [manager] 删除ingress network,docker network rm ingress

11) [manager] 重新创建ingress network,记得填写之前得到的SubnetGateway,以及正确的MTU值:

$ docker network create 
  --driver overlay 
  --ingress 
  --subnet=10.255.0.0/16 
  --gateway=10.255.0.1 
  --opt com.docker.network.driver.mtu=1450 
  ingress

12) [worker-1] [worker-2] join docker swarm join ...

注意:新机器在join到swarm之前,得先执行第7步

验证:

1) 启动一个swarm service,docker service create -td --name busybox busybox

2) 观察虚拟网卡

发现MTU都是1450:

$ ip link
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3:  mtu 1450 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether fa:16:3e:71:09:f5 brd ff:ff:ff:ff:ff:ff
3: docker0:  mtu 1450 qdisc noqueue state UP mode DEFAULT group default
    link/ether 02:42:6b:de:95:71 brd ff:ff:ff:ff:ff:ff
298: docker_gwbridge:  mtu 1450 qdisc noqueue state UP mode DEFAULT group default
    link/ether 02:42:ae:7b:cd:b4 brd ff:ff:ff:ff:ff:ff
309: veth7e0f9e5@if308:  mtu 1450 qdisc noqueue master docker_gwbridge state UP mode DEFAULT group default
    link/ether 16:ca:8f:c7:d3:7f brd ff:ff:ff:ff:ff:ff link-netnsid 1
311: vethcb94fec@if310:  mtu 1450 qdisc noqueue master docker0 state UP mode DEFAULT group default
    link/ether 9a:aa:de:7b:4f:d4 brd ff:ff:ff:ff:ff:ff link-netnsid 2

3) 观察容器内网卡

网卡MTU也是1450:

$ docker exec b.1.pdsdgghzyy5rhqkk5et59qa3o ip link
1: lo:  mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
310: eth0@if311:  mtu 1450 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
自建overlay network的MTU 方法一:在docker compose file设置
...

networks:                                
  my-overlay:                               
    driver: bridge                       
    driver_opts:                         
      com.docker.network.driver.mtu: 1450

不过这样不好,因为这样就把docker compose file的内容和生产环境绑定了,换了个环境这个MTU值未必合适。

方法二:外部创建时设置
docker network create 
  -d overlay 
  --opt com.docker.network.driver.mtu=1450 
  --attachable 
  my-overlay

用法:

在docker compose file里这样用:

...

networks:
  app-net:
    external: true
    name: my-overlay

docker run --network my-overlay ...

docker service create --network my-overlay ...

参考资料

Use overlay networks

Docker MTU issues and solutions

docker network create

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27674.html

相关文章

  • Docker Swarm部署应用总结

    摘要:配置网络参照生产环境配置中的和子网章节。特别注意观察和的子网是否与已有网络冲突如果有冲突则参考网络的中的方法修改子网。部署使用的是的监控方案。创建应用网络创建你也可以改成自己的名字参考网络的检查子网与是否配置正确。 原文 大纲 本文只是一种实际部署方案的例子,涉及到的技术有(除Docker/Docker Swarm外): Docker overlay network Fluentd...

    Paul_King 评论0 收藏0
  • Docker Daemon生产环境关键几个参数

    摘要:原文地址一些生产环境中要注意的参数配置。本文介绍一些生产环境中要特别注意的参数,这些参数可以通过在命令行参数形式给,也可以通过在里配置。然后执行来验证配置是否生效。它们的原理就是修改参数。 原文地址 一些docker daemon生产环境中要注意的参数配置。 本文介绍一些生产环境中dockerd要特别注意的参数,这些参数可以通过在dockerd命令行参数形式给,也可以通过在/etc/d...

    mengbo 评论0 收藏0
  • OpenStack 与 Rancher 融合新玩法

    摘要:本次分享给大家带来与能够融合使用的一些玩法。计算节点的进程不能在运行在中。部署的过程需要拉取很多镜像,需要耐心的等待。之前的计划应该是在版会添加的支持,差不多就是今年月份左右。 OpenStack是开源Iaas云的事实标准,功能大而全,除了能管理虚机同时也能管理容器,OpenStack项目中的Magnum、Kuryr、Kolla、Murano、Nova-docker等都是与容器场景很不...

    android_c 评论0 收藏0
  • 谈谈 Docker 网络

    摘要:基于近期学习的内容,整理与网络相关的知识。针对这一问题,采用网络来解决。但这篇博客的重点不在,我们可以在启动时,为其指定一个分布式存储,从而使得我们能够实验网络。 基于近期学习的 Docker 内容,整理与 Docker 网络相关的知识。实验环境:Centos 7.4 Docker 版本如下: Client: Version: 18.03.1-ce API versio...

    mozillazg 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<