calico的两种网络模式BGP和IP-IP性能分析
目前使用較多的網(wǎng)絡(luò)插件有 flannel,calico,canel等,但是如果對比以上幾種網(wǎng)絡(luò)插件的性能,還是calico最受歡迎
一、calico概述
二、性能評測指標(biāo)
三、物理機性能評測
四、物理機到pod之間的性能測評
五、pod到pod之間的性能測評
六、calico使用ipip網(wǎng)絡(luò)模式
七、calico使用bgp網(wǎng)絡(luò)模式
一、calico概述
1.calico介紹
Calico是一個純?nèi)龑拥木W(wǎng)絡(luò)插件,calico的bgp模式類似于flannel的host-gw
calico方便集成?OpenStack這種?IaaS云架構(gòu),為openstack虛擬機、容器、裸機提供多主機間通信。
2.calico原理
calico是一個純?nèi)龑拥奶摂M網(wǎng)絡(luò),它沒有復(fù)用docker的docker0網(wǎng)橋,而是自己實現(xiàn)的,?calico網(wǎng)絡(luò)不對數(shù)據(jù)包進行額外封裝,不需要NAT和端口映射,擴展性和性能都很好。Calico網(wǎng)絡(luò)提供了DockerDNS服務(wù), 容器之間可以通過hostname訪問,Calico在每一個計算節(jié)點利用LinuxKernel實現(xiàn)了一個高效的vRouter(虛擬路由)來負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā),它會為每個容器分配一個ip,每個節(jié)點都是路由,把不同host的容器連接起來,從而實現(xiàn)跨主機間容器通信。而每個vRouter通過BGP協(xié)議(邊界網(wǎng)關(guān)協(xié)議)負(fù)責(zé)把自己節(jié)點的路由信息向整個Calico網(wǎng)絡(luò)內(nèi)傳播——小規(guī)模部署可以直接互聯(lián),大規(guī)模下可通過指定的BGProute reflector來完成;Calico基于iptables還提供了豐富而靈活的網(wǎng)絡(luò)策略,保證通過各個節(jié)點上的ACLs來提供多租戶隔離、安全組以及其他可達性限制等功能。
3.calico網(wǎng)絡(luò)模式
1)IPIP
把一個IP數(shù)據(jù)包又套在一個IP包里,即把IP層封裝到IP層的一個?tunnel,它的作用其實基本上就相當(dāng)于一個基于IP層的網(wǎng)橋,一般來說,普通的網(wǎng)橋是基于mac層的,根本不需要IP,而這個ipip則是通過兩端的路由做一個tunnel,把兩個本來不通的網(wǎng)絡(luò)通過點對點連接起來;
calico以ipip模式部署完畢后,node上會有一個tunl0的網(wǎng)卡設(shè)備,這是ipip做隧道封裝用的,也是一種overlay模式的網(wǎng)絡(luò)。當(dāng)我們把節(jié)點下線,calico容器都停止后,這個設(shè)備依然還在,執(zhí)行?rmmodipip命令可以將它刪除。
2)BGP
邊界網(wǎng)關(guān)協(xié)議(BorderGateway Protocol, BGP)是互聯(lián)網(wǎng)上一個核心的去中心化的自治路由協(xié)議。它通過維護IP路由表或‘前綴’表來實現(xiàn)自治系統(tǒng)(AS)之間的可達性,屬于矢量路由協(xié)議。BGP不使用傳統(tǒng)的內(nèi)部網(wǎng)關(guān)協(xié)議(IGP)的指標(biāo),而是基于路徑、網(wǎng)絡(luò)策略或規(guī)則集來決定路由。因此,它更適合被稱為矢量性協(xié)議,而不是路由協(xié)議,通俗的說就是將接入到機房的多條線路(如電信、聯(lián)通、移動等)融合為一體,實現(xiàn)多線單IP;
BGP?機房的優(yōu)點:服務(wù)器只需要設(shè)置一個IP地址,最佳訪問路由是由網(wǎng)絡(luò)上的骨干路由器根據(jù)路由跳數(shù)與其它技術(shù)指標(biāo)來確定的,不會占用服務(wù)器的任何系統(tǒng);
官方提供的calico.yaml模板里,默認(rèn)打開了ip-ip功能,該功能會在node上創(chuàng)建一個設(shè)備tunl0,容器的網(wǎng)絡(luò)數(shù)據(jù)會經(jīng)過該設(shè)備被封裝一個ip頭再轉(zhuǎn)發(fā)。這里,calico.yaml中通過修改calico-node的環(huán)境變量:CALICO_IPV4POOL_IPIP來實現(xiàn)ipip功能的開關(guān):默認(rèn)是Always,表示開啟;Off表示關(guān)閉ipip。
二、性能評測指標(biāo)
1.ping延遲: 用ping測試hosts之間和pods之間的延遲
2.帶寬測試: 用iperf測試hosts之間和pods之間的帶寬
3.HTTP性能測試: 部署單進程nginx server并使用apache benchmark(ab)測試
三、物理機性能評測
1.ping延遲:
登錄到master1節(jié)點,運行ping master2 測試延遲
通過下面的腳本例子計算ping延遲的平均值
| 1 | ping master2 | head -n 20 | gawk'/time/ {split($8, ss, "="); sum+=ss[2]; count+=1;} END{print sum/count "ms";}' |
?結(jié)論:相互之間多次ping測試。延遲一般在60-64ms
2.iperf帶寬:
(1)查看物理機帶寬
登錄到master1節(jié)點
ethtool ens160
上面可以看到物理機帶寬為萬兆
(2)用iperf開始測試帶寬
登陸到master1和master2節(jié)點,安裝iperf,yum install iperf -y
在master2上啟動iperf服務(wù)
iperf server:iperf -s ? ? ? ? ? 顯示如下:
在master1上啟動客戶端命令:
iperf -c master2 -i 1
?
iperf -c master2 -u -t 60 -b 1000M
iperf -c master2 -u -t 60 -b 2000M
結(jié)論:物理機iperf帶寬4.51 Gbits/sec
3.nginx benchmark
在master1節(jié)點運行一個nginx的pod
docker run --name nginx-test -p 8050:80 nginx
在master2節(jié)點通過ab進行壓測
| 1 | ab -n 90000 -c 50 http://172.16.0.1:8050/ |
?四、物理機到pod之間的性能測評
1.帶寬
測試master1到node3節(jié)點上的pod之間的帶寬
運行一個iperf3的pod
kubectl run iperf3 --image=networkstatic/iperf3 --replicas=3 -- iperf3 -s
kubectl ?get ?pods ?-o wide ?
iperf3 -c 10.244.5.149 -i 1
結(jié)論:master1和node3上的pod之間的帶寬是4.06Gbits/s
五、pod到pod之間的性能測評
1.帶寬
測試node3上的pod到node2上的pod的帶寬
登錄到node3上的pod
kubectl exec -it iperf3-57d88c87b4-89kxw -- /bin/sh
iperf3 -c 10.244.4.213 -i 1
結(jié)論:node3上的pod和node2上的pod之間的帶寬是5.40Gbits/s
六、calico使用ipip網(wǎng)絡(luò)模式
1.測試帶寬,測試10次取平均值:
(1) 物理機到物理機/master1------>master2
在master2上 ?iperf3 -s
在master1上執(zhí)行測試腳本:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | cat iperftest.sh ? #!/bin/bash ? for i in {1..10}; do if ["$i" -eq"1" ] then iperf3 -c master2? > iperf3data else iperf3 -c master2? >> iperf3data fi done cat iperf3data | grep sender | awk'{print $7}' > sender cat iperf3data | grep receiver | awk'{print $7}' > receiver awk'{sum += $1};END {print "sender Avg= ",sum/NR}' sender awk'{sum += $1};END {print "receiver Avg= ",sum/NR}' receiver |
結(jié)論:
sender Avg= ?5.07
receiver Avg= ?5.068
(2)物理機到pod/master1------>node3上的pod(pod:iperf3-57d88c87b4-89kxw ? ip:10.244.5.149)
在master1上執(zhí)行測試腳本:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cat iperftest.sh ? #!/bin/bash for i in {1..10}; do if ["$i" -eq"1" ] then iperf3 -c 10.244.5.149? > iperf3data else iperf3 -c 10.244.5.149? >> iperf3data fi done cat iperf3data | grep sender | awk'{print $7}' > sender cat iperf3data | grep receiver | awk'{print $7}' > receiver awk'{sum += $1};END {print "sender Avg= ",sum/NR}' sender awk'{sum += $1};END {print "receiver Avg= ",sum/NR}' receiver |
結(jié)論:
sender Avg= ?4.436
receiver Avg= ?4.435
(3).pod到pod/node3節(jié)點pod((pod:iperf3-57d88c87b4-89kxw ? ip:10.244.5.149))------>node2上的pod(pod:iperf3-57d88c87b4-fmkcj ? ip:10.244.4.213 )
在node3的pod上執(zhí)行測試腳本:
kubectl ?exec ?-it iperf3-57d88c87b4-89kxw ?-- /bin/sh
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cat iperftest.sh ? #!/bin/bash for i in {1..10}; do if ["$i" -eq"1" ] then iperf3 -c 10.244.4.213? > iperf3data else iperf3 -c 10.244.4.213? >> iperf3data fi done cat iperf3data | grep sender | awk'{print $7}' > sender cat iperf3data | grep receiver | awk'{print $7}' > receiver awk'{sum += $1};END {print "sender Avg= ",sum/NR}' sender awk'{sum += $1};END {print "receiver Avg= ",sum/NR}' receiver |
結(jié)論:
sender Avg= ?4.76
receiver Avg= ?4.75889
2.測試ping延時,測試20次取平均值:
(1).物理機到物理機/master1------>master2
登錄到master1節(jié)點,運行ping master2 測試延時
通過下面的腳本例子計算ping延遲的平均值
ping master2 | head -n 20 | gawk '/time/ {split($8, ss, "="); sum+=ss[2]; count+=1;} END{print sum/count "ms";}'
結(jié)論:多次ping取平均值,延遲一般在0.189158ms
(2).物理機到pod/master1------>node3上的pod(pod:iperf3-57d88c87b4-89kxw ? ip:10.244.5.149)
ping 10.244.5.149 | head -n 20 | gawk '/time/ {split($7, ss, "="); sum+=ss[2]; count+=1;} END{print sum/count "ms";}'
結(jié)論:多次ping取平均值,延遲一般在0.297368ms
(3).pod到pod/node3節(jié)點pod((pod:iperf3-57d88c87b4-89kxw ? ip:10.244.5.149))------>node2上的pod(pod:iperf3-57d88c87b4-fmkcj ? ip:10.244.4.213 )
kubectl exec -it iperf3-57d88c87b4-89kxw -- /bin/bash
ping 10.244.4.213 | head -n 20 | awk '/time/ {split($7, ss, "="); sum+=ss[2]; count+=1;} END{print sum/count "ms";}'
結(jié)論:多次ping取平均值,延遲一般在0.312ms
七、calico使用bgp網(wǎng)絡(luò)模式
1.測試帶寬,測試10次取平均值:
(1).物理機到物理機/master1------>master2
在master2上 ?iperf3 -s
在master1上執(zhí)行測試腳本:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cat iperftest.sh ? #!/bin/bash for i in {1..10}; do if ["$i" -eq"1" ] then iperf3 -c master2? > iperf3data else iperf3 -c master2? >> iperf3data fi done cat iperf3data | grep sender | awk'{print $7}' > sender cat iperf3data | grep receiver | awk'{print $7}' > receiver awk'{sum += $1};END {print "sender Avg= ",sum/NR}' sender awk'{sum += $1};END {print "receiver Avg= ",sum/NR}' receiver |
結(jié)論:
sender Avg= ?5.081
receiver Avg= ?5.079
(2).物理機到pod/master1------>node3上的pod(pod:iperf3-57d88c87b4-wbpqn ? ip:10.244.5.156)
在master1上執(zhí)行測試腳本:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cat iperftest.sh ? #!/bin/bash for i in {1..10}; do if ["$i" -eq"1" ] then iperf3 -c 10.244.5.156? > iperf3data else iperf3 -c 10.244.5.156? >> iperf3data fi done cat iperf3data | grep sender | awk'{print $7}' > sender cat iperf3data | grep receiver | awk'{print $7}' > receiver awk'{sum += $1};END {print "sender Avg= ",sum/NR}' sender awk'{sum += $1};END {print "receiver Avg= ",sum/NR}' receiver |
結(jié)論:
sender Avg= ?4.679
receiver Avg= ?4.679
(3).pod--->pod
結(jié)論:跨節(jié)點pod之間不能通信
2.測試ping延時,測試20次取平均值:
(1).物理機到物理機/master1------>master2
登錄到master1節(jié)點,運行ping master2 測試延時
通過下面的腳本例子計算ping延遲的平均值
ping master2 | head -n 20 | gawk '/time/ {split($8, ss, "="); sum+=ss[2]; count+=1;} END{print sum/count "ms";}'
結(jié)論:多次ping取平均值,延遲一般在0.188842ms
(2).物理機到pod/master1------>node3上的pod(pod:iperf3-57d88c87b4-wbpqn ? ip:10.244.5.156)
ping 10.244.5.156 | head -n 20 | gawk '/time/ {split($7, ss, "="); sum+=ss[2]; count+=1;} END{print sum/count "ms";}'
結(jié)論:多次ping取平均值,延遲一般在0.268053ms
(3).pod到pod節(jié)點
結(jié)論:跨節(jié)點pod之間不能通信
?上述兩種網(wǎng)絡(luò)模式網(wǎng)絡(luò)性能總結(jié)表
結(jié)論:
calico使用BGP網(wǎng)絡(luò)模式通信網(wǎng)絡(luò)傳輸速率較好,但是跨節(jié)點后pod不能通信。
總結(jié)
以上是生活随笔為你收集整理的calico的两种网络模式BGP和IP-IP性能分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Anaconda 安装 Tensorfl
- 下一篇: 浅谈数据湖