Είναι εύκολο και βολικό να προετοιμάσετε ένα σύμπλεγμα Kubernetes; Ανακοινώνουμε τον χειριστή πρόσθετων

Είναι εύκολο και βολικό να προετοιμάσετε ένα σύμπλεγμα Kubernetes; Ανακοινώνουμε τον χειριστή πρόσθετων

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

Γιατί οποιεσδήποτε προσθήκες;

Δεν είναι μυστικό ότι το Kubernetes δεν είναι ένα έτοιμο προϊόν all-in-one και για να δημιουργήσετε ένα σύμπλεγμα "ενήλικων" θα χρειαστείτε διάφορες προσθήκες. Ο χειριστής πρόσθετων θα σας βοηθήσει να εγκαταστήσετε, να διαμορφώσετε και να διατηρήσετε ενημερωμένα αυτά τα πρόσθετα.

Η ανάγκη για πρόσθετα στοιχεία στο σύμπλεγμα αποκαλύπτεται στο κανω ΑΝΑΦΟΡΑ συναδέλφους driusha. Εν ολίγοις, η κατάσταση με το Kubernetes αυτή τη στιγμή είναι τέτοια που για μια απλή εγκατάσταση "play around" μπορείτε να τα βγάλετε πέρα ​​με τα στοιχεία εκτός συσκευασίας, για προγραμματιστές και δοκιμές μπορείτε να προσθέσετε Ingress, αλλά για πλήρη εγκατάσταση, σχετικά μπορείτε να πείτε "η παραγωγή σας είναι έτοιμη", πρέπει να προσθέσετε με μια ντουζίνα διαφορετικά πρόσθετα: κάτι για παρακολούθηση, κάτι για καταγραφή, μην ξεχνάτε την είσοδο και τον διαχειριστή πιστοποίησης, επιλέξτε ομάδες κόμβων, προσθέστε πολιτικές δικτύου, σεζόν με ρυθμίσεις αυτόματης κλίμακας sysctl και pod...

Είναι εύκολο και βολικό να προετοιμάσετε ένα σύμπλεγμα Kubernetes; Ανακοινώνουμε τον χειριστή πρόσθετων

Ποιες είναι οι ιδιαιτερότητες της συνεργασίας μαζί τους;

Όπως δείχνει η πρακτική, το θέμα δεν περιορίζεται σε μία εγκατάσταση. Για να εργαστείτε άνετα με το σύμπλεγμα, τα πρόσθετα θα πρέπει να ενημερωθούν, να απενεργοποιηθούν (να αφαιρεθούν από το σύμπλεγμα) και θα θέλετε να δοκιμάσετε μερικά πριν τα εγκαταστήσετε στο σύμπλεγμα παραγωγής.

Λοιπόν, ίσως το Ansible να είναι αρκετό εδώ; Μπορεί. Αλλά Γενικά, τα πλήρη πρόσθετα δεν ζουν χωρίς ρυθμίσεις. Αυτές οι ρυθμίσεις ενδέχεται να διαφέρουν ανάλογα με την παραλλαγή του συμπλέγματος (aws, gce, azure, bare-metal, do, ...). Ορισμένες ρυθμίσεις δεν μπορούν να καθοριστούν εκ των προτέρων· πρέπει να ληφθούν από το σύμπλεγμα. Και το σύμπλεγμα δεν είναι στατικό: για ορισμένες ρυθμίσεις θα πρέπει να παρακολουθείτε τις αλλαγές. Και εδώ το Ansible λείπει ήδη: χρειάζεστε ένα πρόγραμμα που ζει σε ένα σύμπλεγμα, δηλ. Χειριστής Kubernetes.

Όσοι το δοκίμασαν στη δουλειά κέλυφος-χειριστής, θα πουν ότι οι εργασίες εγκατάστασης και ενημέρωσης πρόσθετων και ρυθμίσεων παρακολούθησης μπορούν να επιλυθούν πλήρως χρησιμοποιώντας αγκίστρια για χειριστή κελύφους. Μπορείτε να γράψετε ένα σενάριο που θα κάνει μια υπό όρους kubectl apply και παρακολουθήστε, για παράδειγμα, το ConfigMap, όπου θα αποθηκευτούν οι ρυθμίσεις. Αυτό είναι περίπου αυτό που υλοποιείται στο addon-operator.

Πώς οργανώνεται αυτό στο addon-operator;

Κατά τη δημιουργία μιας νέας λύσης, προχωρήσαμε από τις ακόλουθες αρχές:

  • Το πρόγραμμα εγκατάστασης πρόσθετων πρέπει να υποστηρίζει πρότυπο και δηλωτική διαμόρφωση. Δεν φτιάχνουμε μαγικά σενάρια που εγκαθιστούν πρόσθετα. Ο χειριστής πρόσθετων χρησιμοποιεί το Helm για να εγκαταστήσει πρόσθετα. Για να εγκαταστήσετε, πρέπει να δημιουργήσετε ένα γράφημα και να επιλέξετε τις τιμές που θα χρησιμοποιηθούν για τη διαμόρφωση.
  • Οι ρυθμίσεις μπορούν να είναι δημιουργούνται κατά την εγκατάσταση, Μπορεί να είναι παίρνω από το σύμπλεγμαΉ λαμβάνετε ενημερώσεις, παρακολούθηση πόρων συμπλέγματος. Αυτές οι λειτουργίες μπορούν να πραγματοποιηθούν με τη χρήση γάντζων.
  • Οι ρυθμίσεις μπορούν να είναι αποθήκευση σε ένα σύμπλεγμα. Για να αποθηκεύσετε τις ρυθμίσεις στο σύμπλεγμα, δημιουργείται ένας ConfigMap/addon-operator και ο τελεστής Addon παρακολουθεί τις αλλαγές σε αυτό το ConfigMap. Ο τελεστής πρόσθετου δίνει στα hook πρόσβαση στις ρυθμίσεις χρησιμοποιώντας απλές συμβάσεις.
  • Η προσθήκη εξαρτάται από τις ρυθμίσεις. Εάν οι ρυθμίσεις έχουν αλλάξει, τότε ο χειριστής Addon παρουσιάζει το διάγραμμα Helm με νέες τιμές. Ονομάσαμε τον συνδυασμό του γραφήματος Helm, των τιμών για αυτό και των αγκίστρων ως ενότητα (δείτε παρακάτω για περισσότερες λεπτομέρειες).
  • Σκαλωσιά. Δεν υπάρχουν σενάρια μαγικής κυκλοφορίας. Ο μηχανισμός ενημέρωσης είναι παρόμοιος με μια κανονική εφαρμογή - συλλέξτε πρόσθετα και τελεστές πρόσθετων σε μια εικόνα, προσθέστε τα με ετικέτα και διαθέστε τα.
  • Έλεγχος αποτελεσμάτων. Ο τελεστής πρόσθετου μπορεί να παρέχει μετρήσεις για τον Prometheus.

Τι είναι το padding στο addon-operator;

Μια προσθήκη μπορεί να θεωρηθεί οτιδήποτε προσθέτει νέες λειτουργίες στο σύμπλεγμα. Για παράδειγμα, η εγκατάσταση του Ingress είναι ένα εξαιρετικό παράδειγμα πρόσθετου. Αυτό μπορεί να είναι οποιοσδήποτε χειριστής ή ελεγκτής με το δικό του CRD: prometheus-operator, cert-manager, kube-controller-manager, κ.λπ. Ή κάτι μικρό, αλλά πιο εύκολο στη χρήση - για παράδειγμα, μυστικό αντιγραφικό, το οποίο αντιγράφει μυστικά μητρώου σε νέους χώρους ονομάτων ή δέκτης sysctl, που διαμορφώνει τις παραμέτρους sysctl σε νέους κόμβους.

Για την υλοποίηση πρόσθετων, ο τελεστής Addon παρέχει διάφορες έννοιες:

  • Διάγραμμα τιμόνι χρησιμοποιείται για την εγκατάσταση διαφόρων λογισμικών στο σύμπλεγμα - για παράδειγμα, Prometheus, Grafana, nginx-ingress. Εάν το απαιτούμενο εξάρτημα έχει διάγραμμα Helm, τότε η εγκατάστασή του χρησιμοποιώντας το Addon-operator θα είναι πολύ απλή.
  • Αποθήκευση αξιών. Τα διαγράμματα τιμόνι συνήθως έχουν πολλές διαφορετικές ρυθμίσεις που μπορούν να αλλάξουν με την πάροδο του χρόνου. Ο χειριστής πρόσθετου υποστηρίζει την αποθήκευση αυτών των ρυθμίσεων και μπορεί να παρακολουθεί τις αλλαγές τους προκειμένου να επανεγκαταστήσει το διάγραμμα πηδαλίου με νέες τιμές.
  • Άγκιστρα είναι εκτελέσιμα αρχεία που εκτελεί ο τελεστής Addon σε συμβάντα και που έχουν πρόσβαση στο χώρο αποθήκευσης τιμών. Το άγκιστρο μπορεί να παρακολουθεί τις αλλαγές στο σύμπλεγμα και να ενημερώνει τις τιμές στο χώρο αποθήκευσης τιμών. Εκείνοι. Χρησιμοποιώντας άγκιστρα, μπορείτε να κάνετε ανακάλυψη για να συλλέξετε τιμές από το σύμπλεγμα κατά την εκκίνηση ή σύμφωνα με ένα χρονοδιάγραμμα ή μπορείτε να κάνετε συνεχή ανακάλυψη, συλλέγοντας τιμές από το σύμπλεγμα με βάση τις αλλαγές στο σύμπλεγμα.
  • Ενότητα είναι ένας συνδυασμός γραφήματος Helm, αποθήκης τιμών και αγκίστρων. Οι μονάδες μπορούν να ενεργοποιηθούν ή να απενεργοποιηθούν. Η απενεργοποίηση μιας μονάδας σημαίνει διαγραφή όλων των εκδόσεων γραφήματος Helm. Οι μονάδες μπορούν να ενεργοποιηθούν δυναμικά, για παράδειγμα, εάν όλες οι μονάδες που χρειάζεται είναι ενεργοποιημένες ή εάν η ανακάλυψη έχει βρει τις απαραίτητες παραμέτρους στα άγκιστρα - αυτό γίνεται χρησιμοποιώντας ένα βοηθητικό ενεργοποιημένο σενάριο.
  • Παγκόσμιοι γάντζοι. Αυτά είναι άγκιστρα "από μόνα τους", δεν περιλαμβάνονται σε ενότητες και έχουν πρόσβαση σε ένα παγκόσμιο κατάστημα τιμών, οι τιμές του οποίου είναι διαθέσιμες σε όλα τα άγκιστρα σε μονάδες.

Πώς συνεργάζονται αυτά τα μέρη; Ας δούμε την εικόνα από την τεκμηρίωση:

Είναι εύκολο και βολικό να προετοιμάσετε ένα σύμπλεγμα Kubernetes; Ανακοινώνουμε τον χειριστή πρόσθετων

Υπάρχουν δύο σενάρια εργασίας:

  1. Το καθολικό άγκιστρο ενεργοποιείται από ένα συμβάν - για παράδειγμα, όταν αλλάζει ένας πόρος στο σύμπλεγμα. Αυτό το άγκιστρο επεξεργάζεται τις αλλαγές και εγγράφει τις νέες τιμές στο παγκόσμιο κατάστημα τιμών. Ο χειριστής του πρόσθετου παρατηρεί ότι η καθολική αποθήκευση έχει αλλάξει και εκκινεί όλες τις μονάδες. Κάθε λειτουργική μονάδα, χρησιμοποιώντας τα άγκιστρα της, καθορίζει εάν πρέπει να ενεργοποιηθεί και ενημερώνει το χώρο αποθήκευσης τιμών της. Εάν η μονάδα είναι ενεργοποιημένη, ο χειριστής Addon ξεκινά την εγκατάσταση του γραφήματος Helm. Σε αυτήν την περίπτωση, το γράφημα Helm έχει πρόσβαση σε τιμές από την αποθήκευση της μονάδας και από την καθολική αποθήκευση.
  2. Το δεύτερο σενάριο είναι απλούστερο: ένα άγκιστρο μονάδας ενεργοποιείται από ένα συμβάν και αλλάζει τιμές στο χώρο αποθήκευσης τιμών της μονάδας. Ο χειριστής του πρόσθετου το παρατηρεί αυτό και εκκινεί το διάγραμμα Helm με ενημερωμένες τιμές.

Η προσθήκη μπορεί να υλοποιηθεί ως ένα μεμονωμένο άγκιστρο ή ως ένα διάγραμμα τιμόνι ή ακόμη και ως πολλές εξαρτημένες ενότητες - αυτό εξαρτάται από την πολυπλοκότητα του στοιχείου που εγκαθίσταται στο σύμπλεγμα και από το επιθυμητό επίπεδο ευελιξίας διαμόρφωσης. Για παράδειγμα, στο αποθετήριο (/παραδείγματα) υπάρχει ένα πρόσθετο sysctl-tuner, το οποίο υλοποιείται τόσο ως απλή λειτουργική μονάδα με άγκιστρο και γράφημα Helm, όσο και χρησιμοποιώντας το κατάστημα τιμών, το οποίο καθιστά δυνατή την προσθήκη ρυθμίσεων με την επεξεργασία του ConfigMap.

Παράδοση ενημερώσεων

Λίγα λόγια για την οργάνωση των ενημερώσεων στοιχείων που εγκαθιστά ο τελεστής πρόσθετου.

Για να εκτελέσετε το Addon-operator σε ένα σύμπλεγμα, χρειάζεστε δημιουργήστε μια εικόνα με προσθήκες με τη μορφή αρχείων γραφήματος hook και Helm, προσθέστε ένα δυαδικό αρχείο addon-operator και όλα όσα χρειάζεστε για γάντζους: bash, kubectl, jq, python και τα λοιπά. Στη συνέχεια, αυτή η εικόνα μπορεί να αναπτυχθεί στο σύμπλεγμα ως κανονική εφαρμογή και πιθανότατα θα θέλετε να οργανώσετε ένα ή άλλο σχήμα προσθήκης ετικετών. Εάν υπάρχουν λίγα συμπλέγματα, μπορεί να είναι κατάλληλη η ίδια προσέγγιση με τις εφαρμογές: νέα έκδοση, νέα έκδοση, περάστε από όλα τα συμπλέγματα και διορθώστε την εικόνα των Pods. Ωστόσο, στην περίπτωση της διάθεσης σε σημαντικό αριθμό συμπλεγμάτων, η έννοια της αυτο-ενημέρωσης από ένα κανάλι ήταν πιο κατάλληλη για εμάς.

Δείτε πώς το κάνουμε:

  • Ένα κανάλι είναι ουσιαστικά ένα αναγνωριστικό που μπορεί να οριστεί σε οτιδήποτε (για παράδειγμα, dev/stage/ea/stable).
  • Το όνομα του καναλιού είναι η ετικέτα εικόνας. Όταν χρειάζεται να διαθέσετε ενημερώσεις σε ένα κανάλι, μια νέα εικόνα συγκεντρώνεται και επισημαίνεται με το όνομα του καναλιού.
  • Όταν εμφανίζεται μια νέα εικόνα στο μητρώο, ο τελεστής πρόσθετου επανεκκινείται και εκκινείται με τη νέα εικόνα.

Αυτή δεν είναι η βέλτιστη πρακτική, όπως γράφεται στο Τεκμηρίωση Kubernetes. Δεν συνιστάται να το κάνετε αυτό, αλλά μιλάμε για μια κανονική εφαρμογή που ζει στο ίδιο σύμπλεγμα. Στην περίπτωση του τελεστή Addon, μια εφαρμογή είναι πολλές αναπτύξεις διάσπαρτες σε συμπλέγματα και η αυτο-ενημέρωση βοηθά πολύ και κάνει τη ζωή πιο εύκολη.

Τα κανάλια βοηθούν και σε δοκιμές: εάν υπάρχει ένα βοηθητικό σύμπλεγμα, μπορείτε να το διαμορφώσετε στο κανάλι stage και μεταφέρετε ενημερώσεις σε αυτό πριν το διαθέσετε σε κανάλια ea и stable. Αν με ένα σύμπλεγμα στο κανάλι ea παρουσιάστηκε ένα σφάλμα, μπορείτε να το αλλάξετε σε stable, ενώ το πρόβλημα με αυτό το σύμπλεγμα διερευνάται. Εάν το σύμπλεγμα αφαιρεθεί από την ενεργή υποστήριξη, μεταβαίνει στο "παγωμένο" κανάλι του - για παράδειγμα, freeze-2019-03-20.

Εκτός από την ενημέρωση των αγκίστρων και των διαγραμμάτων τιμόνι, μπορεί να χρειαστείτε ενημέρωση και στοιχείο τρίτου μέρους. Για παράδειγμα, παρατηρήσατε ένα σφάλμα στον εξαγωγέα κόμβου υπό όρους και ακόμη και καταλάβατε πώς να το επιδιορθώσετε. Στη συνέχεια, ανοίξατε το PR και περιμένετε τη νέα κυκλοφορία να περάσει από όλα τα clusters και να αυξήσετε την έκδοση της εικόνας. Για να μην περιμένετε επ 'αόριστον, μπορείτε να δημιουργήσετε τον κόμβο-εξαγωγέα σας και να μεταβείτε σε αυτόν πριν αποδεχτείτε το PR.

Γενικά, αυτό μπορεί να γίνει χωρίς Addon-operator, αλλά με τον Addon-operator η μονάδα για την εγκατάσταση του node-exporter θα είναι ορατή σε ένα αποθετήριο, το Dockerfile για τη δημιουργία της εικόνας σας μπορεί να διατηρηθεί ακριβώς εκεί, γίνεται ευκολότερο για όλους τους συμμετέχοντες στο η διαδικασία για να καταλάβετε τι συμβαίνει... Και αν υπάρχουν πολλά clusters, τότε γίνεται πιο εύκολο να δοκιμάσετε τα PR σας και να παρουσιάσετε μια νέα έκδοση!

Αυτή η οργάνωση της ενημέρωσης εξαρτημάτων λειτουργεί με επιτυχία για εμάς, αλλά μπορεί να εφαρμοστεί οποιοδήποτε άλλο κατάλληλο σχέδιο - τελικά Σε αυτήν την περίπτωση ο τελεστής Addon είναι ένα απλό δυαδικό αρχείο.

Συμπέρασμα

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

Τα πρόσθετα για τον χειριστή πρόσθετου σε μορφή λειτουργικής μονάδας (διάγραμμα πηδαλίου + άγκιστρα) μπορούν να διατεθούν δημόσια. Εμείς, η εταιρεία Flant, σχεδιάζουμε να δημοσιεύσουμε τις εξελίξεις μας με τη μορφή τέτοιων προσθηκών κατά τη διάρκεια του καλοκαιριού. Εγγραφείτε στην ανάπτυξη στο GitHub (κέλυφος-χειριστής, addon-operator), προσπαθήστε να κάνετε τη δική σας προσθήκη με βάση παραδείγματα и τεκμηρίωση, περιμένετε νέα στο Habré και στο δικό μας Κανάλι YouTube!

PS

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

Πηγή: www.habr.com

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