Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)
To jest moja aktualizacja poprzedni punkt odniesienia, który obecnie działa na platformie Kubernetes 1.14 z najnowszą wersją CNI z kwietnia 2019 r.

Przede wszystkim chcę podziękować zespołowi Cilium: chłopaki pomogli mi sprawdzić i poprawić skrypty monitorujące metryki.

Co się zmieniło od listopada 2018 r

Oto, co zmieniło się od tego czasu (jeśli jesteś zainteresowany):

Flannel pozostaje najszybszym i najprostszym interfejsem CNI, ale nadal nie obsługuje zasad sieciowych i szyfrowania.

Romana nie jest już obsługiwana, więc usunęliśmy ją z testu porównawczego.

WeaveNet obsługuje teraz zasady sieciowe dla ruchu przychodzącego i wychodzącego! Ale produktywność spadła.

W Calico nadal musisz ręcznie skonfigurować maksymalny rozmiar pakietu (MTU), aby uzyskać najlepszą wydajność. Calico oferuje dwie opcje instalacji CNI, dzięki czemu można obejść się bez osobnego repozytorium ETCD:

  • przechowywanie stanu w Kubernetes API jako magazyn danych (wielkość klastra < 50 węzłów);
  • przechowywanie stanu w Kubernetes API jako magazyn danych z proxy Typha w celu odciążenia API K8S (rozmiar klastra > 50 węzłów).

Calico ogłosił wsparcie zasady na poziomie aplikacji na Istio w celu zapewnienia bezpieczeństwa na poziomie aplikacji.

Cilium obsługuje teraz szyfrowanie! Cilium zapewnia szyfrowanie za pomocą tuneli IPSec i stanowi alternatywę dla szyfrowanej sieci WeaveNet. Ale WeaveNet jest szybszy niż Cilium z włączonym szyfrowaniem.

Cilium jest teraz łatwiejsze do wdrożenia dzięki wbudowanemu operatorowi ETCD.

Zespół Cilium próbował zmniejszyć część swojego CNI, zmniejszając zużycie pamięci i koszty procesora, ale jego konkurenci są wciąż lżejsi.

Kontekst benchmarku

Test porównawczy przeprowadzono na trzech niezwirtualizowanych serwerach Supermicro z przełącznikiem Supermicro 10 Gb. Serwery są podłączone bezpośrednio do przełącznika za pomocą pasywnych kabli DAC SFP+ i są skonfigurowane w tej samej sieci VLAN z ramkami jumbo (MTU 9000).

Kubernetes 1.14.0 zainstalowany na Ubuntu 18.04 LTS z Dockerem 18.09.2 (domyślna wersja Dockera w tej wersji).

Aby poprawić odtwarzalność, zdecydowaliśmy się zawsze konfigurować master w pierwszym węźle, umieszczać część serwerową testu porównawczego na drugim serwerze, a część kliencką na trzecim. Aby to zrobić, we wdrożeniach Kubernetes używamy NodeSelector.

Wyniki benchmarków opiszemy w następującej skali:

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)

Wybór CNI jako punktu odniesienia

Jest to punkt odniesienia wyłącznie dla CNI z listy w sekcji o tworzeniu jednego klastra głównego za pomocą kubeadm Zobacz oficjalną dokumentację Kubernetes. Z 9 CNI weźmiemy tylko 6: wykluczymy te, które są trudne w instalacji i/lub nie działają bez konfiguracji zgodnie z dokumentacją (Romana, Contiv-VPP i JuniperContrail/TungstenFabric).

Porównamy następujące CNI:

  • Calico v3.6
  • Canal v3.6 (zasadniczo Flanela do sieci + Calico jako zapora sieciowa)
  • Rzęska 1.4.2
  • Flanela 0.11.0
  • Kube-router 0.2.5
  • Splot sieci 2.5.1

Instalacja

Im łatwiejszy będzie montaż CNI, tym lepsze będzie nasze pierwsze wrażenie. Wszystkie CNI z benchmarku są bardzo łatwe w instalacji (za pomocą jednego lub dwóch poleceń).

Jak powiedzieliśmy, serwery i przełącznik są skonfigurowane z włączoną obsługą ramek jumbo (ustawiamy MTU na 9000). Bylibyśmy szczęśliwi, gdyby CNI automatycznie określiło MTU na podstawie konfiguracji adapterów. Udało się to jednak tylko Cilium i Flannel. Reszta CNI ma prośby w GitHub o dodanie automatycznego wykrywania MTU, ale skonfigurujemy to ręcznie, zmieniając ConfigMap dla Calico, Canal i Kube-router lub przekazując zmienną środowiskową dla WeaveNet.

Jaki jest problem z nieprawidłowym MTU? Ten diagram pokazuje różnicę pomiędzy siecią WeaveNet z włączonymi domyślnymi ramkami MTU i ramkami jumbo:

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)
Jak MTU wpływa na przepustowość?

Widzieliśmy, jak ważny jest MTU dla wydajności, teraz zobaczmy, jak nasze CNI automatycznie to określają:

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)
CNI automatycznie wykrywa MTU

Wykres pokazuje, że należy skonfigurować MTU dla Calico, Canal, Kube-router i WeaveNet, aby uzyskać optymalną wydajność. Cilium i Flannel same były w stanie poprawnie określić MTU bez żadnych ustawień.

bezpieczeństwo

Bezpieczeństwo CNI porównamy w dwóch aspektach: możliwości szyfrowania przesyłanych danych oraz realizacji polityk sieciowych Kubernetes (w oparciu o rzeczywiste testy, a nie dokumentację).

Tylko dwa CNI szyfrują dane: Cilium i WeaveNet. Szyfrowanie Splot Net można włączyć, ustawiając hasło szyfrowania jako zmienną środowiskową CNI. W dokumentacja WeaveNet opisuje to w skomplikowany sposób, ale wszystko odbywa się prosto. Szyfrowanie Migawka konfigurowany za pomocą poleceń, tworząc sekrety Kubernetesa i modyfikując zestaw daemonSet (trochę bardziej skomplikowany niż w WeaveNet, ale Cilium ma krok po kroku instrukcje).

Jeśli chodzi o realizację polityki sieciowej, udało im się Calico, Canal, Cilium i WeaveNet, w którym możesz skonfigurować reguły ruchu przychodzącego i wychodzącego. Dla Kube-router istnieją zasady tylko dla Ingress i Flanela Nie ma żadnych zasad sieciowych.

Oto wyniki ogólne:

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)
Wyniki testów porównawczych wydajności bezpieczeństwa

produktywność

Ten test porównawczy pokazuje średnią przepustowość w co najmniej trzech przebiegach każdego testu. Testujemy wydajność TCP i UDP (przy użyciu iperf3), rzeczywistych aplikacji, takich jak HTTP (z Nginx i curl) czy FTP (z vsftpd i curl) i wreszcie wydajność aplikacji przy użyciu szyfrowania opartego na SCP (przy użyciu klienta i serwera OpenSSH).

W przypadku wszystkich testów przeprowadziliśmy test porównawczy „bare metal” (zielona linia), aby porównać wydajność CNI z wydajnością sieci natywnej. Tutaj używamy tej samej skali, ale w kolorze:

  • Żółty = bardzo dobry
  • Pomarańczowy = dobry
  • Niebieski = tak sobie
  • Czerwony = zły

Nie będziemy brać pod uwagę niepoprawnie skonfigurowanych CNI i pokażemy tylko wyniki dla CNI z prawidłowym MTU. (Uwaga: Cilium nie oblicza poprawnie MTU, jeśli włączysz szyfrowanie, więc będziesz musiał ręcznie zmniejszyć MTU do 8900 w wersji 1.4. Następna wersja, 1.5, zrobi to automatycznie.)

Oto wyniki:

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)
Wydajność TCP

Wszystkie CNI wypadły dobrze w teście TCP. CNI z szyfrowaniem pozostaje daleko w tyle, ponieważ szyfrowanie jest drogie.

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)
Wydajność UDP

Tutaj także wszystkie CNI radzą sobie dobrze. CNI z szyfrowaniem pokazało prawie taki sam wynik. Cilium zostaje trochę w tyle za konkurencją, ale to tylko 2,3% gołego metalu, więc nie jest to zły wynik. Nie zapominajcie, że tylko Cilium i Flannel same poprawnie określiły MTU, a to są ich wyniki bez żadnej dodatkowej konfiguracji.

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)

A co z prawdziwą aplikacją? Jak widać, ogólna wydajność protokołu HTTP jest nieco niższa niż protokołu TCP. Nawet jeśli używasz protokołu HTTP z protokołem TCP, skonfigurowaliśmy iperf3 w teście porównawczym TCP, aby uniknąć powolnego uruchamiania, który miałby wpływ na test porównawczy HTTP. Wszyscy wykonali tutaj dobrą robotę. Kube-router ma wyraźną przewagę, ale WeaveNet nie spisał się dobrze: około 20% gorzej niż goły metal. Cilium i WeaveNet z szyfrowaniem wyglądają naprawdę smutno.

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)

W przypadku FTP, innego protokołu opartego na protokole TCP, wyniki są różne. Flannel i Kube-router wykonują robotę, ale Calico, Canal i Cilium pozostają nieco w tyle i są około 10% wolniejsze niż goły metal. WeaveNet pozostaje w tyle aż o 17%, ale szyfrowany WeaveNet jest o 40% lepszy od szyfrowanego Cilium.

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)

Dzięki SCP od razu możemy zobaczyć, ile kosztuje nas szyfrowanie SSH. Prawie wszystkie CNI radzą sobie dobrze, ale WeaveNet ponownie pozostaje w tyle. Oczekuje się, że najgorsze będą Cilium i WeaveNet z szyfrowaniem ze względu na podwójne szyfrowanie (SSH + CNI).

Oto tabela podsumowująca z wynikami:

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)

Zużycie zasobów

Porównajmy teraz, jak CNI zużywa zasoby pod dużym obciążeniem (podczas transferu TCP, 10 Gb/s). W testach wydajności porównujemy CNI z gołym metalem (zielona linia). W przypadku zużycia zasobów pokażmy czysty Kubernetes (fioletowa linia) bez CNI i zobaczmy, ile dodatkowych zasobów zużywa CNI.

Zacznijmy od pamięci. Oto średnia wartość pamięci RAM węzłów (z wyłączeniem buforów i pamięci podręcznej) w MB podczas transferu.

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)
Zużycie pamięci

Flannel i Kube-router wykazały doskonałe wyniki - tylko 50 MB. Calico i Canal mają ich po 70. WeaveNet wyraźnie zużywa więcej niż pozostałe - 130 MB, a Cilium aż 400.
Sprawdźmy teraz zużycie czasu procesora. Godny uwagi: wykres pokazuje nie wartości procentowe, ale ppm, czyli 38 ppm dla „gołego żelaza” to 3,8%. Oto wyniki:

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)
Zużycie procesora

Calico, Canal, Flannel i Kube-router są bardzo wydajne pod względem procesora - tylko 2% więcej niż Kubernetes bez CNI. WeaveNet pozostaje daleko w tyle z dodatkowymi 5%, a za nim plasuje się Cilium z 7%.

Oto podsumowanie zużycia zasobów:

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)

Wyniki

Tabela ze wszystkimi wynikami:

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)
Ogólne wyniki testów porównawczych

wniosek

W ostatniej części wyrażę swoją subiektywną opinię na temat wyników. Pamiętaj, że ten test porównawczy testuje tylko przepustowość pojedynczego połączenia w bardzo małym klastrze (3 węzły). Nie dotyczy to dużych klastrów (<50 węzłów) ani połączeń równoległych.

W zależności od scenariusza zalecam użycie następujących CNI:

  • Czy masz w swoim klastrze węzły z niewielkimi zasobami (kilka GB RAM-u, kilka rdzeni) i nie potrzebujesz zabezpieczeń - wybierz Flanela. Jest to jeden z najbardziej opłacalnych CNI. Jest kompatybilny z szeroką gamą architektur (amd64, arm, arm64 itp.). Poza tym jest to jeden z dwóch (drugim jest Cilium) CNI, które potrafią automatycznie określić MTU, dzięki czemu nie trzeba niczego konfigurować. Kube-router jest również odpowiedni, ale nie jest to standard i będziesz musiał ręcznie skonfigurować MTU.
  • Jeśli to konieczne szyfrować sieć dla bezpieczeństwa, weź Splot Net. Nie zapomnij określić rozmiaru MTU, jeśli używasz ramek Jumbo i włącz szyfrowanie, podając hasło za pomocą zmiennej środowiskowej. Ale o wydajności lepiej zapomnieć – taki jest koszt szyfrowania.
  • dla normalne użytkowanie Radzę Perkal. Ten CNI jest szeroko stosowany w różnych narzędziach do wdrażania Kubernetes (Kops, Kubespray, Rancher itp.). Podobnie jak w przypadku WeaveNet, pamiętaj o skonfigurowaniu MTU w ConfigMap, jeśli używasz ramek typu jumbo. Jest to narzędzie wielofunkcyjne, efektywne pod względem zużycia zasobów, wydajności i bezpieczeństwa.

I na koniec radzę śledzić rozwój Migawka. To CNI ma bardzo aktywny zespół, który dużo pracuje nad swoim produktem (funkcje, oszczędność zasobów, wydajność, bezpieczeństwo, klastrowanie...) i ma bardzo ciekawe plany.

Wyniki testów porównawczych wtyczki Kubernetes Network Plugin (CNI) w sieci 10 Gb/s (aktualizacja: kwiecień 2019 r.)
Schemat wizualny wyboru CNI

Źródło: www.habr.com

Dodaj komentarz