日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

calico的两种网络模式BGP和IP-IP性能分析

發(fā)布時間:2024/2/28 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 calico的两种网络模式BGP和IP-IP性能分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目前使用較多的網(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。