Επιστροφή στο blog

Μια εισαγωγή στην προετοιμασία διακομιστών με το CloudInit

Μια εισαγωγή στην προετοιμασία διακομιστών με το CloudInit

Αυτόν τον μήνα ανακοινώσαμε μια πολύ συναρπαστική συνεργασία με την Canonical, τους δημιουργούς του Ubuntu. Πάνω απ' όλα, το κύριο στοιχείο σε αυτή τη συνεργασία είναι η εισαγωγή της πλήρους υποστήριξης CloudInit μεταξύ του cloud της CloudSigma και του Ubuntu.

Μια εισαγωγή στο CloudInit

Αν δεν είστε εξοικειωμένοι με το CloudInit, είναι το βιομηχανικό πρότυπο για το bootstrapping διακομιστών cloud. Για να διευκρινίσουμε, αν χρησιμοποιείτε ένα απλό DSL είναι δυνατό να εκτελέσετε εύκολα εργασίες κατά την πρώτη εκκίνηση. Αξίζει επίσης να σημειωθεί ότι το CloudInit δεν περιορίζεται στο Ubuntu. Σήμερα θα βρείτε υποστήριξη CloudInit στις περισσότερες σύγχρονες διανομές Linux (αλλά τα υποστηριζόμενα cloud θα διαφέρουν).

Πριν ξεκινήσουμε με το CloudInit, είναι σημαντικό να κατανοήσουμε πού ταιριάζει το CloudInit στο οικοσύστημα provisioning. Αν και είναι δυνατό να εκτελέσετε το CloudInit ως αυτόνομο σύστημα provisioning, είναι πολύ πιο σύνηθες να το χρησιμοποιείτε σε συνδυασμό με ένα άλλο σύστημα provisioning, όπως το Ansible, το Chef, το Puppet ή το Salt. Σε αυτή την περίπτωση, θα χρησιμοποιούσατε απλώς το CloudInit για να φέρετε τον νέο σας διακομιστή σε μια κατάσταση όπου το σύστημα provisioning μπορεί να αναλάβει. Προσωπικά, χρησιμοποιώ συχνά το CloudInit σε συνδυασμό με το Ansible.

Χρήση του CloudInit στην CloudSigma

Η χρήση του CloudInit στην CloudSigma είναι πολύ απλή.

Για να χρησιμοποιήσετε το CloudInit σε έναν διακομιστή Ubuntu 14.04, ακολουθήστε τα εξής βήματα:

    • Κλωνοποιήστε τον δίσκο “Ubuntu 14.04 Cloud Image” από το marketplace (αυτή τη στιγμή ο μόνος πλήρως υποστηριζόμενος δίσκος με CloudInit). Βεβαιωθείτε ότι έχετε αλλάξει το μέγεθος του κλωνοποιημένου δίσκου στο επιθυμητό μέγεθος και θα επεκτείνει αυτόματα το σύστημα αρχείων κατά την πρώτη εκκίνηση.
    • Δημιουργήστε έναν νέο διακομιστή.
    • Με τη δημιουργία του διακομιστή, θα δείτε ένα κουμπί CloudInit κάτω από την κατάσταση του διακομιστή.

CloudInit

    • Όταν κάνετε κλικ σε αυτό το κουμπί, θα εμφανιστεί ο ακόλουθος διάλογος.

CloudInit_activate

  • Απλώς επικολλήστε τα δεδομένα CloudInit εδώ και πατήστε ‘Activate’.
  • Μπορείτε να εκκινήσετε τον διακομιστή σας και το σενάριο θα εκτελεστεί κατά την πρώτη εκκίνηση.

Εγκατάσταση κλειδιών SSH με το CloudInit

Τώρα που γνωρίζετε πώς να χρησιμοποιείτε το CloudInit στο cloud μας, ας αξιοποιήσουμε αυτή τη νέα γνώση χρησιμοποιώντας τη για να εγκαταστήσουμε δύο κλειδιά SSH. Τα δύο φανταστικά δημόσια κλειδιά SSH που θα χρησιμοποιήσουμε είναι τα ‘ssh-rsa AAA[…] user1@host‘ και ‘ssh-rsa AAA[…] user2@host‘. (Για να μάθετε περισσότερα σχετικά με τη δημιουργία κλειδιών SSH, ρίξτε μια ματιά στη σελίδα αυτή στο Github.)

Στα Ubuntu Cloud Images, το προεπιλεγμένο όνομα χρήστη είναι ‘ubuntu’. Επομένως, τα κλειδιά θα εγκατασταθούν σε αυτόν τον λογαριασμό χρήστη.

Η διαμόρφωση του CloudInit για αυτό θα φαινόταν ως εξής:

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]

Παρακαλούμε σημειώστε ότι τα κενά έχουν σημασία. Υπάρχουν δύο κενά πριν από το ‘-‘. Αν βάλετε μόνο ένα, ενδέχεται να μην αναγνωριστεί από τον διακομιστή.

Μόλις αποθηκεύσετε τη διαμόρφωση του CloudInit και εκκινήσετε τον διακομιστή, θα πρέπει να μπορείτε να συνδεθείτε μέσω SSH στον διακομιστή χρησιμοποιώντας τον χρήστη ‘ubuntu’:

[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information as of Sun Oct 19 21:51:54 UTC 2014

System load: 0.0 Users logged in: 0
Usage of /: 77.4% of 39.34GB IP address for eth0: aaa.bbb.ccc.ddd
Memory usage: 26%
Swap usage: 0%
Processes: 113

Graph this data and manage this system at:
https://landscape.canonical.com/

Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.
[...]
ubuntu@myserver:~$
[/bash]

Εγκατάσταση ενημερώσεων συστήματος με το CloudInit

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

Για να εγκαταστήσετε ενημερώσεις συστήματος κατά την πρώτη εκκίνηση, προσθέστε τα εξής:

[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]

Μπορεί επίσης να παρατηρήσετε ότι υπάρχει μια παρόμοια επιλογή που ονομάζεται ‘package_update,’ η οποία είναι ένα ανεξάρτητο από τη διανομή ψευδώνυμο για το ‘apt_update’ στο Ubuntu.

Επίσης, το ‘apt_update’ θα οριστεί σε true από προεπιλογή εάν έχει οριστεί το ‘packages’ (παρακάτω), αλλά το έχω προσθέσει παραπάνω για να το κάνω πιο σαφές.

Εγκατάσταση πακέτων με το CloudInit

Ένα θεμελιώδες μέρος για την εκκίνηση (bootstrapping) συστημάτων είναι η δυνατότητα εγκατάστασης πακέτων κατά την εκκίνηση. Ευτυχώς, το CloudInit το κάνει και αυτό εύκολο. Το μόνο που χρειάζεται να κάνουμε είναι να καθορίσουμε μια λίστα με τα πακέτα που θέλουμε να εγκαταστήσουμε κάτω από το ‘packages.’ Για παράδειγμα, αν θέλαμε να εγκαταστήσουμε τα ‘python-pip,’ ‘fail2ban’ και ‘vim’, θα φαινόταν ως εξής:

[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]

Και πάλι, παρακαλώ σημειώστε ότι τα κενά έχουν σημασία. Υπάρχουν δύο κενά πριν από το ‘-‘.

Ρύθμιση του hostname με χρήση του CloudInit

Όταν δημιουργείτε έναν νέο διακομιστή, μπορεί επίσης να θέλετε να ορίσετε το hostname για αυτόν.

[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]

Εκτέλεση εντολών κατά την πρώτη εκκίνηση με το CloudInit

Υποθέτοντας ότι κάνετε κάτι πιο εξελιγμένο με τους διακομιστές σας, είναι πιθανό να έχετε κάποια εντολή που πρέπει να εκτελέσετε κατά την πρώτη εκκίνηση.

Εδώ είναι που μπαίνουν στο παιχνίδι τα ‘runcmd’ και ‘bootcmd’. Και τα δύο σας επιτρέπουν να εκτελείτε εντολές κατά την πρώτη εκκίνηση. Η διαφορά είναι ότι το ‘bootcmd’ εκτελείται νωρίτερα στη διαδικασία εκκίνησης από το ‘runcmd.’

Για να χρησιμοποιήσετε οποιαδήποτε από αυτές τις εντολές, προσθέστε τα ακόλουθα στο CloudInit σας:

[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]

Χρήση του CloudInit με έναν διαχειριστή ρυθμίσεων (configuration manager)

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

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

Πώς να συνδέσετε πολλαπλά στοιχεία μαζί

Για όσους δεν είναι εξοικειωμένοι με αρχεία τύπου YAML, μπορεί να μην είναι προφανές πώς να συνδέσουν πολλαπλά στοιχεία CloudInit. Ωστόσο, είναι απλό. Στην πρώτη γραμμή, χρειάζεστε το ‘#cloud-config‘. Μετά από αυτό, απλά προσθέτετε τις ρυθμίσεις σας.

Για παράδειγμα, ο συνδυασμός όλων των παραπάνω παραδειγμάτων σε μία ρύθμιση θα φαινόταν ως εξής:

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
packages:
- python-pip
- fail2ban
- vim
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]

Πρόσθετοι πόροι

Έχουμε πραγματικά ξύσει μόνο την επιφάνεια του τι μπορεί να κάνει το CloudInit σε αυτό το άρθρο. Υπάρχουν πολλά άλλα πράγματα που μπορείτε επίσης να κάνετε για να μάθετε, όπως δημιουργία χρηστών και ομάδων, εγγραφή αρχείων στο δίσκο και κλήση διευθύνσεων URL όταν τελειώσει (για την ειδοποίηση άλλων συστημάτων).

Αν θέλετε να μάθετε περισσότερα για το CloudInit, συνιστώ τις ακόλουθες πηγές:

author

Viktor Petersson

Συγγραφέας · CloudSigma

Ο Preslav Dobrev είναι Δημιουργικός Σχεδιαστής στην CloudSigma, με εστίαση στη συνεπή επιχειρηματική ταυτότητα μέσω παραδοσιακών και καινοτόμων καναλιών μάρκετινγκ. Διαθέτει την ικανότητα να συνδυάζει το καλλιτεχνικό όραμα με το στρατηγικό μάρκετινγκ για τη δημιουργία εντυπωσιακών αφηγήσεων επωνυμίας.

Σχόλια

Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.