Προγραμματισμός

Επανεξέταση: Το Red Hat κάνει το Docker με τον σκληρό τρόπο

Το Project Atomic της Red Hat είναι ένας τρόπος με γνώμονα τη λειτουργία κοντέινερ Linux. Το λειτουργικό σύστημα Atomic Host διαθέτει ήδη Docker (κοντέινερ), Flannel (δικτύωση), OSTree (διαχείριση κεντρικού υπολογιστή), Etcd (κατανεμημένο κλειδί-τιμής αποθήκευσης) και Kubernetes (ενορχήστρωση).

Το Kubernetes είναι ένα από τα δύο δημοφιλή συστήματα ενορχήστρωσης εμπορευματοκιβωτίων, το άλλο είναι το Docker Swarm. Θα μπορούσατε να το ονομάσετε "πλήρης δύναμη", αλλά με αυτό έρχεται πρόσθετη πολυπλοκότητα και διοικητική επιβάρυνση.

Το Kubernetes συντονίζει τη δημιουργία «pods» σε πολλούς ατομικούς κεντρικούς υπολογιστές. Οι Pods είναι ομάδες κοντέινερ Docker που διαχωρίζουν λογικά τις υπηρεσίες σε μια εφαρμογή. Τα κοντέινερ σε ένα pod μοιράζονται μια διεύθυνση IP και επικοινωνούν μέσω του localhost.

Το Flannel παρέχει ένα δίκτυο επικάλυψης για Atomic host, επιτρέποντας σε κάθε pod του συμπλέγματος να επικοινωνεί με οποιοδήποτε άλλο pod ή υπηρεσία εντός του συμπλέγματος. Αυτό το δίκτυο επικάλυψης χρησιμοποιείται μόνο για τη δικτύωση κοντέινερ. Μια υπηρεσία διακομιστή μεσολάβησης Kubernetes παρέχει πρόσβαση στον χώρο IP του κεντρικού υπολογιστή.

Το Etcd χρησιμοποιείται για την αποθήκευση διαμορφώσεων τόσο για το Kubernetes όσο και για το Flannel σε όλους τους κεντρικούς υπολογιστές του συμπλέγματος.

Οι συστάδες ατομικών δοχείων κάνουν ορισμένες παραδοχές λόγω του Kubernetes. Οι διαχειριστές πραγματικά δεν έχουν επιλογή με το Atomic: Χρησιμοποιήστε το Kubernetes ή βρείτε άλλο λειτουργικό σύστημα κοντέινερ.

Εάν προτιμάτε το "design by convention" και θέλετε περισσότερη ελευθερία και ευελιξία σε ένα κοντέινερ, μπορείτε να σκεφτείτε το RancherOS ή το VMware Photon. Εάν ο απώτερος στόχος σας είναι να εκτελέσετε πολλά κοντέινερ σε πολλούς κεντρικούς υπολογιστές, τότε το Atomic Host, Kubernetes και φίλοι μπορεί να είναι ακριβώς αυτό που χρειάζεστε.

Διαχείριση συστήματος ατομικού κεντρικού υπολογιστή

Το Atomic Host χρησιμοποιεί τη δική του έκδοση του λιμενεργάτης εντολή, ατομικός, αν και το πραγματικόλιμενεργάτης Η εντολή είναι διαθέσιμη στο / bin / docker. Η τοποθεσία του στο / bin υποδηλώνει μερικές από τις εργασίες που πραγματοποιήθηκαν στο RHEL / CentOS / Fedora για να γίνει το Atomic OS ειδικά σχεδιασμένο για κοντέινερ. Κανονικά μόνο τα σημαντικά δυαδικά συστήματα βρίσκονται στο / bin.

Διαχειρίζεστε το Atomic Host μέσω δύο υποσυστημάτων. Το RPM-OSTree χειρίζεται την ανάπτυξη και τις ενημερώσεις του συστήματος κεντρικού υπολογιστή, ενώ το Docker χειρίζεται την παροχή κοντέινερ για την εκτέλεση υπηρεσιών και εφαρμογών. Και τα δύο αυτά υποσυστήματα διαχειρίζονται από το ατομικός εντολή που βρίσκεται στο / usr / bin /.

Το RPM-OSTree καθιστά το σύστημα ατομικών αρχείων αμετάβλητο. δηλαδή, το σύστημα αρχείων είναι μόνο για ανάγνωση εκτός από τα / var και / κλπ. Ο κατάλογος / var / lib / docker είναι όπου αποθηκεύονται όλα τα αρχεία και οι εικόνες που σχετίζονται με το Docker, ενώ το / etc έχει όλα τα αρχεία διαμόρφωσης. Όπως θα δούμε αργότερα, αυτό καθιστά απλούστερες και ασφαλέστερες αναβαθμίσεις και υποβαθμίσεις του κεντρικού υπολογιστή, απαραίτητη απαίτηση κατά τη διαχείριση δυνητικά χιλιάδων κεντρικών υπολογιστών κοντέινερ σε ένα σύμπλεγμα.

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

Στο Atomic, αυτό γίνεται με αυτό που ονομάζεται υπερ-προνομιακό κοντέινερ, το οποίο έχει τη δυνατότητα να βλέπει και να χειρίζεται τον ίδιο τον κεντρικό υπολογιστή. Έτσι, αν και ατομικός μοιάζει με μια τυπική εντολή Docker, συμπληρώνει τα κενά μεταξύ Docker και RPM-OSTree — διαμόρφωση σεναρίων εγκατάστασης, ρύθμιση υπηρεσιών, εκχώρηση κατάλληλων προνομίων και τα παρόμοια — για να επιτρέψει την αξιόπιστη ανάπτυξη μιας εφαρμογής που βασίζεται σε κοντέινερ.

Με απλά λόγια, τοατομικός Η εντολή σάς επιτρέπει να χειριστείτε την υποκείμενη υποδομή κεντρικού υπολογιστή (ομάδες, ονόματα, SELinux κ.λπ.) για την εκτέλεση των εφαρμογών σας. Για παράδειγμα, ας υποθέσουμε ότι δημιουργήσατε μια εφαρμογή κοντέινερ Network Time Protocol (ntpd) που απαιτεί τη δυνατότητα SYS_TIME προκειμένου να τροποποιηθεί η ώρα του συστήματος του κεντρικού υπολογιστή. Μπορείτε να το διαμορφώσετε προσθέτοντας μεταδεδομένα στην εικόνα κοντέινερ χρησιμοποιώντας την εντολή:

LABEL RUN / usr / bin / docker run -d —cap-add = SYS_TYPE ntpd

Στη συνέχεια, όταν εκτελείτε το κοντέινερ (ατομική εκτέλεση ntpd), το σύστημα θα διαβάσει αυτά τα μεταδεδομένα και θα διαμορφώσει τη δυνατότητα SYS_TIME και άλλους πόρους για το κοντέινερ.

Εγκατάσταση και διαμόρφωση ατομικού κεντρικού υπολογιστή

Η εγκατάσταση ήταν ένας αγώνας, κυρίως επειδή βρήκα την τεκμηρίωση αποδιοργανωμένη και συγκεχυμένη. Τα έγγραφα υποθέτουν ένα υψηλό επίπεδο γνώσεων για το οικοσύστημα Red Hat που δεν θα έχουν όλοι οι αναγνώστες. Μετά από μερικές λανθασμένες εκκινήσεις, κατάφερα τελικά να εγκαταστήσω από ένα bare-metal ISO. Η υποστήριξη για εγκατάσταση εικονικής μηχανής με οτιδήποτε άλλο εκτός από το virt-manager είναι επώδυνη. Το Atomic Host σίγουρα δεν είναι φιλικό προς τα Windows ή Mac σε αυτό το θέμα.

Για όσους είναι εξοικειωμένοι με την εγκατάσταση του CentOS, η διαδικασία γυμνού μετάλλου θα είναι εύκολη. Οι μόνες αξιοσημείωτες διαφορές είναι στη διάταξη του δίσκου, με χώρο που προορίζεται αυτόματα για το Docker και τα κοντέινερ, μαζί με την πληθώρα των προσθηκών για SELinux, cgroups κ.λπ. που συνοδεύουν την εγκατάσταση του κοντέινερ OS.

Η χρήση του Kubernetes για τη διαχείριση κοντέινερ σε ένα σύμπλεγμα είναι πολύ πιο περίπλοκη από την εκτέλεση του Docker σε έναν μόνο κεντρικό υπολογιστή, αλλά με μεγαλύτερη πολυπλοκότητα έρχεται μεγαλύτερη αξιοπιστία και ικανότητα. Με το Kubernetes κερδίζετε επίσης την άνεση του να γνωρίζετε ότι το σύστημα έχει δοκιμαστεί σε μάχη σε περιβάλλοντα παραγωγής μεγάλης κλίμακας (στο Google).

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

Αφού διαμορφώσαμε τον κύριο με Kubernetes, πιστοποιητικά, υπηρεσίες και ένα δίκτυο επικάλυψης Flannel και μετά εγκαθιστώντας τα Flannel (flanneld), Kubernetes (kubelet) και Etcd σε κάθε κόμβο, είχα τελικά ένα σύμπλεγμα κοντέινερ πέντε κόμβων. Δυστυχώς, αυτό κατανάλωσε αρκετή μνήμη και δεν μπόρεσα να βρω έναν τρόπο δοκιμής χρησιμοποιώντας έναν μόνο κόμβο, όπως έκανα κατά τη δοκιμή των RancherOS και VMware Photon.

Σε αυτό το σημείο, το Kubernetes μπορεί να χρησιμοποιηθεί για την εκκίνηση και τη διαχείριση pods, εκείνων των ομάδων κοντέινερ που ενσωματώνουν υπηρεσίες και εφαρμογές.

Ατομική αποθήκευση και δικτύωση κεντρικού υπολογιστή

Όπως τα περισσότερα λειτουργικά συστήματα κεντρικού υπολογιστή κοντέινερ, το Atomic Host ακολουθεί μια μινιμαλιστική προσέγγιση, με αρκετό χώρο στο δίσκο που περιλαμβάνεται για την εκτέλεση του κεντρικού υπολογιστή. Αυτό δεν αφήνει πολλά για τα πολλά κοντέινερ Docker που θα τρέχει ένα τυπικό σύμπλεγμα, οπότε θα πρέπει να επισυνάψετε εξωτερικό χώρο αποθήκευσης στον κεντρικό υπολογιστή για αυτό.

Στο Docker, οι εικόνες και τα σχετικά αρχεία συνήθως αποθηκεύονται στο / var / lib / docker και στα περισσότερα τυπικά λειτουργικά συστήματα θα τοποθετούσατε απλά μια συσκευή σε αυτό το σημείο στο σύστημα αρχείων για να προσθέσετε χώρο αποθήκευσης. Ωστόσο, η Atomic χρησιμοποιεί άμεσους τόμους LVM (Linux Volume Manager) μέσω του παρασκηνίου Device Mapper για αποθήκευση εικόνων και μεταδεδομένων Docker: / dev / atomicos / docker-data και / dev / atomicos / docker-meta. Αυτό σημαίνει ότι θα πρέπει να μάθετε κάτι σχετικά με το LVM και τους τόμους για να προσθέσετε χώρο σε έναν Atomic host.

Το σημείο εκκίνησης για τη διαχείριση αποθήκευσης στο Atomic είναι το σενάριο εγκατάστασης, / etc / sysconfig / docker-storage-setup. Το Atomic Host έχει μια δεξαμενή αποθήκευσης για αποθήκευση Docker (και host), οπότε το κόλπο εδώ είναι να προσθέσετε μια νέα συσκευή σε αυτήν την ομάδα. Αυτό θα το κάνετε προσθέτοντας στη λίστα συσκευών του αρχείου, όπως αυτό:

DEVS = "/ dev / vdb / dev / vdc"

Στη συνέχεια, εκτελείτε το βοηθητικό σενάριο, / usr / bin / docker-storage-setup. Εάν όλα πάνε καλά, οι δίσκοι σας έχουν προστεθεί στην πισίνα και ο οικοδεσπότης Atomic σας έχει χώρο για το Docker. Υποθέτω ότι το LVM θα διαχειρίζεται στην παραγωγή με τα υπάρχοντα εργαλεία διαχείρισης ή με τα σενάρια Ansible / Salt / Chef / Puppet, οπότε πιθανότατα θα φαίνεται πιο τυπικό για τους διαχειριστές που εργάζονται σε μεγάλα περιβάλλοντα κέντρων δεδομένων.

Το Project Atomic χρησιμοποιεί το Flannel για να παρέχει ένα δίκτυο επικάλυψης κοντέινερ μέσω Etcd. Μπορείτε να το διαμορφώσετε πιέζοντας ένα αρχείο διαμόρφωσης JSON στο κατάστημα κλειδιού-τιμής Etcd, χρησιμοποιώντας εργαλεία όπως το Curl. Για να διαμορφώσετε ένα υποδίκτυο για τα κοντέινερ, ενδέχεται να δημιουργήσουμε ένα αρχείο JSON που μοιάζει με αυτό:

"Δίκτυο": "172.16.0.0/12",

"SubnetLen": 24,

"Backend": {

"Τύπος": "vxlan"

   }

}

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

curl -L //localhost ::379/v2/keys/atomic.io/config -XPUT --data-urlencode [email protected]

Αν και κάπως δυσκίνητο, είναι διαχειρίσιμο. Θα ήθελα πολύ να δω ένα περιτύλιγμα για αυτές τις εντολές διαμόρφωσης που το καθιστούν πιο διαισθητικό για τον διαχειριστή του Unix, ίσως κάτι σαν ατομικό ifconfig…, ατομική διαδρομή…, και τα λοιπά.

Υπάρχει μια άλλη διαφορά εδώ που αξίζει να τονιστεί: οι έννοιες των pods και των υπηρεσιών του Kubernetes. Ένα λοβό είναι μια ομάδα δοχείων που είναι σχετικά στενά συνδεδεμένα. Όλα τα κοντέινερ σε μια ομάδα μοιράζονται τον ίδιο κεντρικό υπολογιστή και την ίδια διεύθυνση IP και όλα ζουν ή πεθαίνουν μαζί. Καθορίζετε πόσες εμφανίσεις ενός pod θέλετε να εκτελείτε και το Kubernetes εκτελεί την παραγγελία. Εάν μια παρουσία σταματήσει ή αποτύχει, το Kubernetes περιστρέφεται άλλο για να ταιριάζει με την επιθυμητή κατάσταση.

Η υπηρεσία Kubernetes είναι μια αφαίρεση που καθορίζει ένα λογικό σύνολο λοβών και μια πολιτική για την πρόσβαση σε αυτά. Αυτό δίνει σε μια (μικρο) υπηρεσία ένα, σταθερό όνομα και διεύθυνση σε ολόκληρο τον κύκλο ζωής του pod. Υπάρχουν πολλά περισσότερα σε αυτό, αλλά αυτό θα σας βοηθήσει να καταλάβετε γιατί χρειάζεστε ένα ξεχωριστό στοιχείο για τη διαχείριση του δικτύου. Στο Atomic Host, αυτό το στοιχείο είναι το Flannel.

Αναβαθμίσεις και υποβαθμίσεις του Atomic Host

Το Atomic Host χρησιμοποιεί έναν διαχειριστή πακέτων που ονομάζεται RPM-OSTree, ο οποίος συνδυάζει χαρακτηριστικά των παραδοσιακών RPM και OSTree. Το RPM-OSTree μας δίνει τη δυνατότητα να κυλήσουμε αξιόπιστα προς τα εμπρός και προς τα πίσω, καθώς η διαδικασία είναι «ατομική» (με την έννοια της λέξης στη βάση δεδομένων) Το RPM-OSTree παρέχει αξιόπιστες συναλλαγές για ενημερώσεις, πράγμα που σημαίνει ότι είναι απίθανο να σπάσει το λειτουργικό σύστημα. Όπως οι εντολές για κοντέινερ, οι αναβαθμίσεις κεντρικού υπολογιστή και οι επανατροφοδοτήσεις εμφανίζονται μπροστά από το ατομικός σύστημα διαχείρησης:

αναβάθμιση ατομικού κεντρικού υπολογιστή

επαναφορά ατομικού κεντρικού υπολογιστή

Σημειώστε ότι δεν έχω δοκιμάσει μια επαναφορά, επειδή δεν είχα τίποτα να επαναφέρω.

Το Red Hat Atomic Host ταιριάζει καλύτερα σε οργανισμούς με μεγάλη επένδυση σε δεξιότητες και υποδομές στο Red Hat. Οι εταιρείες που ξεκινούν από διαφορετική γωνία μπορεί να θέλουν να εξετάσουν άλλες επιλογές. Η συμπερίληψη του Kubernetes και η ιστορία του Red Hat σε μεγάλα περιβάλλοντα παραγωγής, σημαίνουν ότι το Atomic Host θα είναι σχεδόν ένα «drop-in» για τη λειτουργία φόρτωσης εργασίας σε επιχειρήσεις. Αλλά δεν βλέπω τους προγραμματιστές να το επιλέγουν ως πλατφόρμα επιλογής Docker.

$config[zx-auto] not found$config[zx-overlay] not found