Docker專欄—多節點之間容器之間互聯

多節點之間docker互聯

docker原生態overlay模式

  • 內置跨主機的網絡通訊實現思路無非有兩種二層VLAN網絡Overlay網絡
    • 二層VLAN網絡解決跨主機通訊的思路是把原先的網絡架構改造爲互通的大二層網絡,經過特定網絡設備直接路由,實現容器點到點的之間通訊。(優勢:傳輸效率比overlay高,缺點:vlan端口有限,通用性和靈活性欠缺)
    • Overlay網絡是指在不改變現有網絡基礎設施的前提下,經過某種約定通訊協議,把二層報文封裝在IP報文之上的新的數據格式。可以充分利用成熟的IP路由協議進程數據分發;在Overlay技術中採用擴展的隔離標識位數,可以突破VLAN的4000數量限制支持高達16M的用戶,並在必要時可將廣播流量轉化爲組播流量,避免廣播數據氾濫。

網卡設備

Container eth0:eth0它是Overlay網絡分配的惟一的IP地址,它是veth pair虛擬設備對,做用是實現點對點的通訊,經過橋接到br0這個網橋中,能夠實現不一樣 NameSwitch之間容器進行通訊。

br0:它是Overlay默認建立的網橋。

VETP:對VXLAN數據包的封裝與街封裝。

Container eth1:eth1是容器主機的默認網絡,主要提供容器訪問外網所提供的服務,走的默認docker網絡架構,只不過他建立了docker_gwbridge這個網橋。

docker_gwbridge:docker_gwbridge是容器所建立的網橋它替代了docker0的服務。

eth0:真機網卡與外界網卡鏈接得真機網卡,它用來轉發,容器VXLAN與NAT兩種網卡類型的數據包到指定的對端節點。
複製代碼

發送數據包流程

容器Container1 發送數據包 到容器 Container2。node

  • 容器Container1會經過Container eth0 將這個數據包發送到 10.0.0.1 的網關。
  • 網關將數據包發送出去後到達br0網橋。
  • br0網橋針對VXLAN設備,主要用於捕獲對外的數據包經過VETP進行數據包封裝。
  • 封裝好將VXLAN格式數據包交給eth0,經過UDP方式交給Container2的eth0。
  • Container2收到數據包後經過VETP將數據包解封裝。
  • 網橋經過網關將解封裝的數據包轉發給Container eth0,完畢通訊

發送數據包流程

多節點直接docker互聯

節點準備

hostname ip
node103 192.168.44.103
node104 192.168.44.104

準備 overlay 環境

爲支持容器跨主機通訊,Docker 提供了 overlay driver。Docerk overlay 網絡須要一個 key-value 數據庫用於保存網絡狀態信息,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 軟件,咱們這裏使用 Consul。(Etcd後續再補充)docker

  • 在node103上面部署consul,命令以下:
# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
複製代碼

容器啓動後,能夠經過:http:192.168.44.103:8500訪問,如圖: 數據庫

consul

  • 分別在node103和node104上面修改docker.service的啓動命令
# vi /usr/lib/systemd/system/docker.service
複製代碼

在ExecStart一欄添加:bootstrap

ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --cluster-store=consul://192.168.44.103:8500 --cluster-advertise=ens33:2376 \
複製代碼
  • 注:node103和node104的--cluster-store的配置路徑相同,都是192.168.44.103:8500
--cluster-store 指定 consul 的地址。
--cluster-advertise 告知 consul 本身的鏈接地址。
複製代碼

docker.service

  • 在node103和node104上重啓docker
# systemctl daemon-reload
# systemctl restart docker 
複製代碼
  • 注:node103重啓服務以後,須要從新run consul服務

此時,查看node103:8500 可以看到兩個節點的信息centos

consul

啓動服務

  • 建立overlay網絡
[root@node104 ~]# docker network create -d overlay ov_net1
複製代碼

  • 注:docker network create -d overlay ov_net1 --subnet 10.10.10.0/24 (指定子網),這裏默認是10.0.0.0

  • 在node103和node104上面各啓動一個centos:7.5.1804的服務
[root@node103 ~]# docker run -itd --privileged --name node2 --hostname node2 --net ov_net1 --rm big_computing /usr/sbin/init
root@node104 ~]# docker run -itd --privileged --name node1 --hostname node1 --net ov_net1 --rm big_computing /usr/sbin/init
複製代碼
  • 進入node104上面的容器node1(10.0.0.2)
[root@node104 ~]# docker exec -it node1 /bin/bash
複製代碼
  • ping node103上面的容器node2(10.0.0.3)

一樣的方法進去node2,也可以ping通node1bash

容器中安裝htcondor(這一部分與docker的overlay無關)

  • 選定node103上面的node2爲主節點,修改/etc/condor/condor_config
同時,修改condor_config中添加:
ALLOW_WRITE = *
ALLOW_READ = *
複製代碼
  • 修改node1上面的/etc/condor/condor_config
同時,修改condor_config中添加:
ALLOW_WRITE = *
ALLOW_READ = * 
複製代碼
  • 查看htcondor的status
    htcondor

後記

肺炎猖狂,在家閉關!最近,會持續更新本身前期整理的學習資料,你們若是感興趣的,請點贊,加關注網絡

相關文章
相關標籤/搜索