Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

TL; DR: Semua CNI berfungsi sebagaimana mestinya, kecuali Kube-Router dan Kube-OVN, Calico, kecuali pengesanan MTU automatik, adalah yang terbaik.

Kemas kini artikel cek masa lalu saya (2018 ΠΈ 2019), pada masa ujian saya menggunakan Kubernetes 1.19 pada Ubuntu 18.04 dengan CNI yang dikemas kini pada Ogos 2020.

Sebelum kita menyelami metrik...

Apa yang baharu sejak April 2019?

  • Boleh menguji kluster anda sendiri: Anda boleh menjalankan ujian pada kluster anda sendiri menggunakan alat kami Penanda Aras Rangkaian Kubernetes: knb
  • Ahli baru telah muncul
  • Senario Baharu: Semakan semasa menjalankan ujian prestasi rangkaian "Pod-to-Pod" dan skrip "Pod-to-Service" baharu telah ditambah yang menjalankan ujian lebih dekat dengan keadaan dunia sebenar. Dalam amalan, Pod anda dengan API berfungsi dengan pangkalan sebagai perkhidmatan, dan bukan melalui alamat ip Pod (sudah tentu kami menyemak kedua-dua TCP dan UDP untuk kedua-dua senario).
  • Penggunaan sumber: setiap ujian kini mempunyai perbandingan sumber sendiri
  • Mengalih keluar Ujian Aplikasi: Kami tidak lagi melakukan ujian HTTP, FTP dan SCP kerana kerjasama kami yang berjaya dengan komuniti dan penyelenggara CNI telah menemui jurang antara keputusan iperf berbanding keputusan TCP dan curl disebabkan kelewatan dalam permulaan CNI (beberapa saat pertama Pod permulaan, yang tidak biasa dalam keadaan sebenar).
  • Sumber terbuka: semua sumber ujian (skrip, tetapan yml dan data "mentah" asal) tersedia di sini

Protokol Ujian Rujukan

Protokol diterangkan secara terperinci di siniSila ambil perhatian bahawa artikel ini adalah mengenai Ubuntu 18.04 dengan kernel lalai.

Memilih CNI untuk Penilaian

Ujian ini bertujuan untuk membandingkan CNI yang dikonfigurasikan dengan satu fail yaml (oleh itu, semua yang dipasang oleh skrip, seperti VPP dan lain-lain, dikecualikan).

CNI pilihan kami untuk perbandingan:

  • Antrea v.0.9.1
  • Calico v3.16
  • Canal v3.16 (Rangkaian Flanel + Dasar Rangkaian Calico)
  • Cilium 1.8.2
  • Flanel 0.12.0
  • Kube-router terkini (2020–08–25)
  • WeaveNet 2.7.0

Mengkonfigurasi MTU untuk CNI

Pertama sekali, kami menyemak kesan pengesanan MTU automatik pada prestasi TCP:

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Kesan MTU pada Prestasi TCP

Jurang yang lebih besar ditemui apabila menggunakan UDP:

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)
Kesan MTU terhadap Prestasi UDP

Memandangkan kesan prestasi BESAR yang didedahkan dalam ujian, kami ingin menghantar surat harapan kepada semua penyelenggara CNI: sila tambah pengesanan MTU automatik pada CNI. Anda akan menyelamatkan anak kucing, unicorn dan juga yang paling comel: Devop kecil.

Walau bagaimanapun, jika anda perlu menggunakan CNI tanpa sokongan untuk pengesanan MTU automatik, anda boleh mengkonfigurasinya secara manual untuk mendapatkan prestasi. Sila ambil perhatian bahawa ini terpakai kepada Calico, Canal dan WeaveNet.

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)
Permintaan kecil saya kepada CNI yang mengiringi...

Ujian CNI: Data Mentah

Dalam bahagian ini, kami akan membandingkan CNI dengan MTU yang betul (ditentukan secara automatik atau ditetapkan secara manual). Matlamat utama di sini adalah untuk menunjukkan data mentah dalam graf.

Legenda warna:

  • kelabu - sampel (iaitu besi kosong)
  • hijau - lebar jalur melebihi 9500 Mbps
  • kuning - lebar jalur melebihi 9000 Mbps
  • oren - lebar jalur melebihi 8000 Mbps
  • merah - lebar jalur di bawah 8000 Mbps
  • biru - neutral (tidak berkaitan dengan lebar jalur)

Penggunaan sumber tanpa beban

Pertama sekali, semak penggunaan sumber apabila kluster sedang "tidur".

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)
Penggunaan sumber tanpa beban

Pod-to-Pod

Senario ini menganggap bahawa Pod klien bersambung terus ke Pod pelayan menggunakan alamat IPnya.

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)
Senario Pod-to-Pod

TCP

Keputusan TCP Pod-to-Pod dan penggunaan sumber yang sepadan:

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

UDP

Keputusan UDP Pod-to-Pod dan penggunaan sumber yang sepadan:

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Pod-to-Service

Bahagian ini adalah relevan untuk kes penggunaan sebenar, Pod klien bersambung ke Pod pelayan melalui perkhidmatan ClusterIP.

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)
Skrip Pod-to-Service

TCP

Keputusan TCP Pod-to-Service dan penggunaan sumber yang sepadan:

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

UDP

Keputusan UDP Pod-to-Service dan penggunaan sumber yang sepadan:

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Sokongan dasar rangkaian

Di antara semua perkara di atas, satu-satunya yang tidak menyokong politik ialah Flanel. Semua yang lain melaksanakan dasar rangkaian dengan betul, termasuk masuk dan keluar. Bagus!

penyulitan CNI

Antara CNI yang disemak ada yang boleh menyulitkan pertukaran rangkaian antara Pod:

  • Antrea menggunakan IPsec
  • Calico menggunakan pengawal wayar
  • Cilium menggunakan IPsec
  • WeaveNet menggunakan IPsec

Throughput

Oleh kerana terdapat lebih sedikit CNI yang tinggal, mari letakkan semua senario ke dalam satu graf:

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Penggunaan sumber

Dalam bahagian ini, kami akan menilai sumber yang digunakan semasa memproses komunikasi Pod-to-Pod dalam TCP dan UDP. Tidak ada gunanya melukis graf Pod-to-Service kerana ia tidak memberikan maklumat tambahan.

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Menyatukan semuanya

Mari cuba ulangi semua graf, kami memperkenalkan sedikit subjektiviti di sini, menggantikan nilai sebenar dengan perkataan "vwry fast", "low", dll.

Penilaian prestasi CNI untuk Kubernetes melalui rangkaian 10G (Ogos 2020)

Kesimpulan dan kesimpulan saya

Ini sedikit subjektif, kerana saya menyampaikan tafsiran saya sendiri tentang hasilnya.

Saya gembira kerana CNI baharu muncul, Antrea berfungsi dengan baik, banyak fungsi telah dilaksanakan walaupun dalam versi awal: pengesanan MTU automatik, penyulitan dan pemasangan mudah.

Jika kita membandingkan prestasi, semua CNI berfungsi dengan baik, kecuali Kube-OVN dan Kube-Router. Kube-Router juga tidak dapat mengesan MTU, saya tidak menemui cara untuk mengkonfigurasinya di mana-mana dalam dokumentasi (di sini permintaan mengenai topik ini dibuka).

Dari segi penggunaan sumber, Cilium masih menggunakan lebih banyak RAM daripada yang lain, tetapi pengeluar jelas menyasarkan kelompok besar, yang jelas tidak sama dengan ujian pada kelompok tiga nod. Kube-OVN juga menggunakan banyak sumber CPU dan RAM, tetapi ia adalah CNI muda berdasarkan Open vSwitch (seperti Antrea, ia berprestasi lebih baik dan menggunakan kurang).

Semua orang kecuali Flanel mempunyai dasar rangkaian. Kemungkinan besar dia tidak akan menyokong mereka, kerana matlamatnya lebih mudah daripada lobak kukus: lebih ringan, lebih baik.

Selain itu, antara lain, prestasi penyulitan adalah menakjubkan. Calico ialah salah satu CNI tertua, tetapi penyulitan hanya ditambah beberapa minggu yang lalu. Mereka memilih wireguard dan bukannya IPsec, dan secara ringkasnya, ia berfungsi dengan hebat dan menakjubkan, benar-benar mengatasi CNI lain dalam bahagian ujian ini. Sudah tentu, penggunaan sumber meningkat disebabkan oleh penyulitan, tetapi hasil yang dicapai adalah berbaloi (Calico menunjukkan peningkatan enam kali ganda dalam ujian penyulitan berbanding Cilium, yang menduduki tempat kedua). Selain itu, anda boleh mendayakan pengawal wayar pada bila-bila masa selepas anda menggunakan Calico ke kluster, dan anda juga boleh melumpuhkannya untuk masa yang singkat atau secara kekal jika anda mahu. Ia sangat mudah, walaupun! Kami mengingatkan anda bahawa Calico tidak mengesan MTU secara automatik pada masa ini (ciri ini dirancang untuk versi akan datang), jadi pastikan anda mengkonfigurasi MTU jika rangkaian anda menyokong Bingkai Jumbo (MTU 9000).

Antara lain, ambil perhatian bahawa Cilium boleh menyulitkan trafik antara nod kluster (dan bukan hanya antara Pod), yang boleh menjadi sangat penting untuk nod kluster awam.

Sebagai kesimpulan, saya mencadangkan kes penggunaan berikut:

  • Perlu CNI untuk kelompok yang sangat kecil ATAU saya tidak memerlukan keselamatan: bekerja dengan Flanel, CNI paling ringan dan paling stabil (dia juga salah seorang yang tertua, menurut legenda dia dicipta oleh Homo Kubernautus atau Homo Contaitorus). Anda juga mungkin berminat dengan projek yang paling bijak k3, semak!
  • Perlu CNI untuk kluster biasa: Calico - pilihan anda, tetapi jangan lupa untuk mengkonfigurasi MTU jika perlu. Anda boleh bermain dengan mudah dan semula jadi dengan dasar rangkaian, menghidupkan dan mematikan penyulitan, dsb.
  • Memerlukan CNI untuk kluster (sangat) besar: Nah, ujian itu tidak menunjukkan tingkah laku kelompok besar, saya akan gembira untuk menjalankan ujian, tetapi kami tidak mempunyai beratus-ratus pelayan dengan sambungan 10Gbps. Jadi pilihan terbaik ialah menjalankan ujian yang diubah suai pada nod anda, sekurang-kurangnya dengan Calico dan Cilium.

Sumber: www.habr.com

Tambah komen