10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

TL, DR: Kube-Router болон Kube-OVN-ээс бусад бүх CNI нь байх ёстой байдлаараа ажилладаг бол MTU автомат илрүүлэлтийг эс тооцвол Calico нь хамгийн шилдэг нь юм.

Миний өмнөх шалгалтын нийтлэлийн шинэчлэл (2018 и 2019), туршилтын үеэр би Ubuntu 1.19 дээр Kubernetes 18.04-ийг 2020 оны XNUMX-р сарын байдлаар шинэчлэгдсэн CNI-той ашиглаж байна.

Бид хэмжигдэхүүн рүү орохоосоо өмнө ...

2019 оны дөрөвдүгээр сараас хойш шинэ зүйл юу байна?

  • Өөрийн кластер дээрээ тест хийх боломжтой: Та манай хэрэгслийг ашиглан өөрийн кластер дээрээ тест хийж болно Kubernetes Network Benchmark: кнб
  • Шинэ гишүүд гарч ирлээ
  • Шинэ хувилбарууд: Одоогийн шалгалтууд нь "Pod-to-Pod" сүлжээний гүйцэтгэлийн туршилтыг явуулдаг бөгөөд бодит нөхцөл байдалд ойртуулах туршилтуудыг явуулдаг "Pod-to-Service" шинэ скрипт нэмсэн. Практикт таны API бүхий Pod нь Pod IP хаягаар биш харин үндсэн үйлчилгээтэй ажилладаг (мэдээж бид TCP болон UDP хоёр хувилбарын аль алиныг нь шалгадаг).
  • Нөөцийн хэрэглээ: туршилт бүр өөрийн нөөцийн харьцуулалттай болсон
  • Хэрэглээний тестүүдийг устгах: Нийгэмлэг болон CNI-ийн засварлагчидтай хийсэн үр дүнтэй хамтын ажиллагааны үр дүнд CNI эхлүүлэх (Pod-ийн эхний хэдэн секунд) саатсаны улмаас TCP-ээс iperf үр дүн болон curl үр дүнгийн хооронд зөрүү байгааг олж илрүүлсэн тул бид HTTP, FTP болон SCP тестүүдийг хийхээ больсон. эхлүүлэх, энэ нь бодит нөхцөлд ердийн зүйл биш юм).
  • Нээлттэй эх сурвалж: бүх тестийн эх сурвалжууд (скриптүүд, yml тохиргоо болон анхны "түүхий" өгөгдөл) боломжтой энд

Лавлах туршилтын протокол

Протоколыг дэлгэрэнгүй тайлбарласан болно эндЭнэ нийтлэл нь үндсэн цөмтэй Ubuntu 18.04-ийн тухай гэдгийг анхаарна уу.

Үнэлгээнд зориулж CNI сонгох

Энэхүү туршилт нь нэг yaml файлаар тохируулсан CNI-г харьцуулах зорилготой (тиймээс VPP болон бусад скриптүүдээр суулгасан бүх програмыг хассан болно).

Харьцуулах зорилгоор манай сонгосон CNI-ууд:

  • Antrea v.0.9.1
  • Calico v3.16
  • Canal v3.16 (Flannel network + Calico Network Policies)
  • Cilium 1.8.2
  • Фланел 0.12.0
  • Хамгийн сүүлийн үеийн Kube чиглүүлэгч (2020-08-25)
  • WeaveNet 2.7.0

CNI-д зориулсан MTU-г тохируулж байна

Юуны өмнө бид MTU автомат илрүүлэлтийн TCP гүйцэтгэлд үзүүлэх нөлөөг шалгана.

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

MTU-ийн TCP гүйцэтгэлд үзүүлэх нөлөө

UDP ашиглах үед илүү том цоорхой гарч ирдэг:

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)
MTU-ийн UDP гүйцэтгэлд үзүүлэх нөлөө

Туршилтаар илэрсэн гүйцэтгэлийн асар их нөлөөллийг харгалзан бид CNI-ийн бүх ажилтнуудад итгэл найдварын захидал илгээхийг хүсч байна: CNI-д автомат MTU илрүүлэлтийг нэмнэ үү. Та зулзага, ганц эвэрт, тэр байтугай хамгийн хөөрхөн нь болох бяцхан Девопыг аврах болно.

Гэсэн хэдий ч, хэрэв та автомат MTU илрүүлэх дэмжлэггүйгээр CNI ашиглах шаардлагатай бол гүйцэтгэлийг авахын тулд гараар тохируулах боломжтой. Энэ нь Calico, Canal болон WeaveNet-д хамааралтай болохыг анхаарна уу.

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)
Дагалдан яваа CNI-д хандан миний бяцхан хүсэлт...

CNI тест: Түүхий өгөгдөл

Энэ хэсэгт бид CNI-ийг зөв MTU-тай харьцуулах болно (автоматаар тодорхойлох эсвэл гараар тохируулах). Энд байгаа гол зорилго бол түүхий өгөгдлийг графикаар харуулах явдал юм.

Өнгөний домог:

  • саарал - дээж (жишээ нь, нүцгэн төмөр)
  • ногоон - 9500 Mbps-ээс дээш зурвасын өргөн
  • шар - 9000 Mbps-ээс дээш зурвасын өргөн
  • улбар шар - 8000 Mbps-ээс дээш зурвасын өргөн
  • улаан - 8000 Mbps-ээс доош зурвасын өргөн
  • цэнхэр - төвийг сахисан (зурвасын өргөнтэй холбоогүй)

Ачаалалгүй нөөцийн хэрэглээ

Юуны өмнө кластер "унтаж" байх үед нөөцийн зарцуулалтыг шалгана уу.

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)
Ачаалалгүй нөөцийн хэрэглээ

Pod-to-Pod

Энэ хувилбарт үйлчлүүлэгч Pod нь IP хаягаа ашиглан серверийн Pod-той шууд холбогддог гэж үздэг.

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)
Pod-to-Pod хувилбар

TCP

Pod-to-Pod TCP үр дүн ба холбогдох нөөцийн хэрэглээ:

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

UDP

Pod-to-Pod UDP үр дүн ба холбогдох нөөцийн хэрэглээ:

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

Pod-to-Service

Энэ хэсэг нь бодит хэрэглээний тохиолдлуудад хамааралтай бөгөөд клиент Pod нь ClusterIP үйлчилгээгээр дамжуулан серверийн Pod-той холбогддог.

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)
Pod-to-Service скрипт

TCP

Pod-to-Service TCP үр дүн болон холбогдох нөөцийн хэрэглээ:

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

UDP

Pod-to-Service UDP үр дүн болон холбогдох нөөцийн хэрэглээ:

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

Сүлжээний бодлогын дэмжлэг

Дээр дурдсан бүхний дотроос улс төрийг дэмждэггүй цорын ганц хүн бол Фланел юм. Бусад нь дотогшоо болон гадагш чиглэсэн сүлжээний бодлогыг зөв хэрэгжүүлдэг. Сайн ажил!

CNI шифрлэлт

Шалгасан CNI-уудын дунд Pod хоорондын сүлжээний солилцоог шифрлэх боломжтой байдаг.

  • IPsec ашиглан Antrea
  • Calico утас хамгаалагч ашиглан
  • IPsec ашиглан Cilium
  • IPsec ашиглан WeaveNet

Зурвасын өргөн

Цөөхөн CNI үлдсэн тул бүх хувилбаруудыг нэг графикт оруулъя:

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

Нөөцийн хэрэглээ

Энэ хэсэгт бид TCP болон UDP дээр Pod-to-Pod холболтыг боловсруулахад ашигласан нөөцийг үнэлэх болно. Нэмэлт мэдээлэл өгөхгүй тул Pod-to-Service график зурах нь утгагүй юм.

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

Бүгдийг нь нийлүүлж байна

Бүх графикуудыг давтахыг хичээцгээе, бид энд бага зэрэг субьектив байдлыг нэвтрүүлж, бодит утгыг "vwry fast", "бага" гэх мэт үгсээр сольсон.

10G сүлжээгээр дамжуулан Kubernetes-ийн CNI гүйцэтгэлийн үнэлгээ (2020 оны XNUMX-р сар)

Дүгнэлт ба миний дүгнэлт

Би үр дүнгийн талаархи өөрийн тайлбарыг хүргэж байгаа тул энэ нь бага зэрэг субъектив юм.

Шинэ CNI гарч ирсэнд баяртай байна, Antrea сайн ажилласан, олон функцууд эхний хувилбаруудад ч хэрэгжсэн: автомат MTU илрүүлэх, шифрлэлт, хялбар суулгах.

Хэрэв бид гүйцэтгэлийг харьцуулж үзвэл Kube-OVN болон Kube-Router-ээс бусад бүх CNI сайн ажилладаг. Kube-Router нь мөн MTU-г илрүүлж чадаагүй тул би үүнийг баримт бичгийн аль ч хэсэгт тохируулах аргыг олсонгүй (энд Энэ сэдвээр хүсэлт нээлттэй байна).

Нөөцийн хэрэглээний хувьд Cilium нь бусадтай харьцуулахад илүү их RAM ашигладаг хэвээр байгаа ч үйлдвэрлэгч нь том кластеруудыг онилж байгаа нь гурван зангилааны кластер дээрх туршилттай адилгүй нь тодорхой юм. Kube-OVN нь CPU болон RAM-ийн нөөцийг их хэмжээгээр хэрэглэдэг боловч Open vSwitch дээр суурилсан залуу CNI юм (Antrea гэх мэт энэ нь илүү сайн ажиллаж, бага зарцуулдаг).

Фланелээс бусад нь сүлжээний бодлоготой. Зорилго нь уурын манжингаас энгийн тул тэр тэднийг хэзээ ч дэмжихгүй байх магадлалтай: хөнгөн байх тусмаа сайн.

Түүнчлэн, бусад зүйлсийн дунд шифрлэлтийн гүйцэтгэл нь гайхалтай юм. Calico бол хамгийн эртний CNI-ийн нэг боловч шифрлэлт хэдхэн долоо хоногийн өмнө нэмэгдсэн. Тэд IPsec-ийн оронд wireguard-ыг сонгосон бөгөөд энгийнээр хэлэхэд энэ нь туршилтын энэ хэсэгт бусад CNI-г бүрэн гүйцэд гүйцэлдүүлж, гайхалтай бөгөөд гайхалтай ажилладаг. Мэдээжийн хэрэг, нөөцийн хэрэглээ нь шифрлэлтийн улмаас нэмэгддэг, гэхдээ олж авсан дамжуулах чадвар нь үнэ цэнэтэй юм (Калико нь хоёрдугаарт ордог Cilium-тай харьцуулахад шифрлэлтийн туршилтыг зургаа дахин сайжруулсан). Түүнчлэн, та Calico-г кластерт суулгасны дараа хүссэн үедээ wireguard-г идэвхжүүлж болох бөгөөд хэрэв хүсвэл богино хугацаанд эсвэл бүрмөсөн идэвхгүй болгож болно. Энэ нь гайхалтай тохиромжтой, гэхдээ! Calico одоогоор MTU-г автоматаар илрүүлэхгүй байгааг сануулж байна (энэ функцийг ирээдүйн хувилбаруудад ашиглахаар төлөвлөж байна) тиймээс хэрэв таны сүлжээ Jumbo Frames (MTU 9000) дэмждэг бол MTU-г тохируулахаа мартуузай.

Бусад зүйлсийн дотор Cilium нь кластерийн зангилааны хооронд (зөвхөн Pod хооронд биш) траффикийг шифрлэх боломжтой бөгөөд энэ нь нийтийн кластерийн зангилаанд маш чухал байж болохыг анхаарна уу.

Дүгнэж хэлэхэд би дараах тохиолдлуудыг ашиглахыг санал болгож байна.

  • Маш жижиг кластерт CNI хэрэгтэй ЭСВЭЛ надад хамгаалалт хэрэггүй: хамтран ажиллах Flannel, хамгийн хөнгөн бөгөөд тогтвортой CNI (Тэр бол хамгийн эртний хүмүүсийн нэг бөгөөд домогт түүнийг Хомо Кубернаутус эсвэл Хомо Контайторус зохион бүтээсэн.). Та бас хамгийн ухаалаг төслийг сонирхож магадгүй юм кХНУМХ, шалгана уу!
  • Ердийн кластерт CNI хэрэгтэй: Калико - таны сонголт, гэхдээ шаардлагатай бол MTU-г тохируулахаа бүү мартаарай. Та сүлжээний бодлоготой хялбар бөгөөд байгалийн жамаар тоглох, шифрлэлтийг асаах, унтраах гэх мэт боломжтой.
  • (маш) том хэмжээний кластерт CNI хэрэгтэй: За, тест нь том кластеруудын зан төлөвийг харуулахгүй байна, би тест хийхдээ баяртай байх болно, гэхдээ бидэнд 10Gbps холболттой хэдэн зуун сервер байхгүй байна. Тиймээс хамгийн сайн сонголт бол хамгийн багадаа Calico болон Cilium ашиглан өөрийн зангилаанууд дээр өөрчилсөн тестийг ажиллуулах явдал юм.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх