flannel通信方式之VXLAN

背景

如果根據(jù)《K8S集群搭建——基于CentOS 7系統(tǒng)》配置flannel,那么backend通信方式默認(rèn)為UDP。這里就有一個(gè)問(wèn)題,通過(guò)UDP方式,數(shù)據(jù)包的轉(zhuǎn)發(fā)是在用戶態(tài),因此性能上會(huì)有損失,假如數(shù)據(jù)包的轉(zhuǎn)發(fā)能在內(nèi)核完成,這樣就能少一次數(shù)據(jù)報(bào)文的拷貝,性能也就能上去,這就是VXLAN通信方式。

配置vxlan backend

1、master節(jié)點(diǎn)

和之前類似,同樣使用etcdctl命令,增加對(duì)backend的定義,指定為vxlan即可,

etcdctl set /flannel/network/config '{"Network":"10.108.0.0/16","Backend": {"Type": "vxlan"}}'

這里我們?cè)O(shè)置flannel子網(wǎng)使用10.108網(wǎng)段。

設(shè)置完網(wǎng)絡(luò)配置后,重啟flanneld服務(wù)即可,同時(shí)因?yàn)閐ocker依賴于flannel網(wǎng)絡(luò),因此docker也需要重啟,但是要放到后面,

systemctl restart flanneld docker

兩者執(zhí)行內(nèi)容大致如下:

- flannel從etcd數(shù)據(jù)庫(kù)中獲取network的配置信息

- flannel劃分子網(wǎng)subnet,并在etcd中進(jìn)行注冊(cè)

- flannel將子網(wǎng)信息記錄到/run/flannel/subnet.env中

- docker啟動(dòng)時(shí)加載subnet.env中的網(wǎng)絡(luò)配置

因此,服務(wù)重啟后我們就能看到flannel.1這個(gè)網(wǎng)絡(luò)設(shè)備,以及docker0網(wǎng)橋的ip已經(jīng)處于我們配置的網(wǎng)段中。

[root@CentOS-7-4 ~]# ifconfig

docker0: flags=4099<UP,BROADCAST,MULTICAST>? mtu 1500

? ? ? ? inet 10.108.14.1? netmask 255.255.255.0? broadcast 0.0.0.0

? ? ? ? ether 02:42:5c:a0:56:f9? txqueuelen 0? (Ethernet)

? ? ? ? RX packets 0? bytes 0 (0.0 B)

? ? ? ? RX errors 0? dropped 0? overruns 0? frame 0

? ? ? ? TX packets 0? bytes 0 (0.0 B)

? ? ? ? TX errors 0? dropped 0 overruns 0? carrier 0? collisions 0

flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>? mtu 1450

? ? ? ? inet 10.108.14.0? netmask 255.255.255.255? broadcast 0.0.0.0

? ? ? ? inet6 fe80::1007:9aff:fe3d:2bda? prefixlen 64? scopeid 0x20<link>

? ? ? ? ether 12:07:9a:3d:2b:da? txqueuelen 0? (Ethernet)

? ? ? ? RX packets 0? bytes 0 (0.0 B)

? ? ? ? RX errors 0? dropped 0? overruns 0? frame 0

? ? ? ? TX packets 0? bytes 0 (0.0 B)

? ? ? ? TX errors 0? dropped 8 overruns 0? carrier 0? collisions 0

2、node節(jié)點(diǎn)

對(duì)于node節(jié)點(diǎn),同樣也是重啟flanneld和docker進(jìn)程即可,

systemctl restart flanneld docker

連通性測(cè)試

分別在兩個(gè)node上起一個(gè)容器,互相ping對(duì)方ip,能ping通即配置正常。

常見(jiàn)問(wèn)題

1、docker0網(wǎng)橋設(shè)備ip不在我們?cè)O(shè)置的網(wǎng)段

這一般就是沒(méi)有重啟docker導(dǎo)致的,或者沒(méi)有在flannel后重啟。

2、使用etcdctl命令更新flannel子網(wǎng)信息,重啟flannld進(jìn)程,配置不生效

CentOS 7自帶的flannel可能有些問(wèn)題,重啟服務(wù)確實(shí)無(wú)法更新配置,需要先將flannl.1這個(gè)網(wǎng)絡(luò)設(shè)備刪除,重啟后才會(huì)生效。

ip link del flannel.1;

systemctl restart flanneld docker

后續(xù)使用最版本的flannel驗(yàn)證一下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容