Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)
Bu mening yangilanishim oldingi benchmark, hozirda Kubernetes 1.14 da 2019 yil aprel holatiga ko'ra so'nggi CNI versiyasi bilan ishlaydi.

Avvalo, men Cilium jamoasiga minnatdorchilik bildirmoqchiman: bolalar menga o'lchovlarni kuzatish skriptlarini tekshirish va tuzatishga yordam berishdi.

2018 yil noyabr oyidan beri nima o'zgardi

O'shandan beri nima o'zgardi (agar qiziqsangiz):

Flanel eng tez va eng oddiy CNI interfeysi bo'lib qolmoqda, ammo tarmoq siyosati va shifrlashni qo'llab-quvvatlamaydi.

Romana endi qo'llab-quvvatlanmaydi, shuning uchun biz uni benchmarkdan olib tashladik.

WeaveNet endi kirish va chiqish uchun tarmoq siyosatlarini qo'llab-quvvatlaydi! Ammo hosildorlik pasaygan.

Calico'da siz hali ham eng yaxshi ishlash uchun maksimal paket hajmini (MTU) qo'lda sozlashingiz kerak. Calico CNI-ni o'rnatish uchun ikkita variantni taklif qiladi, shuning uchun siz alohida ETCD omborisiz qilishingiz mumkin:

  • Kubernetes API-dagi holatni ma'lumotlar ombori sifatida saqlash (klaster hajmi < 50 tugun);
  • K8S API dagi yukni engillashtirish uchun Kubernetes API holatini Typha proksi-serveriga ega ma'lumotlar ombori sifatida saqlash (klaster hajmi > 50 tugun).

Calico qo'llab-quvvatlashni e'lon qildi dastur darajasidagi siyosatlar Ilova darajasidagi xavfsizlik uchun Istio tepasida.

Cilium endi shifrlashni qo'llab-quvvatlaydi! Cilium IPSec tunnellari bilan shifrlashni ta'minlaydi va shifrlangan WeaveNet tarmog'iga muqobil taklif qiladi. Ammo WeaveNet shifrlash yoqilgan Cilium-dan tezroq.

O'rnatilgan ETCD operatori tufayli endi Ciliumni joylashtirish osonroq.

Cilium jamoasi xotira sarfini va protsessor xarajatlarini kamaytirish orqali o'zining CNI-dan biroz og'irlikni kamaytirishga harakat qildi, ammo uning raqobatchilari hali ham engilroq.

Benchmark konteksti

Benchmark 10 Gb Supermicro kalitiga ega uchta virtuallashtirilmagan Supermicro serverlarida ishlaydi. Serverlar passiv DAC SFP+ kabellari orqali to'g'ridan-to'g'ri kommutatorga ulanadi va jumbo ramkalar (MTU 9000) bilan bir xil VLAN-da sozlangan.

Kubernetes 1.14.0 Ubuntu 18.04 LTS da Docker 18.09.2 bilan oʻrnatilgan (ushbu versiyadagi standart Docker versiyasi).

Qayta ishlab chiqarishni yaxshilash uchun biz har doim birinchi tugunda masterni sozlashga qaror qildik, benchmarkning server qismini ikkinchi serverga va mijoz qismini uchinchisiga joylashtirishga qaror qildik. Buning uchun biz Kubernetes joylashtirishlarida NodeSelector-dan foydalanamiz.

Benchmark natijalarini quyidagi shkala bo'yicha tavsiflaymiz:

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)

Benchmark uchun CNI tanlash

Bu bo'limdagi ro'yxatdagi faqat CNI uchun ko'rsatkichdir kubeadm bilan bitta asosiy klaster yaratish haqida Rasmiy Kubernetes hujjatlariga qarang. 9 ta CNIdan faqat 6 tasini olamiz: hujjatlarga (Romana, Contiv-VPP va JuniperContrail/TungstenFabric) muvofiq o'rnatish qiyin va/yoki konfiguratsiyasiz ishlamaydiganlarini chiqarib tashlaymiz.

Biz quyidagi CNIlarni solishtiramiz:

  • Calico v3.6
  • Canal v3.6 (asosan tarmoq uchun Flanel + xavfsizlik devori sifatida Calico)
  • Cilium 1.4.2
  • Flanel 0.11.0
  • Kube-router 0.2.5
  • WeaveNet 2.5.1

sozlama

CNI-ni o'rnatish qanchalik oson bo'lsa, bizning birinchi taassurotimiz shunchalik yaxshi bo'ladi. Benchmarkdagi barcha CNI-larni o'rnatish juda oson (bir yoki ikkita buyruq bilan).

Aytganimizdek, serverlar va kalitlar jumbo ramkalar yoqilgan holda sozlangan (biz MTU ni 9000 ga o'rnatdik). Agar CNI adapterlar konfiguratsiyasi asosida MTU ni avtomatik ravishda aniqlasa, xursand bo'lardik. Biroq, faqat Cilium va Flannel buni uddalashdi. Qolgan CNI'lar GitHub'da avtomatik MTU kashfiyoti qo'shish uchun so'rovlarga ega, ammo biz uni Calico, Canal va Kube-router uchun ConfigMapni o'zgartirish yoki WeaveNet uchun muhit o'zgaruvchisini o'tkazish orqali qo'lda sozlaymiz.

Noto'g'ri MTU bilan bog'liq muammo nima? Ushbu diagramma standart MTU bilan WeaveNet va jumbo ramkalar yoqilgan o'rtasidagi farqni ko'rsatadi:

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)
MTU parametri o'tkazish qobiliyatiga qanday ta'sir qiladi?

Biz MTU ishlash uchun qanchalik muhimligini ko'rdik, endi keling, bizning CNI buni avtomatik ravishda qanday aniqlashini ko'rib chiqaylik:

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)
CNI avtomatik ravishda MTU ni aniqlaydi

Grafik MTU ni optimal ishlash uchun Calico, Canal, Kube-router va WeaveNet uchun sozlashingiz kerakligini ko'rsatadi. Cilium va Flannel hech qanday sozlamalarsiz MTUni o'zlari to'g'ri aniqlashga muvaffaq bo'lishdi.

Xavfsizlik

Biz CNI xavfsizligini ikki jihatda taqqoslaymiz: uzatilgan ma'lumotlarni shifrlash qobiliyati va Kubernetes tarmoq siyosatini amalga oshirish (hujjatlarga emas, haqiqiy testlarga asoslangan).

Faqat ikkita CNI ma'lumotlarni shifrlaydi: Cilium va WeaveNet. Shifrlash WeaveNet CNI muhit o'zgaruvchisi sifatida shifrlash parolini o'rnatish orqali yoqilgan. IN hujjatlar WeaveNet buni murakkab tarzda tasvirlaydi, ammo hamma narsa oddiygina amalga oshiriladi. Shifrlash Silium buyruqlar, Kubernetes sirlarini yaratish va daemonSet-ni o'zgartirish orqali sozlangan (WeaveNet-ga qaraganda biroz murakkabroq, ammo Cilium-da bosqichma-bosqich ko'rsatmalar).

Tarmoq siyosatini amalga oshirishga kelsak, ular muvaffaqiyatga erishdilar Calico, Canal, Cilium va WeaveNet, unda siz kirish va chiqish qoidalarini sozlashingiz mumkin. Uchun Kube-router faqat kirish uchun qoidalar bor, va Flanel Tarmoq siyosati umuman yo'q.

Mana umumiy natijalar:

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)
Xavfsizlik samaradorligini baholash natijalari

unumdorlik

Ushbu benchmark har bir sinovning kamida uchta bosqichida o'rtacha o'tkazish qobiliyatini ko'rsatadi. Biz TCP va UDP (iperf3 yordamida), HTTP (Nginx va curl bilan) yoki FTP (vsftpd va curl bilan) kabi haqiqiy ilovalar va nihoyat SCP-ga asoslangan shifrlash (mijoz va server OpenSSH yordamida) yordamida dastur ish faoliyatini sinovdan o'tkazamiz.

Barcha testlar uchun biz CNI ish faoliyatini mahalliy tarmoq ishlashi bilan solishtirish uchun yalang'och metall mezonini (yashil chiziq) o'tkazdik. Bu erda biz bir xil o'lchovdan foydalanamiz, lekin rangli:

  • Sariq = juda yaxshi
  • Apelsin = yaxshi
  • Moviy = shunday
  • Qizil = yomon

Biz noto'g'ri sozlangan CNI'larni olmaymiz va faqat to'g'ri MTU bilan CNI'lar uchun natijalarni ko'rsatamiz. (Eslatma: Agar shifrlashni yoqsangiz, Cilium MTU ni to‘g‘ri hisoblamaydi, shuning uchun siz 8900-versiyada MTUni qo‘lda 1.4 ga kamaytirishingiz kerak bo‘ladi. Keyingi versiya, 1.5, buni avtomatik ravishda bajaradi.)

Mana natijalar:

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)
TCP ishlashi

Barcha CNIlar TCP benchmarkida yaxshi ishladilar. Shifrlash bilan CNI ancha orqada qolmoqda, chunki shifrlash qimmat.

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)
UDP ishlashi

Bu erda ham barcha CNIs yaxshi ishlamoqda. Shifrlash bilan CNI deyarli bir xil natijani ko'rsatdi. Cilium raqobatchilardan bir oz orqada, lekin u faqat 2,3% yalang'och metall, shuning uchun bu yomon natija emas. Shuni unutmangki, faqat Cilium va Flannel MTUni o'zlari to'g'ri aniqladilar va bu hech qanday qo'shimcha konfiguratsiyasiz ularning natijalari.

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)

Haqiqiy dastur haqida nima deyish mumkin? Ko'rib turganingizdek, HTTP uchun umumiy unumdorlik TCPga qaraganda bir oz pastroq. TCP bilan HTTP dan foydalansangiz ham, HTTP ko'rsatkichiga ta'sir qiladigan sekin ishga tushmaslik uchun TCP benchmarkida iperf3 ni sozladik. Bu yerda hamma yaxshi ish qildi. Kube-router aniq afzalliklarga ega, ammo WeaveNet yaxshi ishlamadi: yalang'och metalldan taxminan 20% yomonroq. Shifrlangan Cilium va WeaveNet juda achinarli ko'rinadi.

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)

TCP-ga asoslangan boshqa protokol FTP bilan natijalar farq qiladi. Flanel va Kube-router bu ishni bajaradi, lekin Calico, Canal va Cilium biroz orqada va yalang'och metalldan taxminan 10% sekinroq. WeaveNet 17% ga ortda qoldi, ammo shifrlangan WeaveNet shifrlangan Ciliumdan 40% oldinda.

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)

SCP yordamida biz SSH shifrlash qancha turadiganini darhol bilib olamiz. Deyarli barcha CNIs yaxshi ishlaydi, lekin WeaveNet yana orqada qolmoqda. Cilium va shifrlangan WeaveNet ikki tomonlama shifrlash (SSH + CNI) tufayli eng yomoni hisoblanadi.

Natijalar bilan umumiy jadval:

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)

Resurs iste'moli

Endi keling, CNI og'ir yuklar ostida resurslarni qanday iste'mol qilishini solishtiramiz (TCP uzatish paytida, 10 Gbit / s). Ishlash testlarida biz CNI ni yalang'och metall (yashil chiziq) bilan taqqoslaymiz. Resurslarni iste'mol qilish uchun keling, CNI holda sof Kubernetes (binafsha chiziq) ko'rsatamiz va CNI qancha qo'shimcha resurslarni iste'mol qilishini ko'raylik.

Xotiradan boshlaylik. Bu erda uzatish paytida tugunlarning RAMning o'rtacha qiymati (buferlar va keshdan tashqari) MBda.

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)
Xotira iste'moli

Flanel va Kube-router ajoyib natijalarni ko'rsatdi - atigi 50 MB. Calico va Canal har birida 70 bor. WeaveNet aniq boshqalardan ko'ra ko'proq iste'mol qiladi - 130 MB va Cilium 400 dan ko'proq foydalanadi.
Endi CPU vaqt sarfini tekshiramiz. E'tiborga molik: diagramma foizlarni emas, balki ppmni ko'rsatadi, ya'ni "yalang'och temir" uchun 38 ppm 3,8% ni tashkil qiladi. Mana natijalar:

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)
CPU iste'moli

Calico, Canal, Flannel va Kube-router protsessorda juda samarali - CNI bo'lmagan Kubernetesdan atigi 2% ko'proq. WeaveNet qo'shimcha 5% bilan ancha orqada qolmoqda, keyin esa Cilium 7%.

Resurs iste'moli haqida qisqacha ma'lumot:

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)

natijalar

Barcha natijalar bilan jadval:

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)
Umumiy ko'rsatkich natijalari

xulosa

Oxirgi qismda men natijalar bo'yicha sub'ektiv fikrimni bildiraman. Esda tutingki, ushbu benchmark faqat bitta ulanishning o'tkazuvchanligini juda kichik klasterda (3 tugun) tekshiradi. Katta klasterlarga (<50 tugun) yoki parallel ulanishlarga taalluqli emas.

Men stsenariyga qarab quyidagi CNI dan foydalanishni tavsiya qilaman:

  • Klasteringizda bormi kam resurslarga ega tugunlar (bir necha GB operativ xotira, bir nechta yadro) va sizga xavfsizlik xususiyatlari kerak emas - tanlang Flanel. Bu eng tejamkor CNIlardan biridir. Va u turli xil arxitekturalar (amd64, arm, arm64 va boshqalar) bilan mos keladi. Bundan tashqari, bu MTU ni avtomatik ravishda aniqlay oladigan ikkita (ikkinchisi Cilium) CNI dan biri, shuning uchun siz hech narsani sozlashingiz shart emas. Kube-router ham mos keladi, lekin u standart emas va siz MTU-ni qo'lda sozlashingiz kerak bo'ladi.
  • Agar kerak bo'lsa tarmoqni shifrlash xavfsizlik uchun, oling WeaveNet. Agar jumbo freymlardan foydalanayotgan bo'lsangiz, MTU o'lchamini belgilashni unutmang va muhit o'zgaruvchisi orqali parolni ko'rsatish orqali shifrlashni yoqing. Ammo ishlash haqida unutgan ma'qul - bu shifrlash narxi.
  • uchun normal foydalanish Sovetyuu Calico. Ushbu CNI turli xil Kubernetes o'rnatish vositalarida (Kops, Kubespray, Rancher va boshqalar) keng qo'llaniladi. WeaveNet-da bo'lgani kabi, jumbo ramkalardan foydalansangiz, ConfigMap-da MTU-ni sozlaganingizga ishonch hosil qiling. Bu resurslarni iste'mol qilish, ishlash va xavfsizlik nuqtai nazaridan samarali bo'lgan ko'p funktsiyali vositadir.

Va nihoyat, sizga rivojlanishni kuzatishingizni maslahat beraman Silium. Ushbu CNI o'z mahsulotida juda ko'p ishlaydigan juda faol jamoaga ega (xususiyatlar, resurslarni tejash, ishlash, xavfsizlik, klasterlash ...) va ular juda qiziqarli rejalarga ega.

Kubernetes Network Plugin (CNI) 10 Gbit / s tarmoqdan ortiq sinov natijalari (yangilangan: 2019 yil aprel)
CNI tanlash uchun vizual diagramma

Manba: www.habr.com

a Izoh qo'shish