概要
前回の続きです。
今回はflannelを導入してマルチホストでのコンテナ間通信を可能にします。
マスターの設定
flannelの設定
flannel.json
ネットワークの設定ファイルを用意します。適当にflannel.jsonとします。
{ "Network": "10.20.0.0/16", "SubnetLen": 24, "Backend": { "Type": "vxlan", "VNI": 1 } }
etcdctlでetcdのKVSにセットします。
# etcdctl set /atomic.io/network/config < flannel.json { "Network": "10.20.0.0/16", "SubnetLen": 24, "Backend": { "Type": "vxlan", "VNI": 1 } }
/etc/sysconfig/flanneld
/etc/sysconfig/flanneld
を編集します。
FLANNEL_ETCD="http://192.168.33.10:2379" FLANNEL_ETCD_KEY="/atomic.io/network" FLANNEL_OPTIONS="--iface=eth1"
FLANNEL_ETCD
はマスターのIP。FLANNEL_ETCD_KEY
はさっき設定したKeyのconfigを抜いたものを設定します。
FLANNEL_OPTIONS
に関してはVagrantでIPを固定化するとeth1に設定されるため、そちらを使用します。EC2などでは不要な設定です。
完了したらサービスの再起動と自動起動設定
# systemctl restart flanneld # systemctl enable flanneld
完了したらリブート。リブートする理由はdocker0のネットワークがデフォルトのままだと他のホストとも被ってしまい、コンテナのIPが被ることがあるからです(Vagrant固有かもですが)。
# reboot
動作確認
# cat /run/flannel/subnet.env FLANNEL_NETWORK=10.20.0.0/16 FLANNEL_SUBNET=10.20.40.1/24 FLANNEL_MTU=1450 FLANNEL_IPMASQ=false
先ほど設定したIP範囲で設定できてますね。NICも確認します。
# ip -4 a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0 valid_lft 86376sec preferred_lft 86376sec 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1 valid_lft forever preferred_lft forever 4: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN inet 10.20.40.0/16 scope global flannel.1 valid_lft forever preferred_lft forever 5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN inet 10.20.40.1/24 scope global docker0 valid_lft forever preferred_lft forever
flannel.1
に指定したネットワークのIPが付いていることが分かります。
ノードの設定
etcdに登録する部分を除いてマスターと同じです。
/etc/sysconfig/flanneld
/etc/sysconfig/flanneld
を編集します。
FLANNEL_ETCD="http://192.168.33.10:2379" FLANNEL_ETCD_KEY="/atomic.io/network" FLANNEL_OPTIONS="--iface=eth1"
完了したらサービスの再起動と自動起動設定
# systemctl restart flanneld # systemctl enable flanneld
完了したらリブート
# reboot
動作確認
# cat /run/flannel/subnet.env FLANNEL_NETWORK=10.20.0.0/16 FLANNEL_SUBNET=10.20.1.1/24 FLANNEL_MTU=1450 FLANNEL_IPMASQ=false
先ほど設定したIP範囲で設定できてますね。NICも確認します。
# ip -4 a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0 valid_lft 86373sec preferred_lft 86373sec 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.33.101/24 brd 192.168.33.255 scope global eth1 valid_lft forever preferred_lft forever 4: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN inet 10.20.82.0/16 scope global flannel.1 valid_lft forever preferred_lft forever 5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN inet 10.20.82.1/24 scope global docker0 valid_lft forever preferred_lft forever
ちゃんとマスターのflannelとつながっているか確認します。
# systemctl status flanneld 3:27:06 node2 flanneld[32348]: I0524 23:27:06.133342 32348 device.go:164] calling NeighAdd: 192.168.33.10, a2:ff:24:12:57:74 5月 24 23:27:06 node2 flanneld[32348]: I0524 23:27:06.133377 32348 device.go:164] calling NeighAdd: 192.168.33.100, 3e:18:cb:8c:c5:5e 5月 24 23:27:06 node2 systemd[1]: Started Flanneld overlay address etcd agent.
大丈夫ですね。
コンテナを起動してマルチホスト間で疎通
マスターとノードで以下のようにコンテナを作ってみます。
master
# docker run -it --name centos centos:centos7.1.1503 /bin/bash
コンテナのIPを確認します。
# ip a | grep eth0 6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP inet 10.20.40.2/24 scope global eth0
node1
# docker run -it --name centos centos:centos7.1.1503 /bin/bash
コンテナのIPを確認します。
# ip a | grep eth0 6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP inet 10.20.82.2/24 scope global eth0
node2
# docker run -it --name centos centos:centos7.1.1503 /bin/bash
コンテナのIPを確認します。
# ip a | grep eth0 6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP inet 10.20.1.2/24 scope global eth0
動作確認
Dockerホスト | コンテナIP |
---|---|
master | 10.20.40.2 |
node1 | 10.20.82.2 |
node2 | 10.20.1.2 |
masterからnode1へ疎通確認
[root@e7770e05c9ff /]# ping 10.20.82.2 PING 10.20.82.2 (10.20.82.2) 56(84) bytes of data. 64 bytes from 10.20.82.2: icmp_seq=1 ttl=62 time=1.27 ms 64 bytes from 10.20.82.2: icmp_seq=2 ttl=62 time=0.615 ms
node1からnode2へ疎通確認
[root@1773b56814f8 /]# ping 10.20.1.2 PING 10.20.1.2 (10.20.1.2) 56(84) bytes of data. 64 bytes from 10.20.1.2: icmp_seq=1 ttl=62 time=1.66 ms 64 bytes from 10.20.1.2: icmp_seq=2 ttl=62 time=0.556 ms
大丈夫ですね。
次回はPodを使ったクラスタ構築を進めます。