Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

TL? DR: Όλα τα CNI λειτουργούν όπως θα έπρεπε, με εξαίρεση το Kube-Router και το Kube-OVN, το Calico, με εξαίρεση την αυτόματη ανίχνευση MTU, είναι το καλύτερο.

Ενημέρωση άρθρου των προηγούμενων ελέγχων μου (2018 и 2019), τη στιγμή της δοκιμής χρησιμοποιώ το Kubernetes 1.19 στο Ubuntu 18.04 με ενημερωμένα CNI από τον Αύγουστο του 2020.

Πριν βουτήξουμε στις μετρήσεις...

Τι νέο υπάρχει από τον Απρίλιο του 2019;

  • Δυνατότητα δοκιμής στο δικό σας σύμπλεγμα: Μπορείτε να εκτελέσετε δοκιμές στο δικό σας σύμπλεγμα χρησιμοποιώντας το εργαλείο μας Σημείο αναφοράς δικτύου Kubernetes: knb
  • Εμφανίστηκαν νέα μέλη
  • Νέα σενάρια: Οι τρέχοντες έλεγχοι εκτελούν δοκιμές απόδοσης δικτύου "Pod-to-Pod" και προστέθηκε ένα νέο σενάριο "Pod-to-Service" που εκτελεί δοκιμές πιο κοντά στις πραγματικές συνθήκες. Στην πράξη, το Pod with API σας λειτουργεί με τη βάση ως υπηρεσία, και όχι μέσω της διεύθυνσης ip του Pod (φυσικά ελέγχουμε και το TCP και το UDP και για τα δύο σενάρια).
  • Κατανάλωση πόρων: κάθε δοκιμή έχει πλέον τη δική της σύγκριση πόρων
  • Κατάργηση δοκιμών εφαρμογής: Δεν κάνουμε πλέον δοκιμές HTTP, FTP και SCP καθώς η γόνιμη συνεργασία μας με την κοινότητα και τους συντηρητές CNI ανακάλυψε ένα κενό μεταξύ των αποτελεσμάτων iperf έναντι του TCP και των αποτελεσμάτων curl λόγω καθυστέρησης στην εκκίνηση του CNI (τα πρώτα δευτερόλεπτα του Pod εκκίνησης, κάτι που δεν είναι τυπικό σε πραγματικές συνθήκες).
  • Ανοιχτός κώδικας: όλες οι πηγές δοκιμής (σενάρια, ρυθμίσεις yml και πρωτότυπα "ακατέργαστα" δεδομένα) είναι διαθέσιμες εδώ

Πρωτόκολλο δοκιμής αναφοράς

Το πρωτόκολλο περιγράφεται αναλυτικά εδώΛάβετε υπόψη ότι αυτό το άρθρο αφορά το Ubuntu 18.04 με τον προεπιλεγμένο πυρήνα.

Επιλογή CNI για αξιολόγηση

Αυτή η δοκιμή στοχεύει στη σύγκριση CNI που έχουν ρυθμιστεί με ένα αρχείο yaml (επομένως, όλα αυτά που είναι εγκατεστημένα από σενάρια, όπως το VPP και άλλα, εξαιρούνται).

Τα επιλεγμένα CNI μας για σύγκριση:

  • Antrea v.0.9.1
  • Calico v3.16
  • Canal v3.16 (Δίκτυο Flannel + Πολιτικές δικτύου Calico)
  • Κίλιο 1.8.2
  • Φανέλα 0.12.0
  • Το τελευταίο Kube-router (2020–08–25)
  • WeaveNet 2.7.0

Διαμόρφωση MTU για CNI

Πρώτα απ 'όλα, ελέγχουμε την επίδραση της αυτόματης ανίχνευσης MTU στην απόδοση του TCP:

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Επίδραση του MTU στην απόδοση του TCP

Ένα ακόμη μεγαλύτερο κενό εντοπίζεται όταν χρησιμοποιείτε το UDP:

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)
Επίδραση του MTU στην απόδοση του UDP

Δεδομένου του ΤΕΡΑΣΤΙΟΥ αντίκτυπου στην απόδοση που αποκαλύφθηκε στις δοκιμές, θα θέλαμε να στείλουμε μια ελπίδα σε όλους τους συντηρητές CNI: προσθέστε την αυτόματη ανίχνευση MTU στο CNI. Θα σώσετε γατάκια, μονόκερους και ακόμη και τον πιο χαριτωμένο: τον μικρό Ντέβοπ.

Ωστόσο, εάν χρειάζεται να χρησιμοποιήσετε το CNI χωρίς υποστήριξη για αυτόματη ανίχνευση MTU, μπορείτε να το διαμορφώσετε με μη αυτόματο τρόπο για να έχετε απόδοση. Λάβετε υπόψη ότι αυτό ισχύει για Calico, Canal και WeaveNet.

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)
Το μικρό μου αίτημα προς τα συνοδευτικά CNI...

Δοκιμή CNI: Ακατέργαστα δεδομένα

Σε αυτήν την ενότητα, θα συγκρίνουμε το CNI με το σωστό MTU (που καθορίζεται αυτόματα ή ρυθμίζεται χειροκίνητα). Ο κύριος στόχος εδώ είναι να εμφανιστούν τα ακατέργαστα δεδομένα σε γραφήματα.

Θρύλος χρωμάτων:

  • γκρι - δείγμα (δηλαδή γυμνό σίδερο)
  • πράσινο - εύρος ζώνης άνω των 9500 Mbps
  • κίτρινο - εύρος ζώνης άνω των 9000 Mbps
  • πορτοκαλί - εύρος ζώνης άνω των 8000 Mbps
  • κόκκινο - εύρος ζώνης κάτω από 8000 Mbps
  • μπλε - ουδέτερο (δεν σχετίζεται με το εύρος ζώνης)

Κατανάλωση πόρων χωρίς φορτίο

Πρώτα απ 'όλα, ελέγξτε την κατανάλωση πόρων όταν το σύμπλεγμα "κοιμάται".

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)
Κατανάλωση πόρων χωρίς φορτίο

Pod-to-Pod

Αυτό το σενάριο προϋποθέτει ότι το πρόγραμμα-πελάτης Pod συνδέεται απευθείας με το διακομιστή Pod χρησιμοποιώντας τη διεύθυνση IP του.

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)
Σενάριο Pod-to-Pod

TCP

Αποτελέσματα TCP Pod-to-Pod και αντίστοιχη κατανάλωση πόρων:

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

UDP

Αποτελέσματα UDP Pod-to-Pod και αντίστοιχη κατανάλωση πόρων:

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Pod-to-Service

Αυτή η ενότητα είναι σχετική για περιπτώσεις πραγματικής χρήσης, ο πελάτης Pod συνδέεται με τον διακομιστή Pod μέσω της υπηρεσίας ClusterIP.

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)
Σενάριο Pod-to-Service

TCP

Αποτελέσματα TCP Pod-to-Service και αντίστοιχη κατανάλωση πόρων:

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

UDP

Αποτελέσματα UDP Pod-to-Service και αντίστοιχη κατανάλωση πόρων:

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Υποστήριξη πολιτικής δικτύου

Μεταξύ όλων των παραπάνω, ο μόνος που δεν υποστηρίζει την πολιτική είναι ο Φλανέλ. Όλα τα άλλα εφαρμόζουν σωστά τις πολιτικές δικτύου, συμπεριλαμβανομένων των εισερχόμενων και εξερχόμενων. Καλή δουλειά!

Κρυπτογράφηση CNI

Μεταξύ των ελεγμένων CNI υπάρχουν εκείνα που μπορούν να κρυπτογραφήσουν την ανταλλαγή δικτύου μεταξύ Pods:

  • Antrea χρησιμοποιώντας IPsec
  • Calico με χρήση καλωδίων
  • Ciliium με χρήση IPsec
  • WeaveNet χρησιμοποιώντας IPsec

Εύρος ζώνης

Δεδομένου ότι απομένουν λιγότερα CNI, ας βάλουμε όλα τα σενάρια σε ένα γράφημα:

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Κατανάλωση πόρων

Σε αυτήν την ενότητα, θα αξιολογήσουμε τους πόρους που χρησιμοποιούνται κατά την επεξεργασία της επικοινωνίας Pod-to-Pod σε TCP και UDP. Δεν έχει νόημα να σχεδιάσετε ένα γράφημα Pod-to-Service αφού δεν παρέχει πρόσθετες πληροφορίες.

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Βάζοντάς τα όλα μαζί

Ας προσπαθήσουμε να επαναλάβουμε όλα τα γραφήματα, εισάγαμε εδώ μια μικρή υποκειμενικότητα, αντικαθιστώντας τις πραγματικές τιμές με τις λέξεις "vwry fast", "low" κ.λπ.

Αξιολόγηση απόδοσης CNI για το δίκτυο Kubernetes μέσω 10G (Αύγουστος 2020)

Συμπέρασμα και τα συμπεράσματά μου

Αυτό είναι λίγο υποκειμενικό, αφού μεταφέρω τη δική μου ερμηνεία των αποτελεσμάτων.

Χαίρομαι που εμφανίστηκαν νέα CNI, η Antrea απέδωσε καλά, πολλές λειτουργίες εφαρμόστηκαν ακόμη και σε πρώιμες εκδόσεις: αυτόματη ανίχνευση MTU, κρυπτογράφηση και εύκολη εγκατάσταση.

Αν συγκρίνουμε την απόδοση, όλα τα CNI λειτουργούν καλά, εκτός από το Kube-OVN και το Kube-Router. Το Kube-Router δεν μπόρεσε επίσης να εντοπίσει το MTU, δεν βρήκα τρόπο να το ρυθμίσω πουθενά στην τεκμηρίωση (εδώ ένα αίτημα για αυτό το θέμα είναι ανοιχτό).

Όσον αφορά την κατανάλωση πόρων, το Cilium εξακολουθεί να χρησιμοποιεί περισσότερη μνήμη RAM από άλλα, αλλά ο κατασκευαστής στοχεύει σαφώς μεγάλα cluster, κάτι που σαφώς δεν είναι το ίδιο με μια δοκιμή σε ένα σύμπλεγμα τριών κόμβων. Το Kube-OVN καταναλώνει επίσης πολλούς πόρους CPU και RAM, αλλά είναι ένα νέο CNI που βασίζεται στο Open vSwitch (όπως το Antrea, αποδίδει καλύτερα και καταναλώνει λιγότερο).

Όλοι εκτός από το Flannel έχουν πολιτικές δικτύου. Είναι πολύ πιθανό να μην τα υποστηρίξει ποτέ, αφού ο στόχος είναι πιο απλός από ένα γογγύλι στον ατμό: όσο πιο ελαφρύ, τόσο το καλύτερο.

Επίσης, μεταξύ άλλων, η απόδοση κρυπτογράφησης είναι εκπληκτική. Το Calico είναι ένα από τα παλαιότερα CNI, αλλά η κρυπτογράφηση προστέθηκε μόλις πριν από μερικές εβδομάδες. Επέλεξαν το wireguard αντί για το IPsec, και με απλά λόγια, λειτουργεί εξαιρετικά και εκπληκτικά, επισκιάζοντας εντελώς άλλα CNI σε αυτό το μέρος της δοκιμής. Φυσικά, η κατανάλωση πόρων αυξάνεται λόγω κρυπτογράφησης, αλλά η απόδοση που επιτυγχάνεται αξίζει τον κόπο (το Calico έδειξε εξαπλάσια βελτίωση στη δοκιμή κρυπτογράφησης σε σύγκριση με το Cilium, το οποίο κατατάσσεται δεύτερο). Επιπλέον, μπορείτε να ενεργοποιήσετε το wireguard ανά πάσα στιγμή μετά την ανάπτυξη του Calico στο σύμπλεγμα και μπορείτε επίσης να το απενεργοποιήσετε για σύντομο χρονικό διάστημα ή μόνιμα εάν το επιθυμείτε. Είναι απίστευτα βολικό όμως! Σας υπενθυμίζουμε ότι το Calico δεν ανιχνεύει αυτόματα το MTU (αυτή η δυνατότητα έχει προγραμματιστεί για μελλοντικές εκδόσεις), επομένως φροντίστε να διαμορφώσετε το MTU εάν το δίκτυό σας υποστηρίζει Jumbo Frames (MTU 9000).

Μεταξύ άλλων, σημειώστε ότι το Cilium μπορεί να κρυπτογραφήσει την κυκλοφορία μεταξύ κόμβων συμπλέγματος (και όχι μόνο μεταξύ Pods), κάτι που μπορεί να είναι πολύ σημαντικό για τους δημόσιους κόμβους συμπλέγματος.

Ως συμπέρασμα, προτείνω τις ακόλουθες περιπτώσεις χρήσης:

  • Χρειάζομαι CNI για ένα πολύ μικρό σύμπλεγμα Ή δεν χρειάζομαι ασφάλεια: δουλεύω με Φανέλα, το ελαφρύτερο και πιο σταθερό CNI (είναι επίσης ένας από τους παλαιότερους, σύμφωνα με το μύθο που εφευρέθηκε από τον Homo Kubernautus ή τον Homo Contaitorus). Μπορεί επίσης να σας ενδιαφέρει το πιο έξυπνο έργο k3s, ελέγξτε!
  • Χρειάζεστε CNI για ένα κανονικό σύμπλεγμα: τσίτι - επιλογή σας, αλλά μην ξεχάσετε να διαμορφώσετε το MTU εάν χρειάζεται. Μπορείτε εύκολα και φυσικά να παίξετε με τις πολιτικές δικτύου, να ενεργοποιήσετε και να απενεργοποιήσετε την κρυπτογράφηση κ.λπ.
  • Χρειάζεστε CNI για (πολύ) μεγάλης κλίμακας σύμπλεγμα: Λοιπόν, η δοκιμή δεν δείχνει τη συμπεριφορά μεγάλων συμπλεγμάτων, θα χαρώ να πραγματοποιήσω δοκιμές, αλλά δεν έχουμε εκατοντάδες διακομιστές με σύνδεση 10 Gbps. Έτσι, η καλύτερη επιλογή είναι να εκτελέσετε μια τροποποιημένη δοκιμή στους κόμβους σας, τουλάχιστον με το Calico και το Cilium.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο