91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何搭建Flannel容器

發布時間:2022-02-19 11:04:38 來源:億速云 閱讀:142 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“如何搭建Flannel容器”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何搭建Flannel容器”這篇文章吧。

隨著docker容器化興起,云計算面對的挑戰越來越大,例如:網絡管理、存儲等。一個數據中心很容易搞出成百上千個容器,這么多的容器我們需要如何管理呢。

如何搭建Flannel容器

Flannel實現原理

原理說明

Flannel為每個host分配一個subnet,容器從這個subnet中分配IP,這些IP可以在host間路由,容器間無需使用nat和端口映射即可實現跨主機通信

每個subnet都是從一個更大的IP池中劃分的,flannel會在每個主機上運行一個叫flanneld的agent,其職責就是從池子中分配subnet

Flannel使用etcd存放網絡配置、已分配 的subnet、host的IP等信息

Flannel數據包在主機間轉發是由backend實現的,目前已經支持UDP、VxLAN、host-gw、AWS VPC和GCE路由等多種backend

數據轉發流程

如何搭建Flannel容器

容器直接使用目標容器的ip訪問,默認通過容器內部的eth0發送出去。

報文通過veth pair被發送到vethXXX。

vethXXX是直接連接到虛擬交換機docker0的,報文通過虛擬bridge docker0發送出去。

查找路由表,外部容器ip的報文都會轉發到flannel0虛擬網卡,這是一個P2P的虛擬網卡,然后報文就被轉發到監聽在另一端的flanneld。

flanneld通過etcd維護了各個節點之間的路由表,把原來的報文UDP封裝一層,通過配置的iface發送出去。

報文通過主機之間的網絡找到目標主機。

報文繼續往上,到傳輸層,交給監聽在8285端口的flanneld程序處理。

數據被解包,然后發送給flannel0虛擬網卡。

查找路由表,發現對應容器的報文要交給docker0。

docker0找到連到自己的容器,把報文發送過去。

Flannel安裝配置

環境準備

節點名稱 IP地址 安裝軟件
docker1 192.168.198.133 etcd、flannel、docker
docker2 192.168.198.130 flannel、docker

安裝etcd

etcd下載地址:https://github.com/coreos/etcd/releases

啟動命令:

etcd -name etcd1 -data-dir /var/lib/etcd --advertise-client-urls http://192.168.198.133:2379,http://127.0.0.1:2379 --listen-client-urls http://192.168.198.133:2379,http://127.0.0.1:2379 &

安裝Flannel

flannel下載地址:https://github.com/coreos/flannel/releases

添加flannel網絡配置信息到etcd:

etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "vxlan"}}'

Network:用于指定Flannel地址池

SubnetLen:用于指定分配給單個宿主機的docker0的ip段的子網掩碼的長度

SubnetMin:用于指定最小能夠分配的ip段

SudbnetMax:用于指定最大能夠分配的ip段,在上面的示例中,表示每個宿主機可以分配一個24位掩碼長度的子網,可以分配的子網從10.0.1.0/24到10.0.20.0/24,也就意味著在這個網段中,最多只能有20臺宿主機

Backend:用于指定數據包以什么方式轉發,默認為udp模式,host-gw模式性能最好,但不能跨宿主機網絡

啟動Flannel

# cat /etc/systemd/system/flanneld.service[Unit]
Description=Flanneld
Documentation=https://github.com/coreos/flannel
After=network.target
Before=docker.service

[Service]
User=root
ExecStartPost=/usr/local/bin/mk-docker-opts.sh
ExecStart=/usr/local/bin/flanneld \
--etcd-endpoints="http://192.168.198.133:2379" \
--iface=192.168.198.133 \
--ip-masq=true \
--etcd-prefix=/coreos.com/network
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target# systemctl daemon-reload# systemctl start flanneld

Flannel啟動過程解析:

從etcd中獲取network的配置信息,劃分subnet,并在etcd中進行注冊,將子網信息記錄到/run/flannel/subnet.env中,Flannel必須先于Docker啟動。

驗證Flannel網絡

查看etcd中的數據:

# etcdctl ls /coreos.com/network/subnets/coreos.com/network/subnets/10.0.18.0-24

查看docker1的flannel網卡信息:

38: flannel.1:  mtu 1450 qdisc noqueue state UNKNOWN group default
   link/ether 1a:8e:8b:09:d6:d4 brd ff:ff:ff:ff:ff:ff
   inet 10.0.18.0/32 scope global flannel.1
      valid_lft forever preferred_lft forever
   inet6 fe80::188e:8bff:fe09:d6d4/64 scope link
      valid_lft forever preferred_lft forever

可以看到flannel0網卡的地址和etcd存儲的地址一樣,這樣flannel網絡配置完成

配置Docker

Docker安裝完成以后,需要修改其啟動參數以使其能夠使用flannel進行IP分配,以及網絡通訊

在Flannel運行之后,會生成一個環境變量文件,包含了當前主機要使用flannel通訊的相關參數,如下:

# cat /run/flannel/subnet.envFLANNEL_NETWORK=10.0.0.0/16
FLANNEL_SUBNET=10.0.18.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

可以使用flannel提供的腳本將subnet.env轉寫成Docker啟動參數,創建好的啟動參數默認生成在/run/docker_opts.env文件中:

# /opt/flannel/mk-docker-opts.sh -c# cat /run/docker_opts.envDOCKER_OPTS=" --bip=10.0.18.1/24 --ip-masq=false --mtu=1450"修改docker的服務啟動文件如下:# vim /lib/systemd/system/docker.serviceEnvironmentFile=/run/docker_opts.env
ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://

重啟docker

systemctl daemon-reload
systemctl restart docker

這時可以看到docker0的ip已經位于flannel網卡的網段之中:

3: docker0:  mtu 1500 qdisc noqueue state DOWN group default
   link/ether 02:42:de:a3:d8:7d brd ff:ff:ff:ff:ff:ff
   inet 10.0.18.1/24 brd 10.0.18.255 scope global docker0
      valid_lft forever preferred_lft forever
   inet6 fe80::42:deff:fea3:d87d/64 scope link
      valid_lft forever preferred_lft forever
38: flannel.1:  mtu 1450 qdisc noqueue state UNKNOWN group default
   link/ether 1a:8e:8b:09:d6:d4 brd ff:ff:ff:ff:ff:ff
   inet 10.0.18.0/32 scope global flannel.1
      valid_lft forever preferred_lft forever
   inet6 fe80::188e:8bff:fe09:d6d4/64 scope link
      valid_lft forever preferred_lft forever

驗證容器互通

root@ubuntu:~# docker run -it busybox/ # ip a1: lo:  mtu 65536 qdisc noqueue qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
39: eth0@if40:  mtu 1450 qdisc noqueue
   link/ether 02:42:0a:00:12:02 brd ff:ff:ff:ff:ff:ff
   inet 10.0.18.2/24 brd 10.0.18.255 scope global eth0
      valid_lft forever preferred_lft forever
/ # ping 10.0.12.2PING 10.0.12.2 (10.0.12.2): 56 data bytes
64 bytes from 10.0.12.2: seq=0 ttl=62 time=0.803 ms
root@ubuntuserver:~/flannel# docker exec -it b4d /bin/bashroot@b4d65fdc02a3:/usr/local/apache2# ip a1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
5: eth0@if6:  mtu 1450 qdisc noqueue state UP group default
   link/ether 02:42:0a:00:0c:02 brd ff:ff:ff:ff:ff:ff
   inet 10.0.12.2/24 brd 10.0.12.255 scope global eth0
      valid_lft forever preferred_lft forever
root@b4d65fdc02a3:/usr/local/apache2#root@b4d65fdc02a3:/usr/local/apache2#root@b4d65fdc02a3:/usr/local/apache2# ping 10.0.18.2PING 10.0.18.2 (10.0.18.2) 56(84) bytes of data.
64 bytes from 10.0.18.2: icmp_seq=1 ttl=62 time=0.794 ms
64 bytes from 10.0.18.2: icmp_seq=2 ttl=62 time=0.957 ms

此時的網絡數據包流向如圖:

如何搭建Flannel容器
詳解:Flannel安裝與配置詳解:Flannel安裝與配置

配置backend為host-gw

host-gw bakcend是flannel的另一個backend。與vxlan不同,host-gw不會封裝數據包,而是在主機的路由表中創建到其他主機的subnet的路由條目,從而實現容器網絡跨主機通信。需要說明的是,host-gw不能跨宿主機網絡通信,或者說跨宿主機網絡通信需要物理路由支持。

修改etcd如下:

etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "host-gw"}}'

重啟flanneld與docker:

systemctl restart flanneld docker

可以在宿主機上查看到路由條目:

root@ubuntu:~# ip routedefault via 192.168.198.2 dev ens33 proto dhcp metric 100
10.0.12.0/24 via 192.168.198.130 dev ens33
10.0.18.0/24 dev docker0 proto kernel scope link src 10.0.18.1 linkdown
169.254.0.0/16 dev ens33 scope link metric 1000
192.168.198.0/24 dev ens33 proto kernel scope link src 192.168.198.133 metric 100

以上是“如何搭建Flannel容器”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

当涂县| 涟源市| 许昌市| 萝北县| 长子县| 西昌市| 常德市| 璧山县| 鄂托克旗| 运城市| 双牌县| 舞钢市| 达孜县| 宜丰县| 稻城县| 股票| 扬中市| 阳西县| 东兰县| 富川| 柯坪县| 体育| 仁怀市| 华坪县| 谢通门县| 榆林市| 泸州市| 临颍县| 樟树市| 乌拉特后旗| 宁国市| 马公市| 南丹县| 瓦房店市| 德钦县| 田东县| 石林| 茌平县| 育儿| 鄂托克前旗| 囊谦县|