Τα κατανεμημένα συστήματα μπορεί να είναι δύσκολο να διαχειριστούν επειδή έχουν πολλά κινούμενα, μεταβαλλόμενα στοιχεία που όλα πρέπει να λειτουργούν σωστά για να λειτουργήσει το σύστημα. Εάν ένα από τα στοιχεία αποτύχει, το σύστημα πρέπει να το εντοπίσει, να το παρακάμψει και να το διορθώσει και όλα αυτά πρέπει να γίνουν αυτόματα. Σε αυτήν τη σειρά βέλτιστων πρακτικών Kubernetes, θα μάθουμε πώς να ρυθμίζουμε δοκιμές ετοιμότητας και ζωντάνιας για να ελέγξουμε την υγεία ενός συμπλέγματος Kubernetes.
Ο Έλεγχος υγείας είναι ένας απλός τρόπος για να ενημερώσετε το σύστημα εάν η παρουσία της εφαρμογής σας εκτελείται ή όχι. Εάν η παρουσία της εφαρμογής σας είναι απενεργοποιημένη, τότε άλλες υπηρεσίες δεν θα πρέπει να έχουν πρόσβαση σε αυτήν ή να στέλνουν αιτήματα σε αυτήν. Αντίθετα, το αίτημα πρέπει να σταλεί σε άλλη παρουσία της εφαρμογής που εκτελείται ήδη ή θα εκκινηθεί αργότερα. Επιπλέον, το σύστημα θα πρέπει να αποκαταστήσει τη χαμένη λειτουργικότητα της εφαρμογής σας.
Από προεπιλογή, το Kubernetes θα αρχίσει να στέλνει επισκεψιμότητα σε μια ομάδα διαφημίσεων όταν όλα τα κοντέινερ μέσα σε αυτές τις ομάδες εκτελούνται και θα επανεκκινήσει τα κοντέινερ όταν διακοπούν. Αυτή η προεπιλεγμένη συμπεριφορά συστήματος μπορεί να είναι αρκετά καλή για αρχή, αλλά μπορείτε να βελτιώσετε την αξιοπιστία της ανάπτυξης του προϊόντος σας χρησιμοποιώντας προσαρμοσμένους ελέγχους υγιεινής.
Ευτυχώς, το Kubernetes το κάνει αρκετά εύκολο να το κάνει, επομένως δεν υπάρχει δικαιολογία για να αγνοήσετε αυτούς τους ελέγχους. Το Kubernetes παρέχει δύο τύπους Ελέγχων Υγείας και είναι σημαντικό να κατανοήσουμε τις διαφορές στον τρόπο χρήσης του καθενός.
Το τεστ ετοιμότητας έχει σχεδιαστεί για να πει στην Kubernetes ότι η εφαρμογή σας είναι έτοιμη να χειριστεί την κυκλοφορία. Προτού επιτρέψει σε μια υπηρεσία να στέλνει επισκεψιμότητα σε μια ομάδα διαφημίσεων, η Kubernetes πρέπει να επαληθεύσει ότι ο έλεγχος ετοιμότητας είναι επιτυχής. Εάν η δοκιμή ετοιμότητας αποτύχει, το Kubernetes θα σταματήσει να στέλνει κίνηση στο pod μέχρι να περάσει η δοκιμή.
Το τεστ Liveness λέει στην Kubernetes εάν η αίτησή σας είναι ζωντανή ή νεκρή. Στην πρώτη περίπτωση, ο Kubernetes θα το αφήσει ήσυχο, στη δεύτερη θα διαγράψει το νεκρό pod και θα το αντικαταστήσει με ένα νέο.
Ας φανταστούμε ένα σενάριο όπου η εφαρμογή σας χρειάζεται 1 λεπτό για να ζεσταθεί και να ξεκινήσει. Η υπηρεσία σας δεν θα αρχίσει να λειτουργεί έως ότου φορτωθεί και εκτελεστεί πλήρως η εφαρμογή, αν και η ροή εργασιών έχει ήδη ξεκινήσει. Θα αντιμετωπίσετε επίσης προβλήματα εάν θέλετε να κλιμακώσετε αυτήν την ανάπτυξη σε πολλά αντίγραφα, επειδή αυτά τα αντίγραφα δεν θα πρέπει να λαμβάνουν επισκεψιμότητα μέχρι να είναι πλήρως έτοιμα. Ωστόσο, από προεπιλογή, το Kubernetes θα αρχίσει να στέλνει κίνηση μόλις ξεκινήσουν οι διεργασίες μέσα στο κοντέινερ.
Όταν χρησιμοποιείτε τη δοκιμή ετοιμότητας, το Kubernetes θα περιμένει μέχρι να εκτελεστεί πλήρως η εφαρμογή προτού επιτρέψει στην υπηρεσία να στείλει κίνηση στο νέο αντίγραφο.
Ας φανταστούμε ένα άλλο σενάριο στο οποίο η εφαρμογή κολλάει για μεγάλο χρονικό διάστημα, σταματώντας τα αιτήματα εξυπηρέτησης. Καθώς η διαδικασία συνεχίζει να εκτελείται, από προεπιλογή το Kubernetes θα υποθέσει ότι όλα είναι καλά και θα συνεχίσει να στέλνει αιτήματα στο μη λειτουργικό pod. Αλλά όταν χρησιμοποιεί το Liveness, το Kubernetes θα εντοπίσει ότι η εφαρμογή δεν εξυπηρετεί πλέον αιτήματα και θα επανεκκινήσει το νεκρό pod από προεπιλογή.
Ας δούμε πώς δοκιμάζονται η ετοιμότητα και η βιωσιμότητα. Υπάρχουν τρεις μέθοδοι δοκιμής - HTTP, Command και TCP. Μπορείτε να χρησιμοποιήσετε οποιοδήποτε από αυτά για έλεγχο. Ο πιο συνηθισμένος τρόπος δοκιμής ενός χρήστη είναι ένας ανιχνευτής HTTP.
Ακόμα κι αν η εφαρμογή σας δεν είναι διακομιστής HTTP, μπορείτε να δημιουργήσετε έναν ελαφρύ διακομιστή HTTP μέσα στην εφαρμογή σας για αλληλεπίδραση με τη δοκιμή Liveness. Μετά από αυτό, το Kubernetes θα αρχίσει να κάνει ping στο pod και εάν η απόκριση HTTP είναι στο εύρος των 200 ή 300 ms, θα υποδεικνύει ότι το pod είναι υγιές. Διαφορετικά, η μονάδα θα επισημαίνεται ως "ανθυγιεινή".
Για δοκιμές εντολών, το Kubernetes εκτελεί την εντολή μέσα στο κοντέινερ σας. Εάν η εντολή επιστρέψει με μηδενικό κωδικό εξόδου, τότε το κοντέινερ θα επισημανθεί ως υγιές, διαφορετικά, με τη λήψη ενός αριθμού κατάστασης εξόδου από το 1 έως το 255, το κοντέινερ θα επισημαίνεται ως "άρρωστο". Αυτή η μέθοδος δοκιμής είναι χρήσιμη εάν δεν μπορείτε ή δεν θέλετε να εκτελέσετε έναν διακομιστή HTTP, αλλά μπορείτε να εκτελέσετε μια εντολή που θα ελέγξει την υγεία της εφαρμογής σας.
Ο τελικός μηχανισμός επαλήθευσης είναι η δοκιμή TCP. Η Kubernetes θα προσπαθήσει να δημιουργήσει μια σύνδεση TCP στην καθορισμένη θύρα. Εάν αυτό μπορεί να γίνει, το δοχείο θεωρείται υγιές, εάν όχι, θεωρείται μη βιώσιμο. Αυτή η μέθοδος μπορεί να είναι χρήσιμη εάν χρησιμοποιείτε ένα σενάριο όπου η δοκιμή με αίτημα HTTP ή εκτέλεση εντολής δεν λειτουργεί πολύ καλά. Για παράδειγμα, οι κύριες υπηρεσίες για επαλήθευση με χρήση TCP θα είναι gRPC ή FTP.
Οι δοκιμές μπορούν να διαμορφωθούν με διάφορους τρόπους με διαφορετικές παραμέτρους. Μπορείτε να καθορίσετε πόσο συχνά θα πρέπει να εκτελούνται, ποια είναι τα όρια επιτυχίας και αποτυχίας και πόσο καιρό θα περιμένετε για απαντήσεις. Για περισσότερες πληροφορίες, ανατρέξτε στην τεκμηρίωση για τις δοκιμές ετοιμότητας και ζωντάνιας. Ωστόσο, υπάρχει ένα πολύ σημαντικό σημείο στη ρύθμιση της δοκιμής Liveness - η αρχική ρύθμιση της καθυστέρησης δοκιμών αρχικάDelaySeconds. Όπως ανέφερα, η αποτυχία αυτής της δοκιμής θα έχει ως αποτέλεσμα την επανεκκίνηση της ενότητας. Επομένως, πρέπει να βεβαιωθείτε ότι οι δοκιμές δεν θα ξεκινήσουν έως ότου η εφαρμογή είναι έτοιμη να ξεκινήσει, διαφορετικά θα ξεκινήσει η επανεκκίνηση. Συνιστώ τη χρήση του χρόνου εκκίνησης P99 ή του μέσου χρόνου εκκίνησης της εφαρμογής από το buffer. Θυμηθείτε να προσαρμόσετε αυτήν την τιμή καθώς ο χρόνος εκκίνησης της εφαρμογής σας γίνεται ολοένα και πιο αργός.
Οι περισσότεροι ειδικοί θα επιβεβαιώσουν ότι οι Έλεγχοι Υγείας είναι ένας υποχρεωτικός έλεγχος για οποιοδήποτε κατανεμημένο σύστημα και το Kubernetes δεν αποτελεί εξαίρεση. Η χρήση ελέγχων υγείας υπηρεσιών διασφαλίζει την αξιόπιστη, απρόσκοπτη λειτουργία του Kubernetes και είναι εύκολη για τους χρήστες.
Συνέχεια πολύ σύντομα...
Μερικές διαφημίσεις 🙂
Σας ευχαριστούμε που μείνατε μαζί μας. Σας αρέσουν τα άρθρα μας; Θέλετε να δείτε πιο ενδιαφέρον περιεχόμενο; Υποστηρίξτε μας κάνοντας μια παραγγελία ή προτείνοντας σε φίλους,
Το Dell R730xd 2 φορές φθηνότερο στο κέντρο δεδομένων Equinix Tier IV στο Άμστερνταμ; Μόνο εδώ
Πηγή: www.habr.com