Docker swarm を仕事で使っているのですが、最近ネットワーク周りで不可解な現象が頻発。
お仕事で使っているときにコンテナ間のネットワーク周りが不安定だと苦情が。
泣ける。

もしかしたら、一つのネットワークの中にコンテナを詰めすぎるとだめなのかな?
ってことで自宅で検証してみました。

検証環境
検証環境は以下の通り

root@docker-01:~# docker -H localhost:12375 info
Containers: 124
 Running: 124
 Paused: 0
 Stopped: 0
Images: 5
Server Version: swarm/1.2.5
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint
Nodes: 2
 docker-01: 192.168.56.102:2375
  └ ID: 5DH2:HZB5:FHVI:RRDB:YFCB:P3OL:ZMZG:K5D4:OKJ2:ORNZ:FVLY:2BRF
  └ Status: Healthy
  └ Containers: 62 (62 Running, 0 Paused, 0 Stopped)
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 777.5 MiB
  └ Labels: kernelversion=4.4.0-38-generic, operatingsystem=Ubuntu 16.04.1 LTS, storagedriver=aufs
  └ UpdatedAt: 2016-10-08T15:10:38Z
  └ ServerVersion: 1.12.1
 docker-02: 192.168.56.103:2375
  └ ID: RBJK:2HDX:XWZ2:7Q6A:VJXP:BTY4:VFGD:XWXF:NGZT:VAWZ:DRMG:SYIA
  └ Status: Healthy
  └ Containers: 62 (62 Running, 0 Paused, 0 Stopped)
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 777.5 MiB
  └ Labels: kernelversion=4.4.0-38-generic, operatingsystem=Ubuntu 16.04.1 LTS, storagedriver=aufs
  └ UpdatedAt: 2016-10-08T15:10:12Z
  └ ServerVersion: 1.12.1
Plugins:
 Volume: 
 Network: 
Swarm: 
 NodeID: 
 Is Manager: false
 Node Address: 
Security Options:
Kernel Version: 4.4.0-38-generic
Operating System: linux
Architecture: amd64
CPUs: 2
Total Memory: 1.518 GiB
Name: f00aba04157f
Docker Root Dir: 
Debug Mode (client): false
Debug Mode (server): false
WARNING: No kernel memory limit support


検証項目

一つのネットワークの中に コンテナをいっぱい(120個)詰め込んでみる。
以下のような スクリプトを書いてコンテナをたくさん作って overlay ネットワーク につっこんでみました。

#! /bin/bash

for i in {1..120}
do
  docker -H localhost:12375 run -dP --net test --name con$i -h con$i moremagic/ubuntu-sshd
done;

全く問題なし。



ネットワークの切り替えが不安定なのかな?

以下のようなスクリプトを書いてtestネットワークから test2ネットワークに
すべてのコンテナを移動してみました。

#! /bin/bash

for i in {1..120}
do
  docker -H localhost:12375 network connect test2 con$i
  docker -H localhost:12375 network disconnect test con$i
done;

やっぱり全く問題ありません。



ノードを強制シャットダウン
Dockerノードを停止させ、再起動
その後、コンテナをすべて起動してネットワークの状態が復元するかテストしてみました。

## 再起動したノード内で
docker start `docker ps -a -q`

問題なく起動でき、ネットワークの復元にも成功しました。


ネットワークの数を増やす

Overlayネットワークの数をたくさん追加してみました。

#! /bin/bash

for i in {1..120}
do
  docker -H localhost:12375 network create -d overlay ovelay-net-$i
done;

問題ありませんでした。




そうなるとなんで不安定になったんだろう?
いろんなバージョンが混在している環境だからかな?
もう少し問題が起きそうなパターンを考えてみよう。。。