Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Αυτή είναι μια μεταγραφή της ομιλίας DevopsConf 2019-10-01 и SPbLUG 2019-09-25.

Αυτή είναι η ιστορία ενός έργου που χρησιμοποίησε ένα αυτογραμμένο σύστημα διαχείρισης διαμόρφωσης και γιατί η μετάβαση στο Ansible χρειάστηκε 18 μήνες.

Ημέρα Αρ. -ХХХ: Πριν την έναρξη

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Αρχικά, η υποδομή αποτελούνταν από πολλούς ξεχωριστούς κεντρικούς υπολογιστές που εκτελούσαν το Hyper-V. Η δημιουργία μιας εικονικής μηχανής απαιτούσε πολλά βήματα: τοποθέτηση των δίσκων στη σωστή θέση, εγγραφή DNS, κράτηση DHCP, τοποθέτηση της διαμόρφωσης VM στο αποθετήριο git. Αυτή η διαδικασία ήταν μερικώς μηχανοποιημένη, αλλά για παράδειγμα, τα VM διανεμήθηκαν μεταξύ των κεντρικών υπολογιστών με το χέρι. Αλλά, για παράδειγμα, οι προγραμματιστές θα μπορούσαν να διορθώσουν τη διαμόρφωση VM στο git και να την εφαρμόσουν επανεκκινώντας το VM.

Λύση διαχείρισης προσαρμοσμένης διαμόρφωσης

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Η αρχική ιδέα, υποψιάζομαι, επινοήθηκε ως IaC: πολλά εικονικά μηχανήματα χωρίς πολιτεία που μηδενίζουν την κατάστασή τους κατά την επανεκκίνηση. Τι ήταν η διαχείριση διαμόρφωσης VM; Σχηματικά φαίνεται απλό:

  1. Ένα στατικό MAC καρφώθηκε για το VM.
  2. Ένα ISO με CoreOS και ένας δίσκος εκκίνησης συνδέθηκαν στο VM.
  3. Το CoreOS εκκινεί το σενάριο προσαρμογής κατεβάζοντάς το από τον διακομιστή WEB με βάση την IP του.
  4. Το σενάριο πραγματοποιεί λήψη της διαμόρφωσης VM μέσω SCP με βάση τη διεύθυνση IP.
  5. Ξεκινούν το footcloth των αρχείων μονάδας systemd και το footcloth των σεναρίων bash.

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Αυτή η λύση είχε πολλά προφανή προβλήματα:

  1. Το CoreOS ISO έχει καταργηθεί.
  2. Πολλές σύνθετες αυτοματοποιημένες ενέργειες και μαγεία κατά τη μετεγκατάσταση/δημιουργία VM.
  3. Δυσκολία με την ενημέρωση και όταν χρειάζεται μια συγκεκριμένη έκδοση λογισμικού. Ακόμα πιο διασκεδαστικό με τα modules του πυρήνα.
  4. Τα VM δεν αποκτήθηκαν έτσι χωρίς δεδομένα, δηλ. Τα VM εμφανίστηκαν με έναν δίσκο με προσαρτημένα πρόσθετα δεδομένα χρήστη.
  5. Κάποιος κατέστρεφε συνεχώς τις εξαρτήσεις της μονάδας του συστήματος και το CoreOS παγώνει κατά την επανεκκίνηση. Ήταν δύσκολο να το πιάσεις αυτό χρησιμοποιώντας τα διαθέσιμα εργαλεία στο CoreOS.
  6. Διαχείριση μυστικών.
  7. Δεν υπήρχε CM. Υπήρχαν διαμορφώσεις bash και YML για το CoreOS.

Για να εφαρμόσετε τη διαμόρφωση VM, πρέπει να την επανεκκινήσετε, αλλά ενδέχεται να μην γίνει επανεκκίνηση. Φαίνεται σαν ένα προφανές πρόβλημα, αλλά δεν υπάρχουν μόνιμοι δίσκοι - δεν υπάρχει πουθενά αποθήκευση αρχείων καταγραφής. Λοιπόν, εντάξει, ας προσπαθήσουμε να προσθέσουμε την επιλογή φόρτωσης του πυρήνα έτσι ώστε να σταλούν τα αρχεία καταγραφής. Αλλά όχι, πόσο περίπλοκα είναι όλα.

Ημέρα #0: Αναγνωρίστε το πρόβλημα

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Ήταν η συνήθης υποδομή ανάπτυξης: jenkins, δοκιμαστικά περιβάλλοντα, παρακολούθηση, μητρώο. Το CoreOS σχεδιάστηκε για τη φιλοξενία συμπλεγμάτων k8s, δηλ. το πρόβλημα ήταν πώς χρησιμοποιήθηκε το CoreOS. Το πρώτο βήμα ήταν η επιλογή μιας στοίβας. Καταλήξαμε στο:

  1. CentOS ως κατανομή βάσης, επειδή Αυτή είναι η πλησιέστερη διανομή σε περιβάλλοντα παραγωγής.
  2. Πιθανό για διαχείριση διαμόρφωσης, επειδή έγινε εκτενής εξέταση.
  3. Jenkins ως πλαίσιο για την αυτοματοποίηση των υφιστάμενων διαδικασιών, επειδή έχει ήδη χρησιμοποιηθεί ενεργά για διαδικασίες ανάπτυξης
  4. Hyper-V ως πλατφόρμα εικονικοποίησης. Υπάρχουν διάφοροι λόγοι που ξεπερνούν το εύρος της ιστορίας, αλλά με λίγα λόγια - δεν μπορούμε να χρησιμοποιήσουμε τα σύννεφα, πρέπει να χρησιμοποιήσουμε το δικό μας υλικό.

Ημέρα Νο 30: Διόρθωση υφιστάμενων συμφωνιών - Συμφωνίες ως Κώδικας

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Όταν η στοίβα ήταν καθαρή, άρχισαν οι προετοιμασίες για τη μετακόμιση. Διόρθωση υφιστάμενων συμφωνιών με τη μορφή κώδικα (Συμφωνίες ως Κώδικας!). Μετάβαση χειρωνακτική εργασία -> μηχανοποίηση -> αυτοματοποίηση.

1. Διαμόρφωση εικονικών μηχανών

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Ο Ansible κάνει εξαιρετική δουλειά σε αυτό. Με ελάχιστες κινήσεις του σώματος μπορείτε να πάρετε τον έλεγχο των διαμορφώσεων VM:

  1. Δημιουργήστε ένα αποθετήριο git.
  2. Βάζουμε τη λίστα με τα VM στο απόθεμα, τις διαμορφώσεις στα playbooks και τους ρόλους.
  3. Δημιουργούμε ένα ειδικό jenkins slave από το οποίο μπορείτε να εκτελέσετε το Ansible.
  4. Δημιουργούμε μια εργασία και διαμορφώνουμε τον Jenkins.

Η πρώτη διαδικασία είναι έτοιμη. Οι συμφωνίες είναι σταθερές.

2. Δημιουργήστε νέο VM

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Όλα εδώ δεν ήταν πολύ βολικά. Δεν είναι πολύ βολικό να δημιουργείτε VM σε Hyper-V από Linux. Μία από τις προσπάθειες μηχανοποίησης αυτής της διαδικασίας ήταν:

  1. Το Ansbile συνδέεται μέσω WinRM στον κεντρικό υπολογιστή των Windows.
  2. Το Ansible εκτελεί ένα σενάριο powershell.
  3. Το σενάριο Powershell δημιουργεί ένα νέο VM.
  4. Χρησιμοποιώντας Hyper-V/ScVMM, κατά τη δημιουργία ενός VM στο λειτουργικό σύστημα επισκέπτη, διαμορφώνεται το όνομα κεντρικού υπολογιστή.
  5. Κατά την ενημέρωση της μίσθωσης DHCP, το VM στέλνει το όνομα κεντρικού υπολογιστή του.
  6. Η τυπική ενσωμάτωση ddns & dhcp στην πλευρά του ελεγκτή τομέα διαμορφώνει την εγγραφή DNS.
  7. Μπορείτε να προσθέσετε ένα VM στο απόθεμά σας και να το διαμορφώσετε με το Ansible.

3.Δημιουργήστε πρότυπο VM

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Δεν επινόησαν τίποτα εδώ - πήραν ένα συσκευαστή.

  1. Προσθέστε το Packer, kickstart config στο αποθετήριο git.
  2. Ρύθμιση ενός ειδικού jenkins slave με hyper-v και Packer.
  3. Δημιουργούμε μια εργασία και διαμορφώνουμε τον Jenkins.

Πώς λειτουργεί αυτός ο σύνδεσμος:

  1. Ο Packer δημιουργεί ένα κενό VM και λαμβάνει το ISO.
  2. Όταν εκκινεί το VM, ο Packer εισάγει την εντολή στο bootloader για χρήση του αρχείου μας kickstart από δισκέτα ή http.
  3. Το Anaconda εκκινείται με τις παραμέτρους μας και έχει ολοκληρωθεί η αρχική διαμόρφωση του λειτουργικού συστήματος.
  4. Ο Packer περιμένει να γίνει διαθέσιμο το VM.
  5. Ο συσκευαστής μέσα στο VM εκτελείται σε τοπική λειτουργία.
  6. Το Ansible χρησιμοποιεί ακριβώς τους ίδιους ρόλους που λειτουργεί στο βήμα #1.
  7. Το Packer εξάγει το πρότυπο VM.

Ημέρα #75: Επαναφέρετε τη συμφωνία χωρίς να σπάσετε = Test ansible + Testkitchen

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Η καταγραφή συμβάσεων σε κώδικα μπορεί να μην είναι αρκετή. Άλλωστε, αν στα μέσα και έξω της διαδικασίας θέλεις να αλλάξεις κάτι, μπορείς να σπάσεις κάτι. Επομένως, στην περίπτωση της υποδομής, εμφανίζεται η δοκιμή αυτής ακριβώς της υποδομής. Για να συγχρονίσουμε τη γνώση μέσα στην ομάδα, αρχίσαμε να δοκιμάζουμε ρόλους του Ansible. Δεν θα μπω σε βάθος γιατί… υπάρχει ένα άρθρο που περιγράφει τα γεγονότα εκείνη τη στιγμή Δοκιμάστε με αν μπορείτε ή οι προγραμματιστές YML ονειρεύονται να δοκιμάσουν το Ansible;(σπόιλερ αυτή δεν ήταν η τελική έκδοση και αργότερα όλα έγιναν πιο περίπλοκα Πώς να ξεκινήσετε να δοκιμάζετε το Ansible, ανανεώστε το έργο σε ένα χρόνο και μην τρελαθείτε).

Ημέρα #130: Ίσως το CentOS+ansible δεν χρειάζεται; ίσως openshift;

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

Ημέρα #170: Το Openshift δεν είναι κατάλληλο, ας πάρουμε μια ευκαιρία με το Windows Azure Pack;

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Το Hyper-V δεν είναι πολύ φιλικό, το SCVMM δεν το κάνει πολύ καλύτερο. Αλλά υπάρχει κάτι όπως το Windows Azure Pack, το οποίο είναι ένα πρόσθετο στο SCVMM και μιμείται το Azure. Αλλά στην πραγματικότητα, το προϊόν φαίνεται εγκαταλελειμμένο: η τεκμηρίωση έχει κατεστραμμένους συνδέσμους και είναι πολύ αραιή. Αλλά ως μέρος της μελέτης των επιλογών για την απλούστευση της ζωής του σύννεφου μας, το εξέτασαν επίσης.

Ημέρα #250: Το πακέτο Windows Azure δεν είναι πολύ καλό. Παραμένουμε στο SCVMM

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Το Windows Azure Pack φαινόταν πολλά υποσχόμενο, αλλά αποφασίστηκε να μην εισαχθεί το WAP με την πολυπλοκότητά του στο σύστημα για λόγους περιττών λειτουργιών και παρέμεινε στο SCVMM.

Ημέρα #360: Τρώγοντας τον ελέφαντα κομμάτι-κομμάτι

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Μόλις ένα χρόνο αργότερα η πλατφόρμα για τη μετακόμιση ήταν έτοιμη και η διαδικασία μετακόμισης ξεκίνησε. Για το σκοπό αυτό, ορίστηκε μια εργασία SMART. Ελέγξαμε όλα τα VM και αρχίσαμε να βρίσκουμε τη διαμόρφωση μία προς μία, να την περιγράφουμε στο Ansible και να την καλύπτουμε με δοκιμές.

Ημέρα #450: Τι είδους σύστημα αποκτήσατε;

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Η ίδια η διαδικασία δεν είναι ενδιαφέρουσα. Είναι ρουτίνα, μπορεί να σημειωθεί ότι οι περισσότερες διαμορφώσεις ήταν σχετικά απλές ή ισόμορφες και σύμφωνα με την αρχή Pareto, το 80% των διαμορφώσεων VM απαιτούσαν το 20% του χρόνου. Με την ίδια αρχή, το 80% του χρόνου αφιερώθηκε στην προετοιμασία της μετακόμισης και μόνο το 20% στην ίδια την κίνηση.

Ημέρα #540: Τελικός

Ansible: Μεταφορά διαμόρφωσης 120 VM από το CoreOS στο CentOS σε 18 μήνες

Τι έγινε σε 18 μήνες;

  1. Οι συμφωνίες έγιναν κώδικας.
  2. Χειρωνακτική εργασία -> Μηχανοποίηση -> Αυτοματοποίηση.

Πηγή: www.habr.com

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