Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)
Bu mənim yeniləməmdir əvvəlki etalon, hazırda 1.14-cu ilin aprelindən etibarən ən son CNI versiyası ilə Kubernetes 2019-də işləyir.

İlk növbədə, Cilium komandasına təşəkkür etmək istəyirəm: uşaqlar mənə metrika monitorinq skriptlərini yoxlamaq və düzəltməkdə kömək etdilər.

2018-ci ilin noyabrından nə dəyişdi

O vaxtdan bəri nə dəyişdi (maraqlanırsınızsa):

Flanel ən sürətli və ən sadə CNI interfeysi olaraq qalır, lakin hələ də şəbəkə siyasətlərini və şifrələməni dəstəkləmir.

Romana artıq dəstəklənmir, ona görə də biz onu etalondan çıxardıq.

WeaveNet indi Giriş və Çıxış üçün şəbəkə siyasətlərini dəstəkləyir! Amma məhsuldarlıq azalıb.

Calico-da, ən yaxşı performans üçün hələ də maksimum paket ölçüsünü (MTU) əl ilə konfiqurasiya etməlisiniz. Calico CNI quraşdırmaq üçün iki seçim təklif edir, buna görə də ayrıca ETCD deposu olmadan edə bilərsiniz:

  • Kubernetes API-də vəziyyəti məlumat anbarı kimi saxlamaq (klaster ölçüsü < 50 qovşaq);
  • K8S API-də yükü azaltmaq üçün Kubernetes API-də vəziyyəti Typha proksi ilə məlumat anbarı kimi saxlamaq (klaster ölçüsü > 50 qovşaq).

Calico dəstəyi elan etdi tətbiq səviyyəsində siyasətlər Tətbiq səviyyəsində təhlükəsizlik üçün Istio-nun üstündə.

Cilium indi şifrələməni dəstəkləyir! Cilium IPSec tunelləri ilə şifrələmə təmin edir və şifrələnmiş WeaveNet şəbəkəsinə alternativ təklif edir. Lakin WeaveNet şifrələmə aktivləşdirilmiş Cilium-dan daha sürətlidir.

Quraşdırılmış ETCD operatoru sayəsində Cilium-u indi yerləşdirmək daha asandır.

Cilium komandası yaddaş istehlakını və CPU xərclərini azaltmaqla CNI-dən bir qədər çəki azaltmağa çalışdı, lakin rəqibləri hələ də daha yüngüldür.

Benchmark konteksti

Bençmark 10 Gb Supermicro keçidi olan üç virtuallaşdırılmamış Supermicro serverində işləyir. Serverlər passiv DAC SFP+ kabelləri vasitəsilə birbaşa keçidə qoşulur və jumbo çərçivələrlə (MTU 9000) eyni VLAN-da konfiqurasiya edilir.

Kubernetes 1.14.0 Ubuntu 18.04 LTS-də Docker 18.09.2 ilə quraşdırılıb (bu buraxılışda standart Docker versiyası).

Təkrarlanma qabiliyyətini yaxşılaşdırmaq üçün biz həmişə birinci qovşaqda masterı konfiqurasiya etmək qərarına gəldik, etalonun server hissəsini ikinci serverə, müştəri hissəsini üçüncü serverə yerləşdirək. Bunu etmək üçün biz Kubernetes yerləşdirmələrində NodeSelector istifadə edirik.

Benchmark nəticələrini aşağıdakı miqyasda təsvir edəcəyik:

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)

Benchmark üçün CNI seçilməsi

Bu, bölmədəki siyahıdan yalnız CNI üçün etalondur kubeadm ilə bir master klaster yaratmaq haqqında Rəsmi Kubernetes sənədlərinə baxın. 9 CNI-dən yalnız 6-nı götürəcəyik: quraşdırması çətin olanları və/yaxud sənədlərə (Romana, Contiv-VPP və JuniperContrail/TungstenFabric) uyğun olaraq konfiqurasiya olmadan işləməyi istisna edəcəyik.

Aşağıdakı CNI-ləri müqayisə edəcəyik:

  • Calico v3.6
  • Canal v3.6 (əsasən şəbəkə üçün Flanel + firewall kimi Calico)
  • Cilium 1.4.2
  • Flanel 0.11.0
  • Kube-router 0.2.5
  • WeaveNet 2.5.1

Quraşdırma

CNI-nin quraşdırılması nə qədər asan olarsa, ilk təəssüratımız bir o qədər yaxşı olar. Benchmarkdan olan bütün CNI-ləri quraşdırmaq çox asandır (bir və ya iki əmrlə).

Dediyimiz kimi, serverlər və keçidlər jumbo çərçivələri aktivləşdirilmiş şəkildə konfiqurasiya edilmişdir (biz MTU-nu 9000-ə təyin etdik). Əgər CNI adapterlərin konfiqurasiyasına əsasən MTU-nu avtomatik təyin etsə, şad olardıq. Ancaq bunu yalnız Cilium və Flannel bacardı. Qalan CNI-lərin GitHub-da avtomatik MTU kəşfini əlavə etmək üçün sorğuları var, lakin biz onu Calico, Canal və Kube-router üçün ConfigMap-i dəyişdirməklə və ya WeaveNet üçün mühit dəyişənini ötürməklə onu əl ilə konfiqurasiya edəcəyik.

Yanlış MTU ilə bağlı problem nədir? Bu diaqram defolt MTU ilə WeaveNet ilə jumbo çərçivələri işə salınmış arasındakı fərqi göstərir:

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)
MTU ötürmə qabiliyyətinə necə təsir edir?

MTU-nun performans üçün nə qədər vacib olduğunu gördük, indi CNI-lərimizin onu avtomatik olaraq necə təyin etdiyinə baxaq:

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)
CNI avtomatik olaraq MTU-nu aşkar edir

Qrafik göstərir ki, optimal performans üçün MTU-nu Calico, Canal, Kube-router və WeaveNet üçün konfiqurasiya etməlisiniz. Cilium və Flannel heç bir parametr olmadan MTU-nu özləri düzgün təyin edə bildilər.

təhlükəsizlik

Biz CNI təhlükəsizliyini iki aspektdə müqayisə edəcəyik: ötürülən məlumatları şifrələmək imkanı və Kubernetes şəbəkə siyasətlərinin həyata keçirilməsi (sənədləşməyə deyil, real testlərə əsaslanaraq).

Yalnız iki CNI məlumatı şifrələyir: Cilium və WeaveNet. Şifrələmə WeaveNet şifrələmə parolunu CNI mühit dəyişəni kimi təyin etməklə aktivləşdirilir. IN sənədləşdirmə WeaveNet bunu mürəkkəb şəkildə təsvir edir, lakin hər şey sadə şəkildə edilir. Şifrələmə silium əmrlərlə, Kubernetes sirlərini yaratmaqla və daemonSet-in modifikasiyası ilə konfiqurasiya edilir (WeaveNet-dən bir az daha mürəkkəbdir, lakin Cilium-da addım-addım var. təlimatlar).

Şəbəkə siyasətinin həyata keçirilməsinə gəlincə, onlar buna nail olublar Calico, Canal, Cilium və WeaveNet, burada Giriş və Çıxış qaydalarını konfiqurasiya edə bilərsiniz. üçün Kube-router yalnız Ingress üçün qaydalar var və Flanel Şəbəkə siyasəti ümumiyyətlə yoxdur.

Budur ümumi nəticələr:

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)
Təhlükəsizlik Performansı Qiymətləndirmə Nəticələri

Məhsuldarlıq

Bu meyar hər bir testin ən azı üç qaçışı üzrə orta ötürmə qabiliyyətini göstərir. Biz TCP və UDP (iperf3 istifadə edərək), HTTP (Nginx və curl ilə) və ya FTP (vsftpd və curl ilə) kimi real proqramları və nəhayət, SCP əsaslı şifrələmədən (müştəri və server OpenSSH istifadə edərək) istifadə edərək tətbiq performansını sınaqdan keçiririk.

Bütün testlər üçün CNI performansını yerli şəbəkə performansı ilə müqayisə etmək üçün çılpaq metal etalon (yaşıl xətt) həyata keçirdik. Burada eyni miqyasdan istifadə edirik, lakin rəngli:

  • Sarı = çox yaxşı
  • Narıncı = yaxşı
  • Mavi = belədir
  • Qırmızı = pis

Biz səhv konfiqurasiya edilmiş CNI-ləri qəbul etməyəcəyik və yalnız düzgün MTU ilə CNI-lər üçün nəticələri göstərəcəyik. (Qeyd: Şifrələməni aktivləşdirsəniz, Cilium MTU-nu düzgün hesablamır, ona görə də 8900 versiyasında MTU-nu əl ilə 1.4-ə endirməli olacaqsınız. Növbəti versiya, 1.5, bunu avtomatik edir.)

Budur nəticələr:

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)
TCP Performansı

Bütün CNI-lər TCP etalonunda yaxşı çıxış etdilər. Şifrələmə ilə CNI çox geridə qalır, çünki şifrələmə bahalıdır.

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)
UDP performansı

Burada da bütün CNI-lər yaxşı işləyirlər. Şifrələmə ilə CNI demək olar ki, eyni nəticə göstərdi. Cilium rəqabətdən bir az geri qalır, lakin bu, yalnız 2,3% çılpaq metaldan ibarətdir, buna görə də pis nəticə deyil. Unutmayın ki, yalnız Cilium və Flannel MTU-nu özləri düzgün təyin etdilər və bunlar heç bir əlavə konfiqurasiya olmadan onların nəticələridir.

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)

Həqiqi tətbiq haqqında nə demək olar? Gördüyünüz kimi, HTTP üçün ümumi performans TCP ilə müqayisədə bir qədər aşağıdır. TCP ilə HTTP istifadə etsəniz belə, HTTP etalonuna təsir edəcək yavaş başlanğıcın qarşısını almaq üçün TCP etalonunda iperf3-ü konfiqurasiya etdik. Burada hər kəs yaxşı iş gördü. Kube-routerin açıq üstünlüyü var, lakin WeaveNet yaxşı işləmədi: çılpaq metaldan təxminən 20% daha pis. Şifrələmə ilə Cilium və WeaveNet həqiqətən kədərli görünür.

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)

Başqa bir TCP əsaslı protokol olan FTP ilə nəticələr dəyişir. Flanel və Kube-router işi görür, lakin Calico, Canal və Cilium bir az geridədir və çılpaq metaldan təxminən 10% daha yavaşdır. WeaveNet 17% geridədir, lakin şifrələnmiş WeaveNet şifrələnmiş Ciliumdan 40% qabaqdadır.

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)

SCP ilə SSH şifrələməsinin bizə nə qədər başa gəldiyini dərhal görə bilərik. Demək olar ki, bütün CNI-lər yaxşı işləyir, lakin WeaveNet yenidən geri qalır. Şifrələmə ilə Cilium və WeaveNet ikiqat şifrələmə (SSH + CNI) səbəbindən ən pisdir.

Nəticələri olan xülasə cədvəli budur:

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)

Resurs istehlakı

İndi CNI-nin ağır yüklər altında resursları necə istehlak etdiyini müqayisə edək (TCP ötürülməsi zamanı, 10 Gbps). Performans testlərində biz CNI-ni çılpaq metal (yaşıl xətt) ilə müqayisə edirik. Resurs istehlakı üçün gəlin CNI olmadan təmiz Kubernetes (bənövşəyi xətt) göstərək və CNI-nin nə qədər əlavə resurs istehlak etdiyinə baxaq.

Yaddaşdan başlayaq. Burada köçürmə zamanı MB-da qovşaqların RAM (buferlər və keşlər istisna olmaqla) üçün orta dəyəri verilmişdir.

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)
Yaddaş istehlakı

Flannel və Kube-router əla nəticələr göstərdi - cəmi 50 MB. Calico və Canal-ın hər birində 70 var. WeaveNet açıq şəkildə digərlərindən daha çox istehlak edir - 130 MB, Cilium isə 400-ə qədər istifadə edir.
İndi CPU vaxt sərfiyyatını yoxlayaq. Diqqətəlayiq: diaqramda faizlər deyil, ppm göstərilir, yəni “çılpaq dəmir” üçün 38 ppm 3,8% təşkil edir. Nəticələri təqdim edirik:

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)
CPU istehlakı

Calico, Canal, Flannel və Kube-router çox CPU səmərəlidir - CNI olmadan Kubernetes-dən cəmi 2% çoxdur. WeaveNet əlavə 5%, Cilium isə 7% ilə çox geri qalır.

Budur resurs istehlakının xülasəsi:

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)

Nəticələri

Bütün nəticələrlə cədvəl:

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)
Ümumi müqayisə nəticələri

Nəticə

Son hissədə nəticələrlə bağlı subyektiv fikrimi bildirəcəyəm. Unutmayın ki, bu meyar yalnız çox kiçik bir çoxluqda (3 qovşaq) tək bir əlaqənin ötürmə qabiliyyətini yoxlayır. Böyük klasterlərə (<50 qovşaq) və ya paralel birləşmələrə aid edilmir.

Ssenaridən asılı olaraq aşağıdakı CNI-lərdən istifadə etməyi tövsiyə edirəm:

  • Sizin klasterinizdə varmı az resursu olan qovşaqlar (bir neçə GB RAM, bir neçə nüvə) və təhlükəsizlik xüsusiyyətlərinə ehtiyacınız yoxdur - seçin Flanel. Bu, ən sərfəli CNI-lərdən biridir. Və o, müxtəlif arxitekturalara (amd64, arm, arm64 və s.) uyğun gəlir. Bundan əlavə, bu, MTU-nu avtomatik olaraq təyin edə bilən iki (digəri Cilium) CNI-dən biridir, buna görə heç bir şey konfiqurasiya etmək lazım deyil. Kube-router də uyğundur, lakin o, standart deyil və MTU-nu əl ilə konfiqurasiya etməlisiniz.
  • Gerekirse şəbəkəni şifrələyin təhlükəsizlik üçün götürün WeaveNet. Jumbo çərçivələrdən istifadə edirsinizsə, MTU ölçüsünü təyin etməyi unutmayın və mühit dəyişəni vasitəsilə parol təyin edərək şifrələməni aktivləşdirin. Ancaq performans haqqında unutmaq daha yaxşıdır - bu şifrələmənin dəyəridir.
  • Uğrunda normal istifadə советую kolenkor. Bu CNI müxtəlif Kubernetes yerləşdirmə alətlərində (Kops, Kubespray, Rancher və s.) geniş istifadə olunur. WeaveNet-də olduğu kimi, jumbo çərçivələrdən istifadə edirsinizsə, MTU-nu ConfigMap-də konfiqurasiya etməyinizə əmin olun. Bu, resurs istehlakı, performans və təhlükəsizlik baxımından səmərəli olan çoxfunksiyalı bir vasitədir.

Və nəhayət, inkişafı izləməyi məsləhət görürəm silium. Bu CNI-nin öz məhsulu (xüsusiyyətləri, resurs qənaəti, performans, təhlükəsizlik, qruplaşma...) üzərində çox işləyən çox aktiv bir komandası var və onların çox maraqlı planları var.

Kubernetes Şəbəkə Plugin (CNI) 10 Gbit/s şəbəkə üzərindən müqayisə nəticələri (Yenilənib: Aprel 2019)
CNI seçimi üçün vizual diaqram

Mənbə: www.habr.com

Добавить комментарий