资讯专栏INFORMATION COLUMN

一种生产环境Docker Overlay Network的配置方案

CoderStudy / 2128人阅读

摘要:原文地址介绍一种生产环境的配置方案。概要先讲一下生产环境中的问题有多个,希望能够通过连接起来。因此生产环境中会同时存在无状态应用利用创建的。不会帮你检查名称冲突的情况,如果名称冲突了那么会得到错误的结果。

原文地址

介绍一种生产环境Docker overlay network的配置方案。

概要

先讲一下生产环境中的问题:

有多个Docker host,希望能够通过Docker swarm连接起来。

Docker swarm只适合于无状态应用,不适合有状态应用。

因此生产环境中会同时存在

无状态应用:利用docker service create/docker stack deploy创建的。

有状态应用:利用docker run/docker compose up创建的。

希望两种应用能够连接到同一个overlay网络,在网络内部能够通过

tasks. DNS name 连接到无状态应用(见Container discovery)

DNS name 连接到有状态应用

解决办法:

创建attachable的overlay network

有状态应用挂到这个overlay network上

无状态应用也挂到这个overlay network上

步骤

到manager节点上创建attachable的overlay network,名字叫做prod-overlay:

docker network create -d overlay --attachable prod-overlay

在manager节点上查看这个网络是否创建成功:

$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
fbfde97ed12a        bridge              bridge              local
73ab6bbac970        docker_gwbridge     bridge              local
a2adb3de5f7a        host                host                local
nm7pgzuh6ww4        ingress             overlay             swarm
638e550dab67        none                null                local
qqf78g8iio10        prod-overlay        overlay             swarm

在worker节点上查看这个网络,这时你看不到这个网络,不过不要担心,当后面在worker节点上创建工作负载后就能看到了:

$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
fbfde97ed12a        bridge              bridge              local
73ab6bbac970        docker_gwbridge     bridge              local
a2adb3de5f7a        host                host                local
nm7pgzuh6ww4        ingress             overlay             swarm
638e550dab67        none                null                local

在manager上创建容器c1,挂到prod-overlay network上:

docker run --name c1 --network prod-overlay -itd busybox

在worker上创建容器c2,挂到prod-overlay network上:

docker run --name c2 --network prod-overlay -itd busybox

在manager上创建service c,挂到prod-overlay network上:

docker service create -td --name c --replicas 2 --network prod-overlay busybox
验证 查看worker节点的network

之前在worker节点上没有看到prod-overlay network,现在你应该可以看见了:

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
01180b9d4833        bridge              bridge              local
cd94df435afc        docker_gwbridge     bridge              local
74721e7670eb        host                host                local
nm7pgzuh6ww4        ingress             overlay             swarm
32e6853ea78d        none                null                local
dw8kd2nb2yl3        prod-overlay        overlay             swarm
确认容器可以互ping

到manager节点上,让c1 ping c2

$ docker exec c1 ping -c 2 c2
PING c2 (10.0.2.2): 56 data bytes
64 bytes from 10.0.2.2: seq=0 ttl=64 time=0.682 ms
64 bytes from 10.0.2.2: seq=1 ttl=64 time=0.652 ms

到manager节点上,让c1 ping tasks.ctasks.c是之前创建的service c的DNS name:

$ docker exec c1 ping -c 2 tasks.c
PING tasks.c (10.0.2.8): 56 data bytes
64 bytes from 10.0.2.8: seq=0 ttl=64 time=2.772 ms
64 bytes from 10.0.2.8: seq=1 ttl=64 time=0.694 ms

到manager节点上,让c1 查询 tasks.c的DNS name,可以看到tasks.c有两条记录:

$ docker exec c1 nslookup -type=a tasks.c
Server:        127.0.0.11
Address:    127.0.0.11:53

Non-authoritative answer:
Name:    tasks.c
Address: 10.0.2.7
Name:    tasks.c
Address: 10.0.2.8

到manager节点上,查看service c的task,看到有c.1c.2两个task,分别部署在两个节点上:

$ docker service ps c
ID            NAME  IMAGE           NODE            DESIRED STATE  CURRENT STATE           ERROR  PORTS
p5n70vhtnz2f  c.1   busybox:latest  docker-learn-1  Running        Running 17 minutes ago
byuoox1t7cve  c.2   busybox:latest  docker-learn-2  Running        Running 17 minutes ago

c.1 task所在的节点上,查看task c.1的容器名:

$ docker ps -f name=c.1
CONTAINER ID  IMAGE           COMMAND  CREATED         STATUS         PORTS  NAMES
795a3bd3c20a  busybox:latest  "sh"     21 minutes ago  Up 21 minutes         c.1.p5n70vhtnz2f5q8p2pcvbyfmw

然后在c1里ping task c.1的容器名:

$ docker exec c1 ping -c 2 c.1.p5n70vhtnz2f5q8p2pcvbyfmw
PING c.1.p5n70vhtnz2f5q8p2pcvbyfmw (10.0.2.7): 56 data bytes
64 bytes from 10.0.2.7: seq=0 ttl=64 time=0.198 ms
64 bytes from 10.0.2.7: seq=1 ttl=64 time=0.128 ms

你同样可以:

c2里:

ping c1

ping tasks.c

ping task c.1c.2的容器

在task c.1c.2的容器里:

ping c1c2

ping tasks.c

ping task c.1c.2的容器

注意

通过docker run / docker compose up创建的容器的名字,要保证在整个集群里是唯一的。docker 不会帮你检查名称冲突的情况,如果名称冲突了那么会得到错误的DNS结果。

参考资料

Use overlay networks

Use an overlay network for standalone containers

Docker Reference Architecture: Designing Scalable, Portable Docker Container Networks

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

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

相关文章

  • Prometehus自动发现Docker Swarm Overlay网络中容器

    摘要:原文地址介绍如何使用的机制,自动发现并抓取网络中的容器所提供的指标。我们需要一种动态发现容器的方法。使用的机制,半自动的发现容器。文章最开始说到的半自动就是这个意思,我们得事先知道记录有哪些,然后让去发现这些记录背后对应的容器有哪些。 原文地址 介绍如何使用Prometheus的dns service discovery机制,自动发现并抓取Docker swarm overlay网络中...

    wangtdgoodluck 评论0 收藏0
  • Docker Swarm部署应用总结

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

    Paul_King 评论0 收藏0
  • Docker Overlay网络MTU

    摘要:如果的网卡为,则不需要此步骤设置和的以下步骤得在或之前做假设你有三个机器,,准备搞一个集群获得的参数,注意停掉删掉虚拟网卡启动重建,记得设置之前得到的参数和正确的值再到和上执行相同的命令。 原文地址 Docker Daemon生产环境配置提到了MTU设置,但是这只是针对于名为bridge的docker bridge network,对于overlay network是无效的。 如果do...

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

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

    mengbo 评论0 收藏0
  • Docker Swarm介绍

    摘要:后续将其他节点加入集群都会用到这个值将节点加入集群查看节点信息相关命令创建服务更新服务删除服务减少服务实例增加服务实例查看所有服务查看服务的容器状态查看服务的详细信息。前言本篇是Docker第十三篇,Docker的使用至此就介绍完成,接下来继续Kubernetes。Docker系列文章:为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷Dockerfi...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

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