基礎環境咱們使用了兩臺centos 7系統node
基礎配置爲:linux
兩臺機器IP爲docker
172.17.3.10vim
172.17.3.62centos
hosts文件配置爲bash
172.17.3.10 node1網絡
172.17.3.62 node2工具
兩臺均配置爲這樣測試
開啓內核ipv4轉發功能字體
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
清除iptables底層默認規則,並開啓容許轉發功能
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n
最後關閉selinux,更改機器主機名,等等,完畢後重啓下機器,至此咱們前期準備工做已完畢。
須要安裝的組件爲:
1,etcd
2,flannel
3,docker
安裝步驟:
安裝etcd,咱們採用了yum方式安裝
yum install -y epel-release
yum make cache fast
yum install etcd -y
至此咱們的etcd安裝完成。
安裝flannel
yum install flannel -y
最後咱們再安裝docker
yum install -y yum-utils.noarch ###安裝yum的擴張工具集
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ####添加docker-ce的擴展源
yum install -y --setopt=obsoletes=0 docker-ce-17.03.3.ce-1.el7 ####安裝docker-ce
最後docker-ce安裝完成,咱們必定要注意安裝順序,先安裝etcd和flannel最後安裝docker.
下面咱們來配置這3個組件
首先配置etcd集羣
更改兩臺機器的上的etcd配置文件
vim /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ####數據存放位置 ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380" ####監聽其餘etcd實列地址 ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001" ####監聽客戶端地址 ETCD_NAME="node1" ####節點名稱 ETCD_INITIAL_ADVERTISE_PEER_URLS="http://node1:2380" ####通知其餘成員的etcd地址 ETCD_ADVERTISE_CLIENT_URLS="http://node1:2379,http://node1:4001" ### ETCD_INITIAL_CLUSTER="node1=http://node1:2380,node2=http://node2:2380" ###初始化集羣內節點地址 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ##初始化集羣的token ETCD_INITIAL_CLUSTER_STATE="new" ##初始化集羣狀態,new表示新建
#通知客戶端地址
以上是etcd集羣的配置上面是node1的配置,node2配置和node1同樣,只是須要把node1改成node2
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001" ETCD_NAME="node2" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://node2:2380" ETCD_ADVERTISE_CLIENT_URLS="http://node2:2379,http://node2:4001" ETCD_INITIAL_CLUSTER="node1=http://node1:2380,node2=http://node2:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new"
最後咱們啓動etcd,並查看其集羣狀態
systemctl start etcd
設置爲開機啓動
systemctl enable etcd
查看啓動狀態
systemctl status etcd
須要注意的是,必須兩臺機器的etcd實列都起來集羣才能正常創建,這點務必要注意
查看下etcd集羣的狀態
etcdctl member list
咱們的etcd集羣目前可使用了,暫時到這裏
接下來咱們配置flannel
兩臺配置一致
編輯flannel的配置文件,內容以下
vim /etc/sysconfig/flanneld
# Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://172.17.3.10:2379,http://172.17.3.62:2379" #####etcd集羣的地址,包括各個成員 # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="/atomic.io/network" ####自定義的子網目錄,必定要和添加到etcd的子網目錄一致 # Any additional options that you want to pass #FLANNEL_OPTIONS="" FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/ --etcd-endpoints=http://172.17.3.10:2379,http://172.17.3.62:2379 --iface=ens32" ####定義了日誌級別,路徑,以及etcd集羣地址和綁定的屋裏網卡信息
再啓動flannel以前須要向etcd內寫入子網信息
etcdctl mk /atomic.io/network/config '{"Network":"10.10.0.0/16", "SubnetMin": "10.10.1.0", "SubnetMax": "10.10.254.0"}'
上面的2處紅色字體部分必須一致,能夠自定義可是必須一致
子網範圍爲 10.10.0.0/16,最小子網開始爲10.10.1.0 最大子網結束爲10.10.254.0,至此自定義子網信息咱們已經寫入完畢。
接下來,咱們來啓動flannel,並設置爲開機啓動
systemctl start flanneld
systemctl enable flanneld
systemctl status flanneld
兩臺都啓動後咱們來配置docker
能夠發現的是在咱們先安裝flannel和etcd後最後安裝docker後咱們使用 sysetmctl show docker 將會發現 在安裝flannel後自動生成配置
DropInPaths=/usr/lib/systemd/system/docker.service.d/flannel.conf
故在docker的systemd文件中應用對應變量 DOCKER_NETWORK_OPTIONS 便可
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd \
$DOCKER_NETWORK_OPTIONS
添加上述紅色部分便可,引用了flannel的網絡
重載配置systemctl daemon-reload
啓動docker
systemctl start docker
而後咱們來看兩臺物理機的網卡IP信息
首先看node1的
能夠看到docker 0 的網橋已經使用flannel的網絡段了
node2也是如此
目前兩臺物理機的docker 0 網絡處於同一子網下面的都是使用的flannel的子網,是能夠相互ping通的
在node1上,ping node2的docker 0 網橋ip
在node2上,ping node1的docker 0網橋ip
是能夠相互ping通的,那麼兩臺物理機上容器也是能夠互通的,咱們分別在兩臺物理機上建立容器來測試下
在node1建立一個容器,名字叫test,進入容器內部並查看ip
咱們來在容器內部ping下node2的docker 0網橋 IP
是能夠ping通的,沒問題
咱們去node2上來ping node1上的容器的ip
也是能夠的
咱們node2上建立一個容器
在容器內部去ping node1的docker 0 網橋IP
是沒有問題的
來ping下node1上的容器的ip
也是能夠的,沒有問題
至此,docker使用flannel網絡並實現互聯互通完成。
須要注意的幾點要點:
1,向etcd集羣寫入子網信息時候務必要注意創建的子網文件夾要和flannel的配置文件內一直。
2,flannel的配置,etcd集羣地址寫正確,子網文件夾信息要和etcd寫入一致
3,系統iptables默認規則必定要清除,並開啓容許轉發
4,肯定下docker的網絡是否被flannel接管,咱們查看下docker的進程要確認下
若是有相似如上信息就表示被接管成功。