Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

TL; DR: Wszystkie CNI działają tak jak powinny, z wyjątkiem Kube-Routera i Kube-OVN, Calico, z wyjątkiem automatycznego wykrywania MTU, jest najlepsze.

Aktualizacja artykułu dotycząca moich wcześniejszych kontroli (2018 и 2019), w momencie testów używam Kubernetes 1.19 na Ubuntu 18.04 ze zaktualizowanymi CNI z sierpnia 2020 r.

Zanim zagłębimy się w metryki...

Co nowego od kwietnia 2019?

  • Możliwość testowania na własnym klastrze: Za pomocą naszego narzędzia możesz przeprowadzić testy na własnym klastrze Test porównawczy sieci Kubernetes: pokrętło
  • Pojawili się nowi członkowie
  • Nowe scenariusze: Bieżące kontrole przeprowadzają testy wydajności sieci „Pod-to-Pod”. Dodano także nowy skrypt „Pod-to-Service”, który przeprowadza testy bardziej zbliżone do warunków rzeczywistych. W praktyce Twój Pod z API współpracuje z bazą jako usługa, a nie poprzez adres IP Poda (oczywiście sprawdzamy zarówno TCP, jak i UDP dla obu scenariuszy).
  • Zużycie zasobów: każdy test ma teraz własne porównanie zasobów
  • Usuwanie testów aplikacji: Nie przeprowadzamy już testów HTTP, FTP i SCP, ponieważ nasza owocna współpraca ze społecznością i opiekunami CNI odkryła lukę pomiędzy wynikami iperf przez TCP i wynikami curl z powodu opóźnienia w uruchomieniu CNI (pierwsze kilka sekund Pod rozruchu, co nie jest typowe w rzeczywistych warunkach).
  • Open source: dostępne są wszystkie źródła testowe (skrypty, ustawienia yml i oryginalne „surowe” dane). tutaj

Protokół testu referencyjnego

Protokół jest szczegółowo opisany tutajPamiętaj, że ten artykuł dotyczy Ubuntu 18.04 z domyślnym jądrem.

Wybór CNI do oceny

Testowanie to ma na celu porównanie CNI skonfigurowanych z jednym plikiem yaml (dlatego wykluczone są wszystkie te instalowane przez skrypty, takie jak VPP i inne).

Nasze wybrane CNI do porównania:

  • Antrea wersja 0.9.1
  • Calico v3.16
  • Canal v3.16 (sieć flanelowa + zasady sieci Calico)
  • Rzęska 1.8.2
  • Flanela 0.12.0
  • Najnowszy router Kube (2020–08–25)
  • Splot sieci 2.7.0

Konfigurowanie MTU dla CNI

Na początek sprawdzamy wpływ automatycznego wykrywania MTU na wydajność TCP:

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Wpływ MTU na wydajność protokołu TCP

Jeszcze większa luka występuje w przypadku korzystania z protokołu UDP:

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)
Wpływ MTU na wydajność UDP

Biorąc pod uwagę OGROMNY wpływ na wydajność ujawniony w testach, chcielibyśmy wysłać list nadziei do wszystkich opiekunów CNI: prosimy o dodanie automatycznego wykrywania MTU do CNI. Uratujesz kocięta, jednorożce, a nawet tego najsłodszego: małego Devopa.

Jeśli jednak chcesz używać CNI bez obsługi automatycznego wykrywania MTU, możesz skonfigurować je ręcznie, aby uzyskać wydajność. Należy pamiętać, że dotyczy to Calico, Canal i WeaveNet.

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)
Moja mała prośba do towarzyszących CNI...

Testowanie CNI: surowe dane

W tej sekcji porównamy CNI z prawidłowym MTU (określanym automatycznie lub ustawianym ręcznie). Głównym celem jest pokazanie surowych danych na wykresach.

Legenda kolorów:

  • szary - próbka (tj. gołe żelazo)
  • zielony - przepustowość powyżej 9500 Mbps
  • żółty - przepustowość powyżej 9000 Mbps
  • pomarańczowy - przepustowość powyżej 8000 Mbps
  • czerwony - przepustowość poniżej 8000 Mbps
  • niebieski - neutralny (niezwiązany z przepustowością)

Zużycie zasobów bez obciążenia

Przede wszystkim sprawdź zużycie zasobów, gdy klaster „śpi”.

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)
Zużycie zasobów bez obciążenia

Pod-do-Pod

W tym scenariuszu założono, że moduł kliencki łączy się bezpośrednio z modułem serwerowym przy użyciu jego adresu IP.

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)
Scenariusz od kapsuły do ​​kapsuły

TCP

Wyniki protokołu TCP między kapsułami i odpowiadające im zużycie zasobów:

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

UDP

Wyniki UDP między kapsułami i odpowiadające im zużycie zasobów:

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Pod-do-serwisu

Ta sekcja dotyczy rzeczywistych przypadków użycia, gdy moduł kliencki łączy się z modułem serwerowym za pośrednictwem usługi ClusterIP.

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)
Skrypt Pod-to-Service

TCP

Wyniki protokołu TCP typu Pod-to-Service i odpowiadające im zużycie zasobów:

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

UDP

Wyniki UDP Pod-to-Service i odpowiadające im zużycie zasobów:

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Obsługa zasad sieciowych

Spośród wszystkich powyższych jedyną, która nie wspiera polityki, jest Flannel. Wszystkie pozostałe poprawnie wdrażają zasady sieciowe, w tym połączenia przychodzące i wychodzące. Dobra robota!

Szyfrowanie CNI

Wśród sprawdzonych CNI znajdują się takie, które potrafią szyfrować wymianę sieciową pomiędzy Podami:

  • Antrea korzysta z protokołu IPsec
  • Calico za pomocą wireguarda
  • Rzęska korzystająca z protokołu IPsec
  • WeaveNet korzystający z protokołu IPsec

Przepustowość

Ponieważ pozostało mniej CNI, umieśćmy wszystkie scenariusze na jednym wykresie:

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Zużycie zasobów

W tej sekcji ocenimy zasoby wykorzystywane podczas przetwarzania komunikacji między urządzeniami w protokołach TCP i UDP. Rysowanie wykresu Pod-to-Service nie ma sensu, ponieważ nie dostarcza on dodatkowych informacji.

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Kładąc wszystko razem

Spróbujmy powtórzyć wszystkie wykresy, wprowadziliśmy tu trochę subiektywizmu, zastępując rzeczywiste wartości słowami „vwry fast”, „low” itp.

Ocena wydajności CNI dla Kubernetes w sieci 10G (sierpień 2020)

Podsumowanie i moje wnioski

Jest to trochę subiektywne, ponieważ przekazuję własną interpretację wyników.

Cieszę się, że pojawiły się nowe CNI, Antrea spisał się dobrze, wiele funkcji zostało zaimplementowanych już we wczesnych wersjach: automatyczne wykrywanie MTU, szyfrowanie i łatwa instalacja.

Jeśli porównamy wydajność, wszystkie CNI działają dobrze, z wyjątkiem Kube-OVN i Kube-Router. Kube-Router również nie był w stanie wykryć MTU, nie znalazłem nigdzie w dokumentacji sposobu na jego skonfigurowanie (tutaj prośba w tej sprawie jest otwarta).

Jeśli chodzi o zużycie zasobów, Cilium nadal zużywa więcej pamięci RAM niż inne, ale producent wyraźnie celuje w duże klastry, co wyraźnie nie jest tym samym, co test na klastrze z trzema węzłami. Kube-OVN również zużywa sporo zasobów procesora i pamięci RAM, ale jest to młody CNI bazujący na Open vSwitch (podobnie jak Antrea, działa lepiej i zużywa mniej).

Wszyscy oprócz Flannel mają zasady sieciowe. Jest bardzo prawdopodobne, że nigdy ich nie poprze, ponieważ cel jest prostszy niż rzepa na parze: im lżejszy, tym lepszy.

Ponadto, między innymi, wydajność szyfrowania jest niesamowita. Calico to jeden z najstarszych CNI, ale szyfrowanie zostało dodane dopiero kilka tygodni temu. Wybrali wireguard zamiast IPsec i mówiąc najprościej, działa świetnie i niesamowicie, całkowicie przyćmiewając inne CNI w tej części testów. Oczywiście zużycie zasobów wzrasta w wyniku szyfrowania, ale osiągnięta przepustowość jest tego warta (Calico wykazało sześciokrotną poprawę w teście szyfrowania w porównaniu do Cilium, który zajmuje drugie miejsce). Co więcej, możesz włączyć Wireguard w dowolnym momencie po wdrożeniu Calico w klastrze, a także możesz go wyłączyć na krótki czas lub na stałe, jeśli chcesz. Jest to jednak niezwykle wygodne! Przypominamy, że Calico obecnie nie wykrywa automatycznie MTU (ta funkcja jest planowana w przyszłych wersjach), więc pamiętaj o skonfigurowaniu MTU, jeśli Twoja sieć obsługuje ramki Jumbo (MTU 9000).

Należy między innymi pamiętać, że Cilium może szyfrować ruch pomiędzy węzłami klastra (a nie tylko pomiędzy Podami), co może być bardzo ważne dla publicznych węzłów klastra.

Podsumowując, sugeruję następujące przypadki użycia:

  • Potrzebujesz CNI dla bardzo małego klastra LUB nie potrzebuję zabezpieczeń: pracować z Flanela, najlżejszy i najbardziej stabilny CNI (jest także jednym z najstarszych, według legendy wynalazł go Homo Kubernautus lub Homo Contaitorus). Być może zainteresuje Cię także najbardziej pomysłowy projekt k3s, sprawdzać!
  • Potrzebujesz CNI dla zwykłego klastra: Perkal - Twój wybór, ale nie zapomnij skonfigurować MTU, jeśli zajdzie taka potrzeba. Możesz łatwo i naturalnie bawić się politykami sieciowymi, włączać i wyłączać szyfrowanie itp.
  • Potrzebujesz CNI dla (bardzo) dużego klastra: Cóż, test nie pokazuje zachowania dużych klastrów, chętnie przeprowadziłbym testy, ale nie mamy setek serwerów z łączem 10Gbps. Dlatego najlepszą opcją jest uruchomienie zmodyfikowanego testu na węzłach, przynajmniej z Calico i Cilium.

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

Dodaj komentarz