Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)
Iki nganyariku pathokan sadurunge, sing saiki mlaku ing Kubernetes 1.14 kanthi versi CNI paling anyar ing April 2019.

Kaping pisanan, aku pengin matur nuwun marang tim Cilium: wong lanang mbantu aku mriksa lan mbenerake skrip pemantauan metrik.

Apa sing wis owah wiwit November 2018

Mangkene sing diganti wiwit iku (yen sampeyan kasengsem):

Flanel tetep minangka antarmuka CNI sing paling cepet lan paling gampang, nanging isih ora ndhukung kabijakan lan enkripsi jaringan.

Romana ora didhukung maneh, mula kita wis mbusak saka pathokan.

WeaveNet saiki ndhukung kabijakan jaringan kanggo Ingress lan Egress! Nanging produktivitas wis suda.

Ing Calico, sampeyan isih kudu ngatur ukuran paket maksimum (MTU) kanthi manual kanggo kinerja sing paling apik. Calico nawakake rong pilihan kanggo nginstal CNI, supaya sampeyan bisa nindakake tanpa repositori ETCD sing kapisah:

  • nyimpen negara ing API Kubernetes minangka nyimpen data (ukuran kluster <50 simpul);
  • nyimpen negara ing Kubernetes API minangka nyimpen data karo Typha proxy kanggo ngredhakaké beban ing K8S API (ukuran kluster> 50 simpul).

Calico ngumumake dhukungan kabijakan tingkat aplikasi ing ndhuwur Istio kanggo keamanan tingkat aplikasi.

Cilium saiki ndhukung enkripsi! Cilium nyedhiyakake enkripsi karo terowongan IPSec lan nawakake alternatif kanggo jaringan WeaveNet sing dienkripsi. Nanging WeaveNet luwih cepet tinimbang Cilium kanthi enkripsi aktif.

Cilium saiki luwih gampang disebarake amarga operator ETCD sing dibangun.

Tim Cilium wis nyoba ngurangi bobot saka CNI kanthi ngurangi konsumsi memori lan biaya CPU, nanging pesainge isih luwih entheng.

Konteks pathokan

Patokan kasebut ditindakake ing telung server Supermicro non-virtual kanthi switch Supermicro 10 Gb. Server disambungake langsung menyang ngalih liwat pasif DAC SFP + kabel lan diatur ing VLAN padha karo pigura jumbo (MTU 9000).

Kubernetes 1.14.0 diinstal ing Ubuntu 18.04 LTS karo Docker 18.09.2 (versi Docker standar ing rilis iki).

Kanggo nambah reproducibility, kita mutusaké kanggo tansah ngatur master ing simpul pisanan, nyeleh bagean server pathokan ing server kapindho, lan bagean klien ing katelu. Kanggo nindakake iki, kita nggunakake NodeSelector ing penyebaran Kubernetes.

Kita bakal njlèntrèhaké asil benchmark ing skala ing ngisor iki:

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)

Milih CNI kanggo pathokan

Iki minangka pathokan mung kanggo CNI saka dhaptar ing bagean kasebut babagan nggawe siji kluster master karo kubeadm Deleng dokumentasi resmi Kubernetes. Saka 9 CNI, kita bakal njupuk mung 6: kita bakal ngilangi sing angel diinstal lan / utawa ora bisa digunakake tanpa konfigurasi miturut dokumentasi (Romana, Contiv-VPP lan JuniperContrail / TungstenFabric).

Kita bakal mbandhingake CNI ing ngisor iki:

  • Calico v3.6
  • Canal v3.6 (utamane Flanel kanggo jaringan + Calico minangka firewall)
  • Cilium 1.4.2
  • Flanel 0.11.0
  • Kube-router 0.2.5
  • WeaveNet 2.5.1

Instalasi

Sing luwih gampang dipasang CNI, luwih apik kesan pertama kita. Kabeh CNI saka pathokan gampang banget kanggo nginstal (karo siji utawa loro printah).

Nalika kita ngandika, server lan ngalih diatur karo pigura jumbo aktif (kita nyetel MTU kanggo 9000). Kita bakal seneng yen CNI kanthi otomatis nemtokake MTU adhedhasar konfigurasi adaptor. Nanging, mung Cilium lan Flanel sing ngatur iki. Liyane saka CNIs duwe panjalukan ing GitHub kanggo nambah panemuan MTU otomatis, nanging kita bakal ngatur kanthi manual kanthi ngganti ConfigMap kanggo Calico, Canal lan Kube-router, utawa liwat variabel lingkungan kanggo WeaveNet.

Apa masalah karo MTU sing salah? Diagram iki nuduhake prabédan antarane WeaveNet kanthi MTU standar lan pigura jumbo diaktifake:

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)
Kepiye MTU mengaruhi throughput?

Kita wis weruh sepira pentinge MTU kanggo kinerja, saiki ayo ndeleng kepiye CNI kanthi otomatis nemtokake:

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)
CNI kanthi otomatis ndeteksi MTU

Grafik nuduhake yen sampeyan kudu ngatur MTU kanggo Calico, Canal, Kube-router lan WeaveNet kanggo kinerja optimal. Cilium lan Flannel bisa nemtokake MTU kanthi bener tanpa setelan.

Keamanan

Kita bakal mbandhingake keamanan CNI ing rong aspek: kemampuan kanggo ndhelik data sing dikirim lan implementasine kabijakan jaringan Kubernetes (adhedhasar tes nyata, dudu dokumentasi).

Mung loro CNIs encrypt data: Cilium lan WeaveNet. Enkripsi WeaveNet diaktifake kanthi nyetel sandhi enkripsi minangka variabel lingkungan CNI. ING dokumentasi WeaveNet nggambarake kanthi cara sing rumit, nanging kabeh ditindakake kanthi gampang. Enkripsi cilium dikonfigurasi dening printah, nggawe rahasia Kubernetes, lan liwat modifikasi daemonSet (luwih rumit tinimbang ing WeaveNet, nanging Cilium duwe langkah-langkah dening-langkah. instruksi).

Kanggo implementasine kabijakan jaringan, dheweke wis sukses Calico, Canal, Cilium lan WeaveNet, ing ngendi sampeyan bisa ngatur aturan Ingress lan Egress. Kanggo Kube-router ana aturan mung kanggo Ingress, lan Flannel Ora ana kabijakan jaringan.

Mangkene asil sakabèhé:

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)
Asil Patokan Kinerja Safety

Produktivitas

Patokan iki nuduhake throughput rata-rata sajrone paling ora telung tes saben tes. Kita nguji kinerja TCP lan UDP (nggunakake iperf3), aplikasi nyata kaya HTTP (karo Nginx lan curl) utawa FTP (karo vsftpd lan curl) lan pungkasane kinerja aplikasi nggunakake enkripsi berbasis SCP (nggunakake klien lan server OpenSSH).

Kanggo kabeh tes, kita nindakake pathokan logam gundhul (garis ijo) kanggo mbandhingaké kinerja CNI karo kinerja jaringan native. Ing kene kita nggunakake skala sing padha, nanging kanthi warna:

  • Kuning = apik banget
  • Jeruk = apik
  • Biru = dadi
  • Abang = ala

Kita ora bakal njupuk CNI sing dikonfigurasi kanthi salah lan mung bakal nuduhake asil kanggo CNI kanthi MTU sing bener. (Cathetan: Cilium ora ngetung MTU kanthi bener yen sampeyan ngaktifake enkripsi, mula sampeyan kudu nyuda MTU kanthi manual dadi 8900 ing versi 1.4. Versi sabanjure, 1.5, nindakake iki kanthi otomatis.)

Mangkene asile:

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)
Kinerja TCP

Kabeh CNI nindakake kanthi apik ing pathokan TCP. CNI karo enkripsi lags adoh konco amarga enkripsi larang.

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)
kinerja UDP

Ing kene, kabeh CNI uga apik. CNI kanthi enkripsi nuduhake asil sing meh padha. Cilium punika sethitik konco kompetisi, nanging mung 2,3% saka bare metal, supaya ora asil ala. Aja lali yen mung Cilium lan Flannel sing nemtokake MTU kanthi bener, lan iki minangka asil tanpa konfigurasi tambahan.

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)

Apa babagan aplikasi nyata? Kaya sing sampeyan ngerteni, kinerja sakabèhé kanggo HTTP rada luwih murah tinimbang TCP. Sanajan sampeyan nggunakake HTTP karo TCP, kita ngatur iperf3 ing pathokan TCP supaya ora miwiti alon sing bakal mengaruhi pathokan HTTP. Kabeh wong nindakake pakaryan sing apik ing kene. Kube-router wis kauntungan cetha, nanging WeaveNet ora nindakake uga: bab 20% Samsaya Awon saka bare metal. Cilium lan WeaveNet kanthi enkripsi katon sedhih banget.

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)

Kanthi FTP, protokol basis TCP liyane, asil beda-beda. Flanel lan Kube-router nindakaken proyek, nanging Calico, Canal lan Cilium sethitik konco lan bab 10% luwih alon tinimbang logam Bare. WeaveNet konco dening minangka akeh minangka 17%, nanging ndhelik WeaveNet 40% ahead saka Cilium ndhelik.

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)

Kanthi SCP, kita bisa langsung ndeleng sepira rega enkripsi SSH. Meh kabeh CNI apik, nanging WeaveNet ketinggalan maneh. Cilium lan WeaveNet kanthi enkripsi samesthine paling awon amarga enkripsi ganda (SSH + CNI).

Mangkene tabel ringkesan kanthi asil:

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)

Konsumsi sumber daya

Saiki ayo mbandhingake carane CNI nggunakake sumber daya ing beban abot (sajrone transfer TCP, 10 Gbps). Ing tes kinerja kita mbandhingake CNI karo bare metal (garis ijo). Kanggo konsumsi sumber daya, ayo kang nuduhake Kubernetes murni (garis ungu) tanpa CNI lan ndeleng carane akeh sumber daya ekstra nggunakake CNI.

Ayo dadi miwiti karo memori. Punika nilai rata-rata kanggo RAM kelenjar (ora kalebu buffer lan cache) ing MB nalika transfer.

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)
Konsumsi memori

Flanel lan Kube-router nuduhake asil banget - mung 50 MB. Calico lan Canal saben duwe 70. WeaveNet cetha nganggo luwih akeh tinimbang liyane - 130 MB, lan Cilium nggunakake nganti 400.
Saiki ayo mriksa konsumsi wektu CPU. Wigati: diagram nuduhake ora persentasi, nanging ppm, sing, 38 ppm kanggo "wesi gundhul" punika 3,8%. Mangkene asile:

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)
konsumsi CPU

Calico, Canal, Flanel lan Kube-router banget CPU efisien - mung 2% luwih saka Kubernetes tanpa CNI. WeaveNet lags adoh karo ekstra 5%, ngiring dening Cilium ing 7%.

Mangkene ringkesan konsumsi sumber daya:

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)

Hasil

Tabel karo kabeh asil:

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)
Hasil benchmark umum

kesimpulan

Ing bagean pungkasan aku bakal mratelakake panemume subyektif babagan asil. Elinga yen pathokan iki mung nguji throughput sambungan siji ing kluster cilik (3 simpul). Ora ditrapake kanggo klompok gedhe (<50 simpul) utawa sambungan paralel.

Aku nyaranake nggunakake CNI ing ngisor iki gumantung saka skenario:

  • Apa sampeyan duwe ing kluster sampeyan simpul karo sawetara sumber daya (sawetara GB RAM, sawetara intine) lan sampeyan ora perlu fitur keamanan - milih Flannel. Iki minangka salah sawijining CNI sing paling larang. Lan kompatibel karo macem-macem arsitektur (amd64, lengen, arm64, etc.). Kajaba iku, iki salah siji saka loro (liyane Cilium) CNI sing bisa kanthi otomatis nemtokake MTU, supaya sampeyan ora kudu ngatur apa-apa. Kube-router uga cocok, nanging ora minangka standar lan sampeyan kudu kanthi manual ngatur MTU.
  • Yen diperlokake encrypt jaringan kanggo safety, njupuk WeaveNet. Aja lali nemtokake ukuran MTU yen sampeyan nggunakake pigura jumbo, lan aktifake enkripsi kanthi nemtokake sandhi liwat variabel lingkungan. Nanging luwih becik lali babagan kinerja - yaiku biaya enkripsi.
  • Kanggo nggunakake normal советую Calico. CNI iki akeh digunakake ing macem-macem alat penyebaran Kubernetes (Kops, Kubespray, Rancher, lsp.). Kaya WeaveNet, manawa kanggo ngatur MTU ing ConfigMap yen nggunakake pigura jumbo. Iki minangka alat multi-fungsi sing efisien babagan konsumsi sumber daya, kinerja lan keamanan.

Lan pungkasane, aku menehi saran supaya sampeyan tindakake pangembangan cilium. CNI iki nduweni tim aktif banget sing kerjane akeh ing produke (fitur, tabungan sumber daya, kinerja, keamanan, clustering ...) lan duwe rencana sing menarik banget.

Asil Tolok ukur Kubernetes Network Plugin (CNI) liwat Jaringan 10 Gbps (Dianyari: April 2019)
Diagram visual kanggo pilihan CNI

Source: www.habr.com

Add a comment