CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

TL; DR: Alle CNIs funktionieren wie sie sollten, mit Ausnahme von Kube-Router und Kube-OVN. Calico ist mit Ausnahme der automatischen MTU-Erkennung das Beste.

Artikel-Update meiner vergangenen Schecks (2018 и 2019), zum Zeitpunkt des Tests verwende ich Kubernetes 1.19 auf Ubuntu 18.04 mit aktualisierten CNIs vom August 2020.

Bevor wir uns mit Kennzahlen befassen ...

Was ist neu seit April 2019?

  • Kann auf Ihrem eigenen Cluster testen: Mit unserem Tool können Sie Tests auf Ihrem eigenen Cluster durchführen Kubernetes-Netzwerk-Benchmark: KNB
  • Neue Mitglieder sind erschienen
  • Neue Szenarien: Aktuelle Prüfungen führen „Pod-to-Pod“-Netzwerkleistungstests durch, und es wurde ein neues „Pod-to-Service“-Skript hinzugefügt, das Tests näher an realen Bedingungen durchführt. In der Praxis funktioniert Ihr Pod mit API mit der Basis als Dienst und nicht über die Pod-IP-Adresse (natürlich prüfen wir für beide Szenarien sowohl TCP als auch UDP).
  • Ressourcenverbrauch: Jeder Test verfügt nun über einen eigenen Ressourcenvergleich
  • Entfernen von Anwendungstests: Wir führen keine HTTP-, FTP- und SCP-Tests mehr durch, da unsere fruchtbare Zusammenarbeit mit der Community und CNI-Betreuern eine Lücke zwischen iperf-Ergebnissen über TCP und Curl-Ergebnissen aufgrund einer Verzögerung beim CNI-Start (die ersten paar Sekunden von Pod) entdeckt hat Startup, was unter realen Bedingungen nicht typisch ist).
  • Open Source: Alle Testquellen (Skripte, YML-Einstellungen und Original-Rohdaten) sind verfügbar hier

Referenztestprotokoll

Das Protokoll wird ausführlich beschrieben hierBitte beachten Sie, dass es in diesem Artikel um Ubuntu 18.04 mit dem Standardkernel geht.

Auswahl eines CNI für die Bewertung

Dieser Test zielt darauf ab, CNIs zu vergleichen, die mit einer Yaml-Datei konfiguriert wurden (daher sind alle von Skripten installierten CNIs wie VPP und andere ausgeschlossen).

Unsere ausgewählten CNIs zum Vergleich:

  • Antrea v.0.9.1
  • Calico v3.16
  • Canal v3.16 (Flannel-Netzwerk + Calico-Netzwerkrichtlinien)
  • Cilium 1.8.2
  • Flanell 0.12.0
  • Kube-Router aktuell (2020)
  • WeaveNet 2.7.0

MTU für CNI konfigurieren

Zunächst prüfen wir die Auswirkung der automatischen MTU-Erkennung auf die TCP-Leistung:

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

Einfluss von MTU auf die TCP-Leistung

Eine noch größere Lücke besteht bei der Verwendung von UDP:

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)
Einfluss von MTU auf die UDP-Leistung

Angesichts der RIESIGEN Auswirkungen auf die Leistung, die in den Tests festgestellt wurden, möchten wir allen CNI-Betreuern einen Hoffnungsbrief senden: Bitte fügen Sie CNI die automatische MTU-Erkennung hinzu. Du rettest Kätzchen, Einhörner und sogar das süßeste: den kleinen Devop.

Wenn Sie CNI jedoch ohne Unterstützung für die automatische MTU-Erkennung verwenden müssen, können Sie es manuell konfigurieren, um Leistung zu erzielen. Bitte beachten Sie, dass dies für Calico, Canal und WeaveNet gilt.

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)
Meine kleine Bitte an die begleitenden CNIs...

CNI-Tests: Rohdaten

In diesem Abschnitt vergleichen wir CNI mit der korrekten MTU (automatisch ermittelt oder manuell eingestellt). Das Hauptziel hierbei ist die Darstellung der Rohdaten in Diagrammen.

Farblegende:

  • Grau – Probe (d. h. blankes Eisen)
  • grün – Bandbreite über 9500 Mbit/s
  • Gelb – Bandbreite über 9000 Mbit/s
  • Orange – Bandbreite über 8000 Mbit/s
  • rot – Bandbreite unter 8000 Mbit/s
  • Blau – neutral (nicht bandbreitenabhängig)

Ressourcenverbrauch im Leerlauf

Überprüfen Sie zunächst den Ressourcenverbrauch, wenn der Cluster „schläft“.

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)
Ressourcenverbrauch im Leerlauf

Pod-zu-Pod

In diesem Szenario wird davon ausgegangen, dass der Client-Pod über seine IP-Adresse eine direkte Verbindung zum Server-Pod herstellt.

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)
Pod-zu-Pod-Szenario

TCP

Pod-zu-Pod-TCP-Ergebnisse und entsprechender Ressourcenverbrauch:

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

UDP

Pod-zu-Pod-UDP-Ergebnisse und entsprechender Ressourcenverbrauch:

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

Pod-to-Service

Dieser Abschnitt ist für reale Anwendungsfälle relevant. Der Client-Pod stellt über den ClusterIP-Dienst eine Verbindung zum Server-Pod her.

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)
Pod-to-Service-Skript

TCP

Pod-to-Service-TCP-Ergebnisse und entsprechender Ressourcenverbrauch:

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

UDP

Pod-to-Service-UDP-Ergebnisse und entsprechender Ressourcenverbrauch:

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

Unterstützung von Netzwerkrichtlinien

Unter allen oben genannten ist Flannel der einzige, der die Politik nicht unterstützt. Alle anderen implementieren Netzwerkrichtlinien korrekt, einschließlich eingehender und ausgehender Daten. Ausgezeichnete Arbeit!

CNI-Verschlüsselung

Unter den überprüften CNIs gibt es solche, die den Netzwerkaustausch zwischen Pods verschlüsseln können:

  • Antrea nutzt IPsec
  • Kaliko mit Drahtschutz
  • Cilium mit IPsec
  • WeaveNet mit IPsec

Durchsatz

Da weniger CNIs übrig sind, fassen wir alle Szenarien in einem Diagramm zusammen:

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

Ressourcenverbrauch

In diesem Abschnitt bewerten wir die Ressourcen, die bei der Verarbeitung der Pod-zu-Pod-Kommunikation in TCP und UDP verwendet werden. Es macht keinen Sinn, ein Pod-zu-Service-Diagramm zu zeichnen, da es keine zusätzlichen Informationen liefert.

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

Alles zusammenfügen

Versuchen wir, alle Diagramme zu wiederholen. Wir haben hier ein wenig Subjektivität eingeführt und die tatsächlichen Werte durch die Wörter „vwry fast“, „low“ usw. ersetzt.

CNI-Leistungsbewertung für Kubernetes über 10G-Netzwerk (August 2020)

Fazit und meine Schlussfolgerungen

Dies ist ein wenig subjektiv, da ich meine eigene Interpretation der Ergebnisse wiedergebe.

Ich bin froh, dass neue CNIs erschienen sind, Antrea eine gute Leistung erbracht hat und viele Funktionen bereits in frühen Versionen implementiert wurden: automatische MTU-Erkennung, Verschlüsselung und einfache Installation.

Wenn wir die Leistung vergleichen, funktionieren alle CNIs gut, außer Kube-OVN und Kube-Router. Kube-Router konnte die MTU auch nicht erkennen, ich habe nirgendwo in der Dokumentation eine Möglichkeit gefunden, sie zu konfigurieren (hier eine Anfrage zu diesem Thema ist offen).

Bezüglich des Ressourcenverbrauchs verbraucht Cilium immer noch mehr RAM als andere, allerdings zielt der Hersteller eindeutig auf große Cluster ab, was eindeutig nicht mit einem Test auf einem Drei-Knoten-Cluster gleichzusetzen ist. Kube-OVN verbraucht ebenfalls viele CPU- und RAM-Ressourcen, ist aber ein junges CNI, das auf Open vSwitch basiert (wie Antrea ist es leistungsfähiger und verbraucht weniger).

Jeder außer Flannel hat Netzwerkrichtlinien. Es ist sehr wahrscheinlich, dass er sie nie unterstützen wird, denn das Ziel ist einfacher als eine gedünstete Rübe: Je leichter, desto besser.

Auch die Verschlüsselungsleistung ist unter anderem erstaunlich. Calico ist eines der ältesten CNIs, die Verschlüsselung wurde jedoch erst vor ein paar Wochen hinzugefügt. Sie entschieden sich für Wireguard anstelle von IPsec, und einfach ausgedrückt: Es funktioniert großartig und erstaunlich und übertrifft andere CNIs in diesem Teil des Tests völlig. Natürlich steigt der Ressourcenverbrauch durch die Verschlüsselung, aber der erreichte Durchsatz lohnt sich (Calico zeigte im Verschlüsselungstest eine sechsfache Verbesserung im Vergleich zu Cilium, das auf dem zweiten Platz liegt). Darüber hinaus können Sie Wireguard jederzeit aktivieren, nachdem Sie Calico im Cluster bereitgestellt haben, und Sie können es bei Bedarf auch für kurze Zeit oder dauerhaft deaktivieren. Dabei ist es unglaublich praktisch! Wir erinnern Sie daran, dass Calico MTU derzeit nicht automatisch erkennt (diese Funktion ist für zukünftige Versionen geplant). Konfigurieren Sie daher unbedingt die MTU, wenn Ihr Netzwerk Jumbo Frames (MTU 9000) unterstützt.

Beachten Sie unter anderem, dass Cilium den Datenverkehr zwischen Cluster-Knoten (und nicht nur zwischen Pods) verschlüsseln kann, was für öffentliche Cluster-Knoten sehr wichtig sein kann.

Als Fazit schlage ich folgende Anwendungsfälle vor:

  • Benötige CNI für einen sehr kleinen Cluster ODER ich benötige keine Sicherheit: arbeiten mit Flanell, das leichteste und stabilste CNI (Er ist auch einer der ältesten, der Legende nach wurde er vom Homo Kubernautus oder Homo Contaitorus erfunden). Vielleicht interessiert Sie auch das genialste Projekt k3s, überprüfen!
  • Benötigen Sie CNI für einen regulären Cluster: Kattun - Ihre Wahl, aber vergessen Sie nicht, die MTU bei Bedarf zu konfigurieren. Sie können einfach und natürlich mit Netzwerkrichtlinien herumspielen, die Verschlüsselung ein- und ausschalten usw.
  • Benötigen Sie CNI für (sehr) große Cluster: Nun, der Test zeigt nicht das Verhalten großer Cluster, ich würde gerne Tests durchführen, aber wir haben nicht Hunderte von Servern mit einer 10-Gbit/s-Verbindung. Die beste Option besteht also darin, einen modifizierten Test auf Ihren Knoten durchzuführen, zumindest mit Calico und Cilium.

Source: habr.com

Kommentar hinzufügen