7 βέλτιστες πρακτικές για τη χρήση κοντέινερ σύμφωνα με την Google

Σημείωση. μετάφρ.: Ο συγγραφέας του αρχικού άρθρου είναι ο Théo Chamley, αρχιτέκτονας λύσεων Google Cloud. Σε αυτήν την ανάρτηση για το ιστολόγιο Google Cloud, παρέχει μια περίληψη του πιο λεπτομερούς οδηγού της εταιρείας του, που ονομάζεται "Βέλτιστες πρακτικές για τη λειτουργία εμπορευματοκιβωτίων" Σε αυτό, οι ειδικοί της Google συνέλεξαν βέλτιστες πρακτικές για τη λειτουργία κοντέινερ στο πλαίσιο της χρήσης του Google Kubernetes Engine και άλλων, αγγίζοντας ένα ευρύ φάσμα θεμάτων: από την ασφάλεια έως την παρακολούθηση και την καταγραφή. Ποιες είναι λοιπόν οι πιο σημαντικές πρακτικές κοντέινερ σύμφωνα με την Google;

7 βέλτιστες πρακτικές για τη χρήση κοντέινερ σύμφωνα με την Google

Κινητήρας Kubernetes (Υπηρεσία που βασίζεται στο Kubernetes για εκτέλεση εφαρμογών με κοντέινερ στο Google Cloud - περίπου. μετάφραση) είναι ένας από τους καλύτερους τρόπους εκτέλεσης φόρτου εργασίας που πρέπει να κλιμακωθούν. Kubernetes θα εξασφαλίσει την ομαλή λειτουργία των περισσότερων εφαρμογών εάν είναι σε κοντέινερ. Αλλά αν θέλετε η εφαρμογή σας να είναι εύκολη στη διαχείριση και θέλετε να επωφεληθείτε πλήρως από το Kubernetes, πρέπει να ακολουθήσετε τις βέλτιστες πρακτικές. Θα απλοποιήσουν τη λειτουργία της εφαρμογής, την παρακολούθηση και τον εντοπισμό σφαλμάτων της και θα αυξήσουν επίσης την ασφάλεια.

Σε αυτό το άρθρο, θα δούμε μια λίστα με πράγματα που πρέπει να γνωρίζετε και να κάνετε για να εκτελείτε αποτελεσματικά κοντέινερ στο Kubernetes. Όσοι επιθυμούν να εμβαθύνουν σε λεπτομέρειες θα πρέπει να διαβάσουν το υλικό Βέλτιστες πρακτικές για τη λειτουργία εμπορευματοκιβωτίων, και επίσης δώστε προσοχή στο δικό μας παλαιότερη ανάρτηση σχετικά με τη συναρμολόγηση δοχείων.

1. Χρησιμοποιήστε εγγενείς μηχανισμούς καταγραφής εμπορευματοκιβωτίων

Εάν η εφαρμογή εκτελείται σε ένα σύμπλεγμα Kubernetes, δεν χρειάζονται πολλά για τα αρχεία καταγραφής. Ένα κεντρικό σύστημα καταγραφής είναι πιθανό να είναι ήδη ενσωματωμένο στο σύμπλεγμα που χρησιμοποιείτε. Στην περίπτωση χρήσης Kubernetes Engine, αυτό είναι υπεύθυνο Καταγραφή Stackdriver. (Σημείωση. μετάφρ.: Και αν χρησιμοποιείτε τη δική σας εγκατάσταση Kubernetes, σας συνιστούμε να ρίξετε μια πιο προσεκτική ματιά στη λύση ανοιχτού κώδικα - ξύλινο σπίτι.) Διατηρήστε τη ζωή σας απλή και χρησιμοποιήστε εγγενείς μηχανισμούς καταγραφής εμπορευματοκιβωτίων. Γράψτε αρχεία καταγραφής στα stdout και stderr - θα ληφθούν αυτόματα, θα αποθηκευτούν και θα ευρετηριαστούν.

Εάν θέλετε, μπορείτε επίσης να γράψετε αρχεία καταγραφής Μορφή JSON. Αυτή η προσέγγιση θα διευκολύνει την προσθήκη μεταδεδομένων σε αυτά. Και μαζί τους, το Stackdriver Logging θα έχει τη δυνατότητα αναζήτησης στα αρχεία καταγραφής χρησιμοποιώντας αυτά τα μεταδεδομένα.

2. Βεβαιωθείτε ότι τα δοχεία είναι απάτριδα και αμετάβλητα

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

Ανιθαγενείς σημαίνει ότι οποιαδήποτε κατάσταση (μόνιμα δεδομένα κάθε είδους) αποθηκεύεται εκτός του κοντέινερ. Για αυτό, ανάλογα με τις ανάγκες, μπορούν να χρησιμοποιηθούν διαφορετικοί τύποι εξωτερικής αποθήκευσης: Cloud Storage, Μόνιμοι δίσκοι, Ρέντη, Cloud SQL ή άλλες διαχειριζόμενες βάσεις δεδομένων. (Σημείωση. μετάφρ.: Διαβάστε περισσότερα για αυτό στο άρθρο μας "Χειριστές για Kubernetes: πώς να εκτελείτε κρατικές εφαρμογές".)

Αμετάβλητος σημαίνει ότι το κοντέινερ δεν θα τροποποιηθεί κατά τη διάρκεια της ζωής του: δεν υπάρχουν ενημερώσεις, ενημερώσεις κώδικα, αλλαγές διαμόρφωσης. Εάν χρειάζεται να ενημερώσετε τον κώδικα της εφαρμογής σας ή να εφαρμόσετε μια ενημέρωση κώδικα, δημιουργήστε μια νέα εικόνα και αναπτύξτε την. Συνιστάται να μετακινήσετε τη διαμόρφωση του κοντέινερ (θύρα ακρόασης, επιλογές περιβάλλοντος χρόνου εκτέλεσης, κ.λπ.) εξωτερικά - σε μυστικά и ConfigMaps. Μπορούν να ενημερωθούν χωρίς να χρειάζεται να δημιουργήσετε μια νέα εικόνα κοντέινερ. Για να δημιουργήσετε εύκολα αγωγούς με συναρμολόγηση εικόνας, μπορείτε να χρησιμοποιήσετε Cloud Build. (Σημείωση. μετάφρ.: Χρησιμοποιούμε ένα εργαλείο ανοιχτού κώδικα για αυτούς τους σκοπούς dapp.)

7 βέλτιστες πρακτικές για τη χρήση κοντέινερ σύμφωνα με την Google
Ένα παράδειγμα ενημέρωσης της διαμόρφωσης Deployment στο Kubernetes χρησιμοποιώντας το ConfigMap τοποθετημένο σε pods ως διαμόρφωση

3. Αποφύγετε τα προνομιακά κοντέινερ

Δεν εκτελείτε εφαρμογές ως root στους διακομιστές σας, σωστά; Εάν ένας εισβολέας εισέλθει στην εφαρμογή, θα αποκτήσει πρόσβαση root. Οι ίδιες σκέψεις ισχύουν για τη μη λειτουργία προνομιούχων κοντέινερ. Εάν πρέπει να αλλάξετε τις ρυθμίσεις στον κεντρικό υπολογιστή, μπορείτε να δώσετε συγκεκριμένα το κοντέινερ δυνατότητες χρησιμοποιώντας την επιλογή securityContext στο Kubernetes. Εάν πρέπει να αλλάξετε sysctls, η Kubernetes έχει ξεχωριστή περίληψη για αυτό. Γενικά, προσπαθήστε να αξιοποιήσετε στο έπακρο μέσα σε αυτό- και εμπορευματοκιβώτια sidecar για την εκτέλεση παρόμοιων προνομιακών λειτουργιών. Δεν χρειάζεται να είναι προσβάσιμα είτε σε εσωτερική είτε σε εξωτερική κίνηση.

Εάν διαχειρίζεστε ένα σύμπλεγμα, μπορείτε να χρησιμοποιήσετε Πολιτική ασφαλείας Pod για περιορισμούς στη χρήση προνομιακών εμπορευματοκιβωτίων.

4. Αποφύγετε το τρέξιμο ως root

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

Ο καλύτερος τρόπος για να αποφευχθεί αυτό είναι να μην εκτελέσετε τίποτα ως root εξαρχής. Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε την οδηγία USER в Dockerfile ή runAsUser στο Kubernetes. Ο διαχειριστής συμπλέγματος μπορεί επίσης να διαμορφώσει τη συμπεριφορά επιβολής χρησιμοποιώντας Πολιτική ασφαλείας Pod.

5. Κάντε την εφαρμογή εύκολη στην παρακολούθηση

Όπως και η καταγραφή, η παρακολούθηση είναι αναπόσπαστο μέρος της διαχείρισης εφαρμογών. Μια δημοφιλής λύση παρακολούθησης στην κοινότητα Kubernetes είναι Προμηθέας - ένα σύστημα που εντοπίζει αυτόματα τα pods και τις υπηρεσίες που απαιτούν παρακολούθηση. (Σημείωση. μετάφρ.: Δείτε και το δικό μας αναλυτική αναφορά σχετικά με το θέμα της παρακολούθησης χρησιμοποιώντας Prometheus και Kubernetes.) Stackdriver είναι σε θέση να παρακολουθεί τα συμπλέγματα Kubernetes και περιλαμβάνει τη δική του έκδοση του Prometheus για παρακολούθηση εφαρμογών.

7 βέλτιστες πρακτικές για τη χρήση κοντέινερ σύμφωνα με την Google
Kubernetes Dashboard στο Stackdriver

Ο Prometheus αναμένει από την εφαρμογή να προωθήσει μετρήσεις στο τελικό σημείο HTTP. Διαθέσιμο για αυτό Βιβλιοθήκες πελατών Prometheus. Η ίδια μορφή χρησιμοποιείται από άλλα εργαλεία όπως OpenCensus и Ίστιο.

6. Κάντε διαθέσιμη την κατάσταση υγείας της εφαρμογής

Η διαχείριση εφαρμογών στην παραγωγή υποβοηθάται από την ικανότητά της να επικοινωνεί την κατάστασή της σε ολόκληρο το σύστημα. Τρέχει η εφαρμογή; Είναι εντάξει? Είστε έτοιμοι να λάβετε κίνηση; Πώς συμπεριφέρεται; Ο πιο συνηθισμένος τρόπος επίλυσης αυτού του προβλήματος είναι η εφαρμογή υγειονομικών ελέγχων (υγειονομικοί έλεγχοι). Το Kubernetes έχει δύο τύπους: ανιχνευτές ζωντάνιας και ετοιμότητας.

Για ανιχνευτή ζωντάνιας (έλεγχοι ζωτικότητας) η εφαρμογή πρέπει να έχει ένα τελικό σημείο HTTP που επιστρέφει μια απόκριση "200 OK" εάν είναι λειτουργική και ικανοποιούνται οι βασικές εξαρτήσεις της. Για ανίχνευση ετοιμότητας (έλεγχος ετοιμότητας σέρβις) η εφαρμογή πρέπει να έχει ένα άλλο τελικό σημείο HTTP που επιστρέφει μια απόκριση "200 OK", εάν η εφαρμογή είναι σε υγιή κατάσταση, τα βήματα προετοιμασίας έχουν ολοκληρωθεί και οποιοδήποτε έγκυρο αίτημα δεν οδηγεί σε σφάλμα. Το Kubernetes θα δρομολογήσει την κυκλοφορία στο κοντέινερ μόνο εάν η εφαρμογή είναι έτοιμη σύμφωνα με αυτούς τους ελέγχους. Δύο τελικά σημεία μπορούν να συγχωνευθούν εάν δεν υπάρχει διαφορά μεταξύ των καταστάσεων ζωντάνιας και ετοιμότητας.

Μπορείτε να διαβάσετε περισσότερα σχετικά με αυτό στο σχετικό άρθρο από τον Sandeep Dinesh, Developer Advocate από την Google:Βέλτιστες πρακτικές Kubernetes: Ρύθμιση ελέγχων υγείας με ανιχνευτές ετοιμότητας και ζωηρότητας».

7. Επιλέξτε προσεκτικά την έκδοση της εικόνας σας

Οι περισσότερες δημόσιες και ιδιωτικές εικόνες χρησιμοποιούν ένα σύστημα επισήμανσης παρόμοιο με αυτό που περιγράφεται στο Βέλτιστες πρακτικές για την κατασκευή εμπορευματοκιβωτίων. Εάν η εικόνα χρησιμοποιεί ένα σύστημα κοντά στο σημασιολογική έκδοση, είναι απαραίτητο να ληφθούν υπόψη οι ιδιαιτερότητες της προσθήκης ετικετών. Για παράδειγμα, tag latest μπορεί να μετακινείται συχνά από εικόνα σε εικόνα - δεν μπορείτε να βασιστείτε εάν χρειάζεστε προβλέψιμες και επαναλαμβανόμενες κατασκευές και εγκαταστάσεις.

Μπορείτε να χρησιμοποιήσετε την ετικέτα X.Y.Z (είναι σχεδόν πάντα αμετάβλητα), αλλά σε αυτήν την περίπτωση, παρακολουθήστε όλες τις ενημερώσεις κώδικα και τις ενημερώσεις στην εικόνα. Εάν η εικόνα που χρησιμοποιείτε έχει ετικέτα X.Y, αυτή είναι μια καλή επιλογή για το χρυσό μέσο. Επιλέγοντάς το, λαμβάνετε αυτόματα patches και ταυτόχρονα βασίζεστε στη σταθερή έκδοση της εφαρμογής.

ΥΓ από τον μεταφραστή

Διαβάστε επίσης στο blog μας:

Πηγή: www.habr.com

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