Docker Overlay 部署條件html
要想使用Docker原生Overlay網絡,須要知足如下任意條件:node
一、Docker運行在Swarm模式linux
二、使用鍵值存儲的Docker主機集羣docker
本次部署使用鍵值存儲的Docker主機集羣,須要知足如下條件:json
1. 集羣中主機鏈接到鍵值存儲,Docker支持Consul、Etcd和Zookeeper;bootstrap
2. 集羣中主機運行一個Docker守護進程;vim
3. 集羣中主機必須具備惟一的主機名,由於鍵值存儲使用主機名來標識集羣成員;網絡
4. 集羣中Linux主機內核版本3.12+,支持VXLAN數據包處理,不然可能沒法通訊。dom
5. Docker經過overlay網絡驅動程序支持多主機容器網絡通訊。tcp
內核版本升級方案:http://www.javashuo.com/article/p-asupqzzo-hr.html
Docker Overlay 應用部署
節點1節點2操做
# 修改兩個測試端主機名,並退出終端生效 hostname overlay-01 hostname overlay-02
1、部署Consul並運行服務
1.1 節點1操做:下載Consul二進制包並啓動
# 一、解壓Consul壓縮包 unzip consul_0.9.2_linux_amd64.zip # 二、將consul移動到/bin/目錄下並添加執行權限 mv consul /usr/bin/consul && chmod +x /usr/bin/consul # 三、啓動consul並指定本機IP nohup consul agent -server -bootstrap -ui -data-dir /var/lib/consul -client=192.168.1.77 -bind=192.168.1.77 &>/var/log/consul.log &
1.2 節點1操做:查看日誌啓動狀況
tail /var/log/consul.log -f
2018/10/29 15:17:39 [INFO] agent: Started HTTP server on 192.168.1.77:8500 2018/10/29 15:17:45 [WARN] raft: Heartbeat timeout from "" reached, starting election 2018/10/29 15:17:45 [INFO] raft: Node at 192.168.1.77:8300 [Candidate] entering Candidate state in term 2 2018/10/29 15:17:45 [INFO] raft: Election won. Tally: 1 2018/10/29 15:17:45 [INFO] raft: Node at 192.168.1.77:8300 [Leader] entering Leader state 2018/10/29 15:17:45 [INFO] consul: cluster leadership acquired 2018/10/29 15:17:45 [INFO] consul: New leader elected: localhost.localdomain 2018/10/29 15:17:45 [INFO] consul: member 'localhost.localdomain' joined, marking health alive 2018/10/29 15:17:45 [INFO] agent: Synced node info ==> Newer Consul version available: 1.3.0 (currently running: 0.9.2)
2、部署Docker配置文件
2.1 節點1操做:配置Docker守護進程鏈接Consul
# 添加ExecStart若是已有則註釋添加下面案例
vim /lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.1.77:8500 --cluster-advertise 192.168.1.77:2375
# 爲docker監聽 tcp://0.0.0.0:2375
2.2 節點1操做:重啓docker服務
# 1.修改配置文件從新加載 systemctl daemon-reload # 2.重啓docker服務 systemctl restart docker
2.3 節點2操做:修改配置文件
vim /lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.1.77:8500 --cluster-advertise 192.168.1.78:2375
# 通告信息須要改成本機IP --cluster-advertise 192.168.1.78:2375
2.4 節點2操做:重啓docker服務
# 1.修改配置文件從新加載 systemctl daemon-reload # 2.重啓docker服務 systemctl restart docker
3、建立Overlay網絡
3.1 節點1操做:建立overlay網絡
# 建立網絡 -d 指定網絡驅動程序爲 overlay multi_host docker network create -d overlay multi_host
注:再任意節點建立後會經過overlay同步到已鏈接的節點下建立網絡。
命令:docker network ls 4abe591cdf50 multi_host overlay global
命令:docker network inspect ID/KEY [ { "Name": "multi_host", "Id": "4abe591cdf504c1f15f563e4c8516c22b7d037268e6975e9491a417d2da83e8a", "Created": "2018-11-01T10:42:00.117452769+08:00", "Scope": "global", # 驅動爲overlay "Driver": "overlay", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, # 網段信息 "Config": [ { "Subnet": "10.0.0.0/24", "Gateway": "10.0.0.1" } ] }, "Internal": false, "Attachable": false, "Containers": {}, "Options": {}, "Labels": {} } ]
4、測試通訊
4.1 節點1與2操做:運行測試容器
# 指定鏈接網絡類型 --net=multi_host docker run -it --net=multi_host busybox
注:若是報錯則可在配置文件中ExecStart添加加以下參數
--default-runtime=docker-runc
建議添加 多個參數 --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \ --default-runtime=docker-runc \ --exec-opt native.cgroupdriver=systemd \ --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \ --init-path=/usr/libexec/docker/docker-init-current \ --seccomp-profile=/etc/docker/seccomp.json \ 以下 ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.1.77:8500 --cluster-advertise 192.168.1.78:2375 --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json
4.2 節點1與2操做:測試通訊
overlay-01
/ # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:03 inet addr:10.0.0.3 Bcast:0.0.0.0 Mask:255.255.255.0 inet6 addr: fe80::42:aff:fe00:3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1 RX packets:11 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:906 (906.0 B) TX bytes:586 (586.0 B)
overlay-02
/ # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:02 inet addr:10.0.0.2 Bcast:0.0.0.0 Mask:255.255.255.0 inet6 addr: fe80::42:aff:fe00:2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1 RX packets:14 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1136 (1.1 KiB) TX bytes:656 (656.0 B)
測試是否通訊 overlay-02 ping overlay-01
/ # ping 10.0.0.3 PING 10.0.0.3 (10.0.0.3): 56 data bytes 64 bytes from 10.0.0.3: seq=0 ttl=64 time=0.960 ms 64 bytes from 10.0.0.3: seq=1 ttl=64 time=0.355 m
注:通訊成功。