Τρία επίπεδα αυτόματης κλιμάκωσης στο Kubernetes: Πώς να τα χρησιμοποιήσετε αποτελεσματικά

Τρία επίπεδα αυτόματης κλιμάκωσης στο Kubernetes: Πώς να τα χρησιμοποιήσετε αποτελεσματικά
Για να κατακτήσετε πλήρως το Kubernetes, πρέπει να γνωρίζετε διαφορετικούς τρόπους κλιμάκωσης πόρων συμπλέγματος: κατά σύμφωνα με τους προγραμματιστές του συστήματος, αυτό είναι ένα από τα κύρια καθήκοντα του Kubernetes. Παρέχουμε μια επισκόπηση υψηλού επιπέδου των μηχανισμών αυτόματης κλιμάκωσης και αλλαγής μεγέθους συμπλέγματος οριζόντιας και κάθετης κλίμακας, καθώς και συστάσεις για τον τρόπο αποτελεσματικής χρήσης τους.

άρθρο Kubernetes Autoscaling 101: Cluster Autoscaler, Horizontal Autoscaler, and Vertical Pod Autoscaler μεταφράστηκε από την ομάδα που εφάρμοσε την αυτόματη κλιμάκωση Kubernetes aaS από το Mail.ru.

Γιατί είναι σημαντικό να σκεφτείτε την κλιμάκωση

Kubernetes - ένα εργαλείο για τη διαχείριση των πόρων και την ενορχήστρωση. Φυσικά, είναι ωραίο να ασχολούμαστε με τις συναρπαστικές δυνατότητες ανάπτυξης, παρακολούθησης και διαχείρισης pods (το pod είναι μια ομάδα κοντέινερ που εκτοξεύεται ως απάντηση σε ένα αίτημα).

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

  1. Πώς να κλιμακώσετε τις ενότητες και τις εφαρμογές;
  2. Πώς να διατηρήσετε τα δοχεία λειτουργικά και αποτελεσματικά;
  3. Πώς να ανταποκριθείτε σε συνεχείς αλλαγές στον κώδικα και τον φόρτο εργασίας από τους χρήστες;

Η διαμόρφωση συμπλεγμάτων Kubernetes για την εξισορρόπηση πόρων και απόδοσης μπορεί να είναι δύσκολη και απαιτεί εξειδικευμένη γνώση των εσωτερικών λειτουργιών του Kubernetes. Ο φόρτος εργασίας της εφαρμογής ή των υπηρεσιών σας μπορεί να κυμαίνεται κατά τη διάρκεια της ημέρας ή ακόμη και κατά τη διάρκεια μιας ώρας, επομένως η εξισορρόπηση θεωρείται καλύτερα ως μια συνεχής διαδικασία.

Επίπεδα αυτόματης κλιμάκωσης Kubernetes

Η αποτελεσματική αυτόματη κλιμάκωση απαιτεί συντονισμό μεταξύ δύο επιπέδων:

  1. Επίπεδο Pod, συμπεριλαμβανομένου του οριζόντιου (Horizontal Pod Autoscaler, HPA) και του κατακόρυφου Autoscaler Pod (Vertical Pod Autoscaler, VPA). Αυτό κλιμακώνει τους διαθέσιμους πόρους για τα κοντέινερ σας.
  2. Επίπεδο συμπλέγματος, το οποίο διαχειρίζεται το Cluster Autoscaler (CA), το οποίο αυξάνει ή μειώνει τον αριθμό των κόμβων μέσα στο σύμπλεγμα.

Μονάδα Horizontal Autoscaler (HPA).

Όπως υποδηλώνει το όνομα, το HPA κλιμακώνει τον αριθμό των αντιγράφων λοβών. Τα περισσότερα devop χρησιμοποιούν CPU και φορτίο μνήμης ως εναύσματα για την αλλαγή του αριθμού των αντιγράφων. Ωστόσο, είναι δυνατή η κλιμάκωση του συστήματος με βάση προσαρμοσμένες μετρήσεις, δικα τους συνδυασμός ή εξωτερικές μετρήσεις.

Διάγραμμα λειτουργίας HPA υψηλού επιπέδου:

  1. Το HPA ελέγχει συνεχώς τις μετρικές τιμές που καθορίζονται κατά την εγκατάσταση σε προεπιλεγμένο διάστημα 30 δευτερολέπτων.
  2. Το HPA επιχειρεί να αυξήσει τον αριθμό των μονάδων εάν επιτευχθεί το καθορισμένο όριο.
  3. Το HPA ενημερώνει τον αριθμό των αντιγράφων στον ελεγκτή ανάπτυξης/αντιγραφής.
  4. Στη συνέχεια, ο ελεγκτής ανάπτυξης/αντιγραφής αναπτύσσει τυχόν απαραίτητες πρόσθετες μονάδες.

Τρία επίπεδα αυτόματης κλιμάκωσης στο Kubernetes: Πώς να τα χρησιμοποιήσετε αποτελεσματικά
Το HPA ξεκινά τη διαδικασία ανάπτυξης της μονάδας όταν επιτευχθεί ένα μετρικό όριο

Όταν χρησιμοποιείτε HPA, λάβετε υπόψη τα ακόλουθα:

  • Το προεπιλεγμένο διάστημα ελέγχου HPA είναι 30 δευτερόλεπτα. Ορίζεται από τη σημαία horizontal-pod-autoscaler-sync-period στον διαχειριστή ελεγκτή.
  • Το προεπιλεγμένο σχετικό σφάλμα είναι 10%.
  • Μετά την τελευταία αύξηση του αριθμού των ενοτήτων, η HPA αναμένει ότι οι μετρήσεις θα σταθεροποιηθούν εντός τριών λεπτών. Αυτό το διάστημα ορίζεται από τη σημαία horizontal-pod-autoscaler-upscale-delay.
  • Μετά την τελευταία μείωση του αριθμού των μονάδων, το HPA περιμένει πέντε λεπτά για να σταθεροποιηθεί. Αυτό το διάστημα ορίζεται από τη σημαία horizontal-pod-autoscaler-downscale-delay.
  • Το HPA λειτουργεί καλύτερα με αντικείμενα ανάπτυξης παρά με ελεγκτές αναπαραγωγής. Η οριζόντια αυτόματη κλιμάκωση δεν είναι συμβατή με την κυλιόμενη ενημέρωση, η οποία χειρίζεται άμεσα τους ελεγκτές αναπαραγωγής. Με την ανάπτυξη, ο αριθμός των αντιγράφων εξαρτάται άμεσα από τα αντικείμενα ανάπτυξης.

Κάθετη αυτόματη κλιμάκωση λοβών

Η κατακόρυφη αυτόματη κλιμάκωση (VPA) εκχωρεί περισσότερο (ή λιγότερο) χρόνο ή μνήμη CPU σε υπάρχοντα pods. Κατάλληλο για κρατικές ή ανιθαγενείς pods, αλλά προορίζεται κυρίως για κρατικές υπηρεσίες. Ωστόσο, μπορείτε επίσης να χρησιμοποιήσετε το VPA για λειτουργικές μονάδες χωρίς ιθαγένεια, εάν χρειάζεται να προσαρμόσετε αυτόματα την ποσότητα των πόρων που είχαν αρχικά κατανεμηθεί.

Το VPA ανταποκρίνεται επίσης σε συμβάντα OOM (εκτός μνήμης). Η αλλαγή του χρόνου και της μνήμης της CPU απαιτεί επανεκκίνηση των pod. Κατά την επανεκκίνηση, η VPA σέβεται τον προϋπολογισμό κατανομής (προϋπολογισμός διανομής pods, ΠΣΠ) για να εγγυηθεί τον ελάχιστο απαιτούμενο αριθμό ενοτήτων.

Μπορείτε να ορίσετε τους ελάχιστους και μέγιστους πόρους για κάθε ενότητα. Έτσι, μπορείτε να περιορίσετε τη μέγιστη ποσότητα μνήμης που εκχωρείται στα 8 GB. Αυτό είναι χρήσιμο εάν οι τρέχοντες κόμβοι σίγουρα δεν μπορούν να εκχωρήσουν περισσότερα από 8 GB μνήμης ανά κοντέινερ. Λεπτομερείς προδιαγραφές και μηχανισμός λειτουργίας περιγράφονται στο επίσημο wiki VPA.

Επιπλέον, το VPA έχει μια ενδιαφέρουσα λειτουργία συστάσεων (VPA Recommender). Παρακολουθεί τη χρήση πόρων και τα συμβάντα OOM όλων των μονάδων για να προτείνει νέες τιμές μνήμης και χρόνου CPU με βάση έναν έξυπνο αλγόριθμο που βασίζεται σε ιστορικές μετρήσεις. Υπάρχει επίσης ένα API που παίρνει μια λαβή pod και επιστρέφει προτεινόμενες τιμές πόρων.

Αξίζει να σημειωθεί ότι το VPA Recommender δεν παρακολουθεί το "όριο" πόρων. Αυτό μπορεί να έχει ως αποτέλεσμα η μονάδα να μονοπωλεί πόρους μέσα στους κόμβους. Είναι καλύτερα να ορίσετε το όριο σε επίπεδο χώρου ονομάτων για να αποφύγετε την τεράστια κατανάλωση μνήμης ή CPU.

Σχέδιο λειτουργίας VPA υψηλού επιπέδου:

  1. Το VPA ελέγχει συνεχώς τις μετρικές τιμές που καθορίζονται κατά την εγκατάσταση σε προεπιλεγμένο διάστημα 10 δευτερολέπτων.
  2. Εάν επιτευχθεί το καθορισμένο όριο, το VPA επιχειρεί να αλλάξει το κατανεμημένο ποσό πόρων.
  3. Το VPA ενημερώνει τον αριθμό των πόρων εντός του ελεγκτή ανάπτυξης/αναπαραγωγής.
  4. Όταν οι λειτουργικές μονάδες επανεκκινούνται, όλοι οι νέοι πόροι εφαρμόζονται στις δημιουργημένες παρουσίες.

Τρία επίπεδα αυτόματης κλιμάκωσης στο Kubernetes: Πώς να τα χρησιμοποιήσετε αποτελεσματικά
Το VPA προσθέτει την απαιτούμενη ποσότητα πόρων

Λάβετε υπόψη τα ακόλουθα σημεία όταν χρησιμοποιείτε το VPA:

  • Η κλιμάκωση απαιτεί υποχρεωτική επανεκκίνηση του pod. Αυτό είναι απαραίτητο για την αποφυγή ασταθούς λειτουργίας μετά την πραγματοποίηση αλλαγών. Για αξιοπιστία, οι μονάδες επανεκκινούνται και διανέμονται στους κόμβους με βάση τους νέους πόρους που έχουν κατανεμηθεί.
  • Το VPA και το HPA δεν είναι ακόμη συμβατά μεταξύ τους και δεν μπορούν να εκτελεστούν στα ίδια pods. Εάν χρησιμοποιείτε και τους δύο μηχανισμούς κλιμάκωσης στο ίδιο σύμπλεγμα, βεβαιωθείτε ότι οι ρυθμίσεις σας εμποδίζουν την ενεργοποίησή τους στα ίδια αντικείμενα.
  • Το VPA συντονίζει αιτήματα κοντέινερ για πόρους με βάση μόνο την προηγούμενη και την τρέχουσα χρήση. Δεν θέτει όρια χρήσης πόρων. Ενδέχεται να υπάρχουν προβλήματα με τις εφαρμογές που δεν λειτουργούν σωστά και αρχίζουν να αναλαμβάνουν όλο και περισσότερους πόρους, αυτό θα οδηγήσει στην απενεργοποίηση αυτού του pod της Kubernetes.
  • Η VPA βρίσκεται ακόμη σε πρώιμο στάδιο ανάπτυξης. Να είστε προετοιμασμένοι ότι το σύστημα ενδέχεται να υποστεί κάποιες αλλαγές στο εγγύς μέλλον. Μπορείτε να διαβάσετε για γνωστούς περιορισμούς и αναπτυξιακά σχέδια. Έτσι, υπάρχουν σχέδια για την υλοποίηση της κοινής λειτουργίας των VPA και HPA, καθώς και για την ανάπτυξη μονάδων μαζί με μια πολιτική κάθετης αυτόματης κλιμάκωσης για αυτά (για παράδειγμα, μια ειδική ετικέτα «απαιτείται VPA»).

Αυτόματη κλιμάκωση ενός συμπλέγματος Kubernetes

Το Cluster Autoscaler (CA) αλλάζει τον αριθμό των κόμβων με βάση τον αριθμό των ομάδων αναμονής. Το σύστημα ελέγχει περιοδικά για εκκρεμείς ενότητες - και αυξάνει το μέγεθος του συμπλέγματος εάν χρειάζονται περισσότεροι πόροι και εάν το σύμπλεγμα δεν υπερβαίνει τα καθορισμένα όρια. Η ΑΠ επικοινωνεί με τον πάροχο υπηρεσιών cloud, ζητά πρόσθετους κόμβους από αυτόν ή απελευθερώνει αδρανείς. Η πρώτη γενικά διαθέσιμη έκδοση του CA παρουσιάστηκε στο Kubernetes 1.8.

Σχέδιο λειτουργίας Α.Ε. υψηλού επιπέδου:

  1. Η CA ελέγχει για εκκρεμείς μονάδες σε προεπιλεγμένο διάστημα 10 δευτερολέπτων.
  2. Εάν ένα ή περισσότερα pods βρίσκονται σε κατάσταση αναμονής επειδή το σύμπλεγμα δεν έχει αρκετούς διαθέσιμους πόρους για να τους εκχωρήσει, επιχειρεί να παρέχει έναν ή περισσότερους επιπλέον κόμβους.
  3. Όταν ο πάροχος υπηρεσιών cloud εκχωρήσει τον απαιτούμενο κόμβο, ενώνεται με το σύμπλεγμα και είναι έτοιμος να εξυπηρετήσει τα pods.
  4. Ο προγραμματιστής Kubernetes διανέμει εκκρεμείς ομάδες σε έναν νέο κόμβο. Εάν μετά από αυτό ορισμένες λειτουργικές μονάδες παραμένουν σε κατάσταση αναμονής, η διαδικασία επαναλαμβάνεται και νέοι κόμβοι προστίθενται στο σύμπλεγμα.

Τρία επίπεδα αυτόματης κλιμάκωσης στο Kubernetes: Πώς να τα χρησιμοποιήσετε αποτελεσματικά
Αυτόματη παροχή κόμβων συμπλέγματος στο cloud

Λάβετε υπόψη τα ακόλουθα όταν χρησιμοποιείτε CA:

  • Η CA διασφαλίζει ότι όλα τα pod στο σύμπλεγμα έχουν χώρο για εκτέλεση, ανεξάρτητα από το φορτίο της CPU. Προσπαθεί επίσης να διασφαλίσει ότι δεν υπάρχουν περιττοί κόμβοι στο σύμπλεγμα.
  • Η CA καταγράφει την ανάγκη κλιμάκωσης μετά από περίπου 30 δευτερόλεπτα.
  • Μόλις δεν χρειάζεται πλέον ένας κόμβος, η αρχή ΑΠ περιμένει 10 λεπτά πριν την κλιμάκωση του συστήματος.
  • Το σύστημα αυτόματης κλιμάκωσης έχει την έννοια των διαστολέων. Αυτές είναι διαφορετικές στρατηγικές για την επιλογή μιας ομάδας κόμβων στους οποίους θα προστεθούν νέοι κόμβοι.
  • Χρησιμοποιήστε την επιλογή υπεύθυνα cluster-autoscaler.kubernetes.io/safe-to-evict (αληθές). Εάν εγκαταστήσετε πολλά pods ή εάν πολλά από αυτά είναι διάσπαρτα σε όλους τους κόμβους, θα χάσετε σε μεγάλο βαθμό τη δυνατότητα να κλιμακώσετε το σύμπλεγμα.
  • χρήση PodDisruptionBudgetsγια να αποτρέψετε τη διαγραφή pods, η οποία θα μπορούσε να προκαλέσει την πλήρη αποτυχία τμημάτων της εφαρμογής σας.

Πώς αλληλεπιδρούν μεταξύ τους οι αυτόματες διαβαθμίσεις Kubernetes

Για τέλεια αρμονία, η αυτόματη κλιμάκωση θα πρέπει να εφαρμόζεται τόσο σε επίπεδο pod (HPA/VPA) όσο και σε επίπεδο συμπλέγματος. Αλληλεπιδρούν μεταξύ τους σχετικά απλά:

  1. Τα HPA ή τα VPA ενημερώνουν αντίγραφα pod ή πόρους που έχουν εκχωρηθεί σε υπάρχοντα pod.
  2. Εάν δεν υπάρχουν αρκετοί κόμβοι για την προγραμματισμένη κλιμάκωση, η ΑΠ παρατηρεί την παρουσία λοβών σε κατάσταση αναμονής.
  3. Η ΑΠ εκχωρεί νέους κόμβους.
  4. Οι μονάδες διανέμονται σε νέους κόμβους.

Τρία επίπεδα αυτόματης κλιμάκωσης στο Kubernetes: Πώς να τα χρησιμοποιήσετε αποτελεσματικά
Συνεργατικό σύστημα κλίμακας Kubernetes

Συνήθη λάθη στην αυτόματη κλιμάκωση Kubernetes

Υπάρχουν πολλά κοινά προβλήματα που παρουσιάζονται κατά την προσπάθεια υλοποίησης της αυτόματης κλίμακας.

Το HPA και το VPA εξαρτώνται από μετρήσεις και ορισμένα ιστορικά δεδομένα. Εάν διατεθούν ανεπαρκείς πόροι, οι ενότητες θα ελαχιστοποιηθούν και δεν θα μπορούν να δημιουργήσουν μετρήσεις. Σε αυτήν την περίπτωση, η αυτόματη κλιμάκωση δεν θα συμβεί ποτέ.

Η ίδια η λειτουργία κλιμάκωσης είναι ευαίσθητη στο χρόνο. Θέλουμε οι μονάδες και το σύμπλεγμα να κλιμακώνονται γρήγορα - προτού οι χρήστες παρατηρήσουν προβλήματα ή αποτυχίες. Επομένως, θα πρέπει να λαμβάνεται υπόψη ο μέσος χρόνος κλιμάκωσης για τους λοβούς και το σύμπλεγμα.

Ιδανικό σενάριο - 4 λεπτά:

  1. 30 δευτερόλεπτα. Ενημέρωση μετρήσεων στόχου: 30−60 δευτερόλεπτα.
  2. 30 δευτερόλεπτα. Το HPA ελέγχει τις μετρικές τιμές: 30 δευτερόλεπτα.
  3. Λιγότερο από 2 δευτερόλεπτα. Δημιουργούνται pods και μπαίνουν σε κατάσταση αναμονής: 1 δευτερόλεπτο.
  4. Λιγότερο από 2 δευτερόλεπτα. Η CA βλέπει μονάδες αναμονής και στέλνει κλήσεις σε κόμβους παροχής: 1 δευτερόλεπτο.
  5. 3 λεπτά. Ο πάροχος cloud εκχωρεί κόμβους. Το K8s περιμένει μέχρι να είναι έτοιμο: έως 10 λεπτά (ανάλογα με διάφορους παράγοντες).

Το χειρότερο (πιο ρεαλιστικό) σενάριο - 12 λεπτά:

  1. 30 δευτερόλεπτα. Ενημέρωση μετρήσεων στόχου.
  2. 30 δευτερόλεπτα. Το HPA ελέγχει τις μετρικές τιμές.
  3. Λιγότερο από 2 δευτερόλεπτα. Τα pods δημιουργούνται και εισέρχονται σε κατάσταση αναμονής.
  4. Λιγότερο από 2 δευτερόλεπτα. Η ΑΠ βλέπει τις μονάδες αναμονής και πραγματοποιεί κλήσεις για την παροχή των κόμβων.
  5. 10 λεπτά. Ο πάροχος cloud εκχωρεί κόμβους. Το K8s περιμένει μέχρι να είναι έτοιμο. Ο χρόνος αναμονής εξαρτάται από διάφορους παράγοντες, όπως η καθυστέρηση του προμηθευτή, η καθυστέρηση του λειτουργικού συστήματος και τα εργαλεία υποστήριξης.

Μην συγχέετε τους μηχανισμούς κλιμάκωσης των παρόχων cloud με την ΑΠ μας. Το τελευταίο τρέχει μέσα σε ένα σύμπλεγμα Kubernetes, ενώ ο κινητήρας παροχής cloud λειτουργεί σε βάση διανομής κόμβων. Δεν γνωρίζει τι συμβαίνει με τα pod ή την εφαρμογή σας. Αυτά τα συστήματα λειτουργούν παράλληλα.

Πώς να διαχειριστείτε την κλιμάκωση στο Kubernetes

  1. Το Kubernetes είναι ένα εργαλείο διαχείρισης πόρων και ενορχήστρωσης. Οι λειτουργίες για τη διαχείριση ομάδων ομάδων και πόρων συμπλέγματος αποτελούν βασικό ορόσημο για την κατάκτηση του Kubernetes.
  2. Κατανοήστε τη λογική της επεκτασιμότητας pod λαμβάνοντας υπόψη τα HPA και VPA.
  3. Η CA θα πρέπει να χρησιμοποιείται μόνο εάν κατανοείτε καλά τις ανάγκες των λοβών και των δοχείων σας.
  4. Για να διαμορφώσετε βέλτιστα ένα σύμπλεγμα, πρέπει να κατανοήσετε πώς συνεργάζονται διαφορετικά συστήματα κλιμάκωσης.
  5. Κατά την εκτίμηση του χρόνου κλιμάκωσης, λάβετε υπόψη τα σενάρια της χειρότερης και της καλύτερης περίπτωσης.

Πηγή: www.habr.com

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