Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)
Энэ бол миний шинэчлэл өмнөх жишиг, одоо 1.14 оны 2019-р сарын байдлаар хамгийн сүүлийн үеийн CNI хувилбартай Kubernetes XNUMX дээр ажиллаж байна.

Юуны өмнө би Cilium-ийн багт баярлалаа гэж хэлмээр байна: залуус надад хэмжүүрийн хяналтын скриптүүдийг шалгаж, засахад тусалсан.

2018 оны арваннэгдүгээр сараас хойш юу өөрчлөгдсөн бэ

Үүнээс хойш юу өөрчлөгдсөнийг энд харуулав (хэрэв та сонирхож байвал):

Flannel нь хамгийн хурдан бөгөөд энгийн CNI интерфейс хэвээр байгаа ч сүлжээний бодлого, шифрлэлтийг дэмждэггүй.

Романаг дэмжихээ больсон тул бид үүнийг жишиг үзүүлэлтээс хассан.

WeaveNet одоо нэвтрэх болон гарах сүлжээний бодлогыг дэмждэг! Гэхдээ бүтээмж буурсан.

Calico дээр та хамгийн сайн гүйцэтгэлтэй байхын тулд хамгийн их пакетийн хэмжээг (MTU) гараар тохируулах шаардлагатай хэвээр байна. Calico нь CNI суулгах хоёр сонголтыг санал болгодог тул та тусдаа ETCD агуулахгүйгээр хийх боломжтой.

  • Kubernetes API дахь төлөвийг өгөгдлийн сан болгон хадгалах (кластерын хэмжээ < 50 зангилаа);
  • K8S API дээрх ачааллыг хөнгөвчлөхийн тулд Typha прокси бүхий мэдээллийн сан болгон Kubernetes API-д төлөвийг хадгалах (кластерын хэмжээ > 50 зангилаа).

Calico дэмжлэг үзүүлэхээ зарлав хэрэглээний түвшний бодлого програмын түвшний аюулгүй байдлын үүднээс Istio-ийн орой дээр.

Cilium одоо шифрлэлтийг дэмждэг! Cilium нь IPSec туннелээр шифрлэлтийг хангадаг бөгөөд шифрлэгдсэн WeaveNet сүлжээний өөр хувилбарыг санал болгодог. Гэхдээ WeaveNet нь шифрлэлтийг идэвхжүүлсэн Cilium-аас хурдан юм.

Суурилуулсан ETCD операторын ачаар Cilium-ийг ашиглахад хялбар болсон.

Cilium баг санах ойн зарцуулалт болон CPU-ийн зардлыг бууруулах замаар CNI-ийн жинг багасгахыг оролдсон боловч өрсөлдөгчид нь арай хөнгөн хэвээр байна.

Жишиг контекст

Жишиг нь 10 Гб Supermicro шилжүүлэгчтэй гурван виртуалчлагдаагүй Supermicro сервер дээр ажилладаг. Серверүүд нь идэвхгүй DAC SFP+ кабелиар дамжуулан шилжүүлэгчтэй шууд холбогддог бөгөөд jumbo хүрээтэй (MTU 9000) ижил VLAN дээр тохируулагдсан байдаг.

Kubernetes 1.14.0 нь Ubuntu 18.04 LTS дээр Docker 18.09.2 (энэ хувилбарын өгөгдмөл Docker хувилбар) дээр суулгасан.

Дахин давтагдах чадварыг сайжруулахын тулд бид үргэлж мастерийг эхний зангилаа дээр тохируулахаар шийдсэн бөгөөд жишиг тестийн серверийн хэсгийг хоёр дахь сервер дээр, үйлчлүүлэгчийн хэсгийг гурав дахь дээр байрлуулахаар шийдсэн. Үүнийг хийхийн тулд бид NodeSelector-ийг Kubernetes байршуулалтад ашигладаг.

Бид жишиг үр дүнг дараах масштабаар тайлбарлах болно.

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)

Жишиг үнэлгээний CNI сонгох

Энэ нь хэсэг дэх жагсаалтаас зөвхөн CNI-д зориулсан жишиг үзүүлэлт юм kubeadm ашиглан нэг мастер кластер үүсгэх тухай Kubernetes албан ёсны баримт бичгийг үзнэ үү. 9 CNI-ээс бид зөвхөн 6-г нь авна: бид суулгахад хэцүү ба/эсвэл баримт бичгийн дагуу (Romana, Contiv-VPP ба JuniperContrail/VolframFabric) тохируулгагүйгээр ажиллахгүй байгаа зүйлсийг хасна.

Бид дараах CNI-уудыг харьцуулах болно.

  • Calico v3.6
  • Canal v3.6 (үндсэндээ сүлжээний фланел + галт ханын хувьд Calico)
  • Cilium 1.4.2
  • Фланел 0.11.0
  • Kube чиглүүлэгч 0.2.5
  • WeaveNet 2.5.1

тохиргоо

CNI-г суулгахад хялбар байх тусам бидний анхны сэтгэгдэл илүү сайн байх болно. Бенчмаркийн бүх CNI-г суулгахад маш хялбар байдаг (нэг эсвэл хоёр тушаалаар).

Бидний хэлсэнчлэн серверүүд болон шилжүүлэгч нь jumbo фреймийг идэвхжүүлсэнээр тохируулагдсан (бид MTU-г 9000 болгож тохируулсан). Хэрэв CNI нь адаптеруудын тохиргоонд үндэслэн MTU-г автоматаар тодорхойлдог бол бид баяртай байх болно. Гэсэн хэдий ч зөвхөн Cilium болон Flannel нар үүнийг удирдаж чадсан. Бусад CNI-ууд нь GitHub дээр MTU-ийн автомат илрүүлэлтийг нэмэх хүсэлттэй байгаа ч бид Calico, Canal болон Kube-router-д зориулсан ConfigMap-г өөрчлөх эсвэл WeaveNet-д орчны хувьсагчийг дамжуулах замаар үүнийг гараар тохируулах болно.

Буруу MTU-ийн асуудал юу вэ? Энэхүү диаграмм нь анхдагч MTU-тай WeaveNet болон jumbo хүрээг идэвхжүүлсэн хоёрын ялгааг харуулж байна:

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)
MTU дамжуулах чадварт хэрхэн нөлөөлдөг вэ?

MTU нь гүйцэтгэлд хэр чухал болохыг бид харсан, одоо манай CNI үүнийг хэрхэн автоматаар тодорхойлохыг харцгаая.

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)
CNI нь MTU-г автоматаар илрүүлдэг

Графикаас харахад та MTU-г Calico, Canal, Kube-router болон WeaveNet-д тохируулах шаардлагатайг харуулж байна. Cilium болон Flannel нар MTU-г ямар ч тохиргоогүйгээр өөрсдөө зөв тодорхойлж чадсан.

Аюулгүй байдал

Бид CNI аюулгүй байдлыг хоёр талаас нь харьцуулах болно: дамжуулсан өгөгдлийг шифрлэх чадвар, Кубернетес сүлжээний бодлогыг хэрэгжүүлэх (баримт бичигт бус бодит туршилт дээр үндэслэсэн).

Зөвхөн хоёр CNI нь өгөгдлийг шифрлэдэг: Cilium болон WeaveNet. Шифрлэлт WeaveNet шифрлэлтийн нууц үгийг CNI орчны хувьсагч болгон тохируулснаар идэвхжүүлсэн. IN баримт бичиг WeaveNet үүнийг нарийн төвөгтэй байдлаар тайлбарласан боловч бүх зүйл энгийн байдлаар хийгддэг. Шифрлэлт Килиум командууд, Kubernetes нууцыг үүсгэх, demonSet-ийг өөрчлөх замаар тохируулсан (WeaveNet-ээс арай илүү төвөгтэй боловч Cilium нь алхам алхмаар ажилладаг. зааварчилгаа).

Сүлжээний бодлогын хэрэгжилтийн хувьд тэд амжилтад хүрсэн Calico, Canal, Cilium болон WeaveNet, үүнд та орох болон гарах дүрмийг тохируулах боломжтой. Учир нь Кубе чиглүүлэгч зөвхөн Ingress-д зориулсан дүрэм журам байдаг, мөн Flannel Сүлжээний бодлого огт байхгүй.

Энд ерөнхий үр дүн байна:

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)
Аюулгүй байдлын гүйцэтгэлийн жишиг үр дүн

Бүтээмж

Энэхүү жишиг нь туршилт бүрийн дор хаяж гурван гүйлтийн дундаж дамжуулалтыг харуулдаг. Бид TCP болон UDP (iperf3 ашиглан), HTTP (Nginx болон curl-тай) эсвэл FTP (vsftpd болон curl-тай) зэрэг бодит програмуудын гүйцэтгэлийг шалгаж, эцэст нь SCP-д суурилсан шифрлэлт (клиент болон сервер OpenSSH ашиглан) ашиглан програмын гүйцэтгэлийг шалгадаг.

Бүх туршилтын хувьд бид CNI-ийн гүйцэтгэлийг эх сүлжээний гүйцэтгэлтэй харьцуулахын тулд нүцгэн металл жишиг (ногоон шугам) хийсэн. Энд бид ижил масштабыг ашигладаг, гэхдээ өнгөт:

  • Шар = маш сайн
  • Улбар шар = сайн
  • Цэнхэр = тийм
  • Улаан = муу

Бид буруу тохируулсан CNI-г авахгүй бөгөөд зөвхөн зөв MTU-тай CNI-ийн үр дүнг харуулах болно. (Тэмдэглэл: Хэрэв та шифрлэлтийг идэвхжүүлбэл Cilium нь MTU-г зөв тооцоолохгүй тул та 8900 хувилбарт MTU-г гараар 1.4 болгон бууруулах шаардлагатай болно. Дараагийн хувилбар 1.5 нь үүнийг автоматаар хийдэг.)

Үр дүн нь энд байна:

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)
TCP гүйцэтгэл

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

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)
UDP гүйцэтгэл

Энд ч гэсэн бүх CNI сайн ажиллаж байна. Шифрлэлттэй CNI бараг ижил үр дүнг харуулсан. Cilium нь өрсөлдөөнөөс бага зэрэг хоцорч байгаа ч энэ нь зөвхөн 2,3% нүцгэн металл учраас муу үр дүн биш юм. Зөвхөн Cilium болон Flannel нар өөрсдөө MTU-г зөв тодорхойлсон бөгөөд эдгээр нь нэмэлт тохиргоогүйгээр тэдний үр дүн гэдгийг бүү мартаарай.

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)

Бодит хэрэглээний талаар юу хэлэх вэ? Таны харж байгаагаар HTTP-ийн ерөнхий гүйцэтгэл TCP-ээс арай доогуур байна. Хэдийгээр та HTTP-г TCP-тэй ашиглаж байсан ч бид HTTP жишигт нөлөөлөх удаан эхлэхээс зайлсхийхийн тулд TCP жишиг дээр iperf3-г тохируулсан. Энд бүгд сайн ажилласан. Kube-router нь тодорхой давуу талтай боловч WeaveNet сайн ажиллаагүй: нүцгэн металлаас 20 орчим хувиар муу. Шифрлэлттэй Cilium болон WeaveNet нар үнэхээр гунигтай харагдаж байна.

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)

TCP-д суурилсан өөр протокол болох FTP-ийн үр дүн өөр өөр байдаг. Flannel болон Kube-router энэ ажлыг гүйцэтгэдэг боловч Calico, Canal болон Cilium нь бага зэрэг хоцрогдсон бөгөөд нүцгэн металлаас 10 орчим хувиар удаан байдаг. WeaveNet 17%-иар хоцорч байгаа ч шифрлэгдсэн WeaveNet шифрлэгдсэн Cilium-аас 40%-иар илүү байна.

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)

SCP-ийн тусламжтайгаар бид SSH шифрлэлт ямар үнэтэй болохыг шууд харж чадна. Бараг бүх CNI сайн ажиллаж байгаа ч WeaveNet дахин хоцорч байна. Шифрлэлттэй Cilium болон WeaveNet нь давхар шифрлэлтийн (SSH + CNI) улмаас хамгийн муу байх төлөвтэй байна.

Үр дүн бүхий хураангуй хүснэгт энд байна:

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)

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

Одоо CNI нь их ачаалалтай (TCP дамжуулах үед, 10 Gbps) нөөцийг хэрхэн зарцуулдагийг харьцуулцгаая. Гүйцэтгэлийн туршилтанд бид CNI-ийг нүцгэн металлтай (ногоон шугам) харьцуулдаг. Нөөцийн хэрэглээний хувьд CNI-гүй цэвэр Kubernetes (ягаан шугам) харуулж, CNI хичнээн нэмэлт нөөцийг зарцуулж байгааг харцгаая.

Ой тогтоолтоос эхэлье. Дамжуулах явцад зангилааны RAM-ийн дундаж утгыг (буфер ба кэшийг оруулаагүй) МБ-д харуулав.

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)
Санах ойн хэрэглээ

Flannel болон Kube-router нь маш сайн үр дүнг харуулсан - ердөө 50 MB. Calico болон Canal тус бүр нь 70. WeaveNet нь бусдаасаа илүү их хэрэглээтэй байдаг - 130 MB, Cilium нь 400 хүртэл ашигладаг.
Одоо CPU-ийн зарцуулалтыг шалгая. Анхаарах зүйл: диаграммд хувиар биш, харин ppm, өөрөөр хэлбэл "нүцгэн төмрийн" хувьд 38 ppm нь 3,8% байна. Үр дүн нь энд байна:

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)
CPU-ийн хэрэглээ

Calico, Canal, Flannel болон Kube-router нь CPU-ийн хувьд маш үр дүнтэй байдаг - CNI-гүй Кубернетесээс ердөө 2% илүү. WeaveNet 5%-ийн нэмэлт орлоготойгоор хол хоцорч, Cilium 7%-иар удаалжээ.

Нөөцийн хэрэглээний хураангуйг энд харуулав.

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)

Үр дүн

Бүх үр дүнг харуулсан хүснэгт:

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)
Ерөнхий жишиг үр дүн

дүгнэлт

Сүүлийн хэсэгт би үр дүнгийн талаар субьектив бодлоо илэрхийлэх болно. Энэ жишиг нь маш жижиг кластер (3 зангилаа) дээр зөвхөн нэг холболтын нэвтрүүлэх чадварыг шалгадаг гэдгийг санаарай. Энэ нь том кластер (<50 зангилаа) эсвэл зэрэгцээ холболтод хамаарахгүй.

Би нөхцөл байдлаас хамааран дараах CNI-г ашиглахыг зөвлөж байна.

  • Танай кластерт байгаа юу цөөн нөөцтэй зангилаа (хэдэн ГБ RAM, хэд хэдэн цөм) бөгөөд танд хамгаалалтын функц хэрэггүй - сонгоно уу Flannel. Энэ бол хамгийн хэмнэлттэй CNI-ийн нэг юм. Мөн энэ нь олон төрлийн архитектурт нийцдэг (amd64, arm, arm64 гэх мэт). Нэмж дурдахад энэ нь MTU-г автоматаар тодорхойлох боломжтой хоёр (нөгөө нь Cilium) CNI-ийн нэг тул та юу ч тохируулах шаардлагагүй болно. Kube-router нь бас тохиромжтой, гэхдээ энэ нь стандарт биш бөгөөд та MTU-г гараар тохируулах шаардлагатай болно.
  • Шаардлагатай бол сүлжээг шифрлэх аюулгүй байдлын үүднээс авах WeaveNet. Хэрэв та jumbo хүрээ ашиглаж байгаа бол MTU хэмжээг зааж өгөхөө бүү мартаарай, мөн орчны хувьсагчаар нууц үг зааж шифрлэлтийг идэвхжүүлнэ үү. Гэхдээ гүйцэтгэлийн талаар мартсан нь дээр - энэ бол шифрлэлтийн зардал юм.
  • Хэрэгтэй хэвийн хэрэглээ би зөвлөж байна Калико. Энэхүү CNI нь Kubernetes-ийн төрөл бүрийн байршуулалтын хэрэгслүүдэд (Kops, Kubespray, Rancher гэх мэт) өргөн хэрэглэгддэг. WeaveNet-ийн нэгэн адил jumbo хүрээ ашиглаж байгаа бол ConfigMap дээр MTU-г тохируулахаа мартуузай. Энэ нь нөөцийн зарцуулалт, гүйцэтгэл, аюулгүй байдлын хувьд үр ашигтай, олон үйлдэлт хэрэгсэл юм.

Эцэст нь би танд хөгжлийг дагахыг зөвлөж байна Килиум. Энэхүү CNI нь бүтээгдэхүүн дээрээ маш их ажилладаг (онцлогууд, нөөцийн хэмнэлт, гүйцэтгэл, аюулгүй байдал, кластерчлал...) маш идэвхтэй багтай бөгөөд тэд маш сонирхолтой төлөвлөгөөтэй байдаг.

Kubernetes Network Plugin (CNI) 10 Gbps сүлжээний жишиг үр дүн (Шинэчилсэн: 2019 оны XNUMX-р сар)
CNI сонгох визуал диаграм

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

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