标签: docker-swarm

Docker Swarm 管理器之间的高网络 I/O

网络流量

我们使用 3 个管理节点和 16 个工作节点运行 Docker Swarm。三个管理节点中的两个节点之间的网络 I/O 非常高。为了说明这一点,iftop以下是三个管理器节点的输出:

vm71 (10.0.0.131)

vm71                 => 10.0.0.130            39.3Mb  47.5Mb  49.3Mb
                     <=                        802Kb  1.03Mb  1.07Mb
Run Code Online (Sandbox Code Playgroud)

vm70 (10.0.0.130)

vm70                 => 10.0.0.131             798Kb  1.00Mb  1.00Mb
                     <=                       40.9Mb  44.8Mb  44.8Mb
Run Code Online (Sandbox Code Playgroud)

vm75 (10.0.0.135)

vm75                 => 10.0.0.131            9.50Kb  10.1Kb  9.51Kb
                     <=                       7.83Kb  8.08Kb  7.56Kb
Run Code Online (Sandbox Code Playgroud)

如上所示,vm70 和 vm71 之间的流量大约是 vm75 和其他两个管理器之间的流量的 4,000 倍。我们将规则设置为在任何 swarm 管理器上不运行容器。这通过docker stats在每个人身上运行得到证实。

按流程联网

下一个明显的问题是哪些进程正在生成这个网络 I/O。的输出netstat -tup如下。我只显示与iftop.

tcp6       0     46 vm71:2377               10.0.0.130:39316        ESTABLISHED 791/dockerd
Run Code Online (Sandbox Code Playgroud)

请注意,这是 tcp6 流量。

我们被难住了。为什么我们会看到这些管理节点之间的流量如此之大?如果我们降级然后提升管理器节点,流量会清理一段时间。但是,它最终会再次增加。这可能是什么原因造成的?

networking docker docker-swarm

5
推荐指数
1
解决办法
116
查看次数

如何获取 docker swarm 节点的 IP 地址?

我有两个虚拟机 ubuntu16 来宾,它们可以通过仅主机网络进行通信:172.28.128.0/16

我使用docker docs 中的步骤创建了一个 docker swarm 。以下是我的群的状态:

vagrant@master:~$ docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
127fuzxjq2j3ashcteu8fo248    worker1   Ready   Active        
43l953k75lv14uw7ni2hbib5j *  master    Ready   Active        Leader
Run Code Online (Sandbox Code Playgroud)

我可以使用这个群来成功运行服务。但是是否可以通过 docker 获取节点的基于 172.28.128.0/16 的 IP 地址?我尝试查看docker commandline reference以及docker remote api 。我的目标是通过远程 api 联系任何 swarm 节点,但为此我需要它的底层 api,在该 api 上启用远程 docker 守护程序进行侦听。

docker docker-swarm

4
推荐指数
1
解决办法
1万
查看次数

删除 docker 服务并等待容器停止

假设我有 Docker Swarm 服务myservice1myservice2. 如何删除这些服务并等待关联的容器停止?

docker docker-swarm

3
推荐指数
1
解决办法
2134
查看次数

在特定IP地址上发布Docker Swarm服务

在 Centos 7.4 上,我正在设置一个群,我想在其中运行多个可在端口 80/443 上访问的路由器。
目的是在单个集群上托管多个环境(测试/登台...),所有环境都是对称的。

我使用 Docker 17.12.0-ce 和 Traefik v1.4.6 作为路由器。

基本思想是每个环境都有一个虚拟 IP 地址,并仅在该地址上发布 Traefik 端口。这对于 Docker swarm 来说是不可能的,所以我必须让 Traefik 实例监听端口 81/82 等,并以某种方式将流量从 VIP:80 带到 :81/:82。

集群管理器中所有环境的虚拟 IP 地址均由 Keepalived 处理。

Traefik 的相关 docker 服务配置:

"Ports": [
          {
           "Protocol": "tcp",
           "TargetPort": 80,
           "PublishedPort": 81,
           "PublishMode": "ingress"
          },

# netstat -anp|grep 81
tcp6       7      0 :::81                   :::*                    LISTEN      4578/dockerd        
Run Code Online (Sandbox Code Playgroud)

firewalld 设置为允许流量到达端口 80、81、82 等

直接在 VIP 上的 81 端口访问 Traefik 公开的后端服务是可行的。

在未正确配置任何内容的情况下访问 VIP 上的 80 端口会导致连接被拒绝

Traefik docker 实例运行在我用于以下测试的同一主机上。 …

haproxy docker ipvs docker-swarm

2
推荐指数
1
解决办法
6087
查看次数

标签 统计

docker ×4

docker-swarm ×4

haproxy ×1

ipvs ×1

networking ×1