背景
如果根據(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)證一下。