ΕΛ/ΛΑΚ | creativecommons.gr | mycontent.ellak.gr |
freedom

Νέα από τον πλανήτη…planet.ellak.gr: LXD: Το «Docker» των Linux Containers

by: Cerebrux

Το LXD αποτελεί μια τεχνολογία στην οποία πακετάρουμε ένα μικρό λειτουργικό σύστημα Linux (αντί ενός ολόκληρου VM), με τα άκρως απαραίτητα για να χρησιμοποιούμε και να διανέμουμε μια ή πολλές υπηρεσίες ή ένα λογισμικό το οποίο μπορεί να τρέξει τοπικά η σε απομακρυσμένο server.

Πριν αρκετό καιρό είχαμε δημοσιεύσει μια σειρά οδηγών χρήσης του Docker για να χρησιμοποιούμε και να πακετάρουμε Web υπηρεσίες που φτιάχνουμε ως developers. Στο πρώτο μέρος της σειράς είχαμε κάνει μια εκτενή αναφορά και ανάλυση για τo τι είναι και πως προέκυψε η ανάγκη για τα λεγόμενα Containers:

Καλό είναι, σε περίπτωση που είναι η πρώτη φορά που ακούτε όρους όπως «containers», «image», «virtualization» κλπ να διαβάσετε την παραπάνω εισαγωγή μιας και εδώ θα μπούμε αμέσως στο ψητό.

Εισαγωγή στο LXD

Τα Linux Containers τα διαχειρίζεται μια υπηρεσία συστήματος που ονομάζεται LXC (λεξ-σι). Το LXC είναι μια διεπαφή χρήστη το οποίο μέσω ενός API και απλών εργαλείων, επιτρέπει στους χρήστες Linux να δημιουργούν εύκολα και να διαχειρίζονται containers συστημάτων ή εφαρμογών. Tο LXD, το οποίο προφέρεται ως «λεξ-ντι» κάθεται επάνω στο LXC και βοηθάει στην διαχείριση αυτών των container με τρόπο που θυμίζει Virtual Machines.

Τι μπορώ να αντικαταστήσω με το LXD;

Αν διαβάσατε το πρώτο μέρος, θα γνωρίζετε ότι όσοι κάνετε εγκατάσταση Virtual Machines για να πειραματίζεστε με servers η να αναπτύσσετε web εφαρμογές, περιορίζεστε από την διαθέσιμη μνήμη RAM και τους πόρους του host λειτουργικού για το πόσες εικονικές μηχανές μπορείτε να τρέχετε ταυτόχρονα. Advertisements

Με τα Linux Containers αυτός ο περιορισμός σχεδόν εξαφανίζεται διότι μπορείτε να σηκώσετε π.χ. 10 ubuntu servers σε μερικά δευτερόλεπτα και να τα διαμορφώσετε όπως θέλετε με ελάχιστη κατανάλωση πόρων. Επίσης μπορείτε να δημιουργήσετε snapshots για backups αλλά και images τα οποία μπορείτε να στείλετε με μια εντολή σε κάποιο προρυθμισμένο remote VPS ώστε να είναι έτοιμα για δημόσια χρήση. Επομένως μπορείτε π.χ. να έχετε ένα VPS server το οποίο όμως μέσα τρέχει πολλαπλά Linux Containers και το καθένα να είναι ανεξάρτητο και απομονωμένο εντελώς από τα υπόλοιπα. Αυτό διευκολύνει το backup, την επαναφορά αλλά και την ασφάλεια των web υπηρεσιών σας.

Επίσης, αντί να τρέχετε τα docker container σας στο host, μπορείτε να τα τρέχετε μέσα σε LXC. Αυτό γίνεται λόγο των profile που διαθέτει το LXD, το οποίο συνοδεύεται από δύο προρυθμισμένα προφίλ:

  1. Η «Default» εφαρμόζεται αυτόματα σε όλα τα containers, εκτός εάν παρέχεται από τον χρήστη μια εναλλακτική λίστα από προφίλ. Το default προφίλ καθορίζει μια συσκευή δικτύου «eth0» για το container.
  2. To «Docker» profile είναι ένα προφίλ που μπορείτε να εφαρμόσετε σε ένα container που θέλετε να εκτελέσετε Docker. Ζητάει από το LXD να φορτώσει ορισμένα απαραίτητα module του πυρήνα, ενεργοποιεί την ενθυλάκωση των container και ρυθμίζει μερικές καταχωρήσεις συσκευών.

Τα τελευταία χρόνια, το LXD έχει φτάσει σε σημείο που μπορείτε να κάνετε GPU passthrough, να ¨μιλάει¨ δηλαδή το Linux Container σας με την κάρτα γραφικών για εφαρμογές π.χ. Nvidia CUDA. Επίσης, όπως είχαμε δει, η Google χρησιμοποιεί την τεχνολογία του LXD στο Chrome OS για να μπορούν οι χρήστες του να έχουν πρόσβαση σε Linux εφαρμογές.

Εγκατάσταση και πρώτη ρύθμιση του LXD

LXD σε Ubuntu

Για την εγκατάσταση του LXD σε Ubuntu και συναφείς διανομές, μπορείτε να τρέξετε :

1sudo apt install lxd

Η παραπάνω εντολή στην πραγματικότητα, κάνει εγκατάσταση την snap έκδοση του lxd. Μόλις ξεκινήσει η εγκατάσταση θα σας ρωτήσει ποιο κανάλι εκδόσεων του LXD προτιμάτε. Διαλέξτε την έκδοση 3.0 η οποία είναι LTS έκδοση (μακράς διάρκειας υποστήριξης) και λαμβάνει ενημερώσεις ασφαλείας και διορθώσεων.

LXD σε άλλες διανομές

Για όλες τις άλλες διανομές παρέχεται ως snap package και θα πρέπει να έχετε ρυθμίσει σύμφωνα με τον παρακάτω οδηγό την διανομή σας να μπορεί να διαχειρίζεται snap πακέτα:

Έπειτα τρέχετε:

1sudo snap install lxd --channel=3.0/stable

LXD σε macOS

To LXD είναι διαθέσιμο για macOS μέσω Homebrew.

1brew install lxc

LXD σε Windows

To LXD client για Windows μπορείτε να το βρείτε εδώ.

Εγκατάσταση LXD απο τον πηγαίο κώδικα

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

Πρώτες ρυθμίσεις του LXD

Αφού έχουμε εγκαταστήσει το LXD, θα χρειαστεί να κάνουμε κάποιες ρυθμίσεις.

Φτιάχνουμε το group LXD στο σύστημά μας και προσθέτουμε τον χρήστη μας στην ομάδα αυτή:

12sudo groupadd --system lxdsudo usermod -G lxd -a <όνομα χρήστη>

όπου φυσικά <όνομα χρήστη> βάζουμε το username μας. Ελέγχουμε αν όντως μπήκε βλέποντας αν ο χρήστης μας είναι στο group lxd:

123groups <όνομα χρήστη> όνομα-χρήστη : sudo plugdev sambashare lxd

Βλέπουμε ότι ο χρήστης είναι στο γκρουπ lxd. Αν δεν είναι μπορεί να χρειαστεί να τρέξετε:

1newgrp lxd

Τέλος τρέχουμε το init για να γίνει η πρώτη διαρρύθμιση του LXD:

1lxd init

και απαντάμε στις ερωτήσεις.

Μπορούμε να επιβεβαιώσουμε ότι τρέχει το LXC ζητώντας του να μας δώσεις ένα JSON response τρέχοντας:

1234567891011121314lxc query --wait -X GET /1.0 {"api_extensions": ["storage_zfs_remove_snapshots","container_host_shutdown_timeout","container_stop_priority","container_syscall_filtering",[........]"storage": "btrfs","storage_version": "4.4"},"public": false}

Το πρώτο μας LXD container

Η δημιουργία των container με το LXD βασίζεται σε images (στιγμιότυπα). Ωστόσο, από προεπιλογή, δεν έχουν φορτωθεί images στο χώρο αποθήκευσης των image που δημιουργήσαμε με το lxd init όπως φαίνεται με την εντολή:

1lxc image list

Το LXD λαμβάνει αυτά τα image από 3 default image servers:

  1. ubuntu: (για σταθερά στιγμιότυπα του Ubuntu)
  2. ubuntu-daily: (για daily images του Ubuntu)
  3. images: (για images φτιαγμένα απο διανομές μη-Ubuntu)

Για το 3 αξίζει να αναφέρουμε ότι μπορείτε να έχετε LXC containers από διανομές όπως:

  • alpine
  • archlinux
  • centos
  • debian
  • devuan
  • fedora
  • gentoo
  • kali
  • opensuse
  • oracle
  • sabayon

και σε διαφορετικές εκδόσεις τους. Μια πλήρης λίστα είναι διαθέσιμη εδώ

Στο παρόν οδηγό χρήσης του LXD / LXC θα βασιστούμε σε Ubuntu images. Εσείς φυσικά δημιουργήστε με όποιο image θέλετε. Οι σταθερές εκδόσεις από images του Ubuntu μπορούν να προβληθούν με τον παρακάτω τρόπο:

1lxc image list ubuntu: | less

Για να ξεκινήσετε ένα πρώτο κοντέινερ που θα το ονομάσουμε «titanas» χρησιμοποιώντας ένα έτοιμο image του Ubuntu 18.04 χρησιμοποιήστε την εντολή:

1lxc launch ubuntu:18.04 titanas

Επειδή είναι η πρώτη φορά, θα γίνει λήψη του image και έπειτα η αποσυμπίεσή του για την δημιουργία του container. Αν ξανακάνετε την διαδικασία, όπως θα κάνουμε παρακάτω, θα δείτε ότι επειδή το image είναι ήδη στην αποθήκη μας, θα δημιουργηθεί άμεσα.

Πλέον το νέο σας container θα είναι τώρα ορατό στην λίστα:

1lxc list

Για να ζητήσετε πληροφορίες σχετικά με την κατάσταση αλλά και τις ρυθμίσεις του μπορείτε να τρέξετε:

12lxc info titanaslxc config show titanas

Περιορισμός πόρων για το Container

Από προεπιλογή, το κοντέινερ σας δεν συνοδεύεται από περιορισμό πόρων (π.χ. μέγεθος RAM) και κληρονομεί τους πόρους από το host περιβάλλον του. Μπορείτε να το δείτε με:

12free -mlxc exec titanas -- free -

Αν δουλεύουμε τοπικά, αυτό δεν μας απασχολεί και τόσο. Όμως αν σκοπεύουμε να εκτελούμε το container μας σε κάποιο VPS, μαλλον θα χρειαστεί να βάλουμε έναν περιορισμό.

Για να εφαρμόσετε ένα όριο μνήμης στο container σας, κάντε τo εξής:

1lxc config set titanas limits.memory 128MB

Και επιβεβαιώστε ότι έχει εφαρμοστεί με:

1lxc exec titanas -- free -

Snapshots του Container μας

Το LXD υποστηρίζει την αποθήκευση στιγμιότυπων αλλά και την επαναφορά των στιγμιότυπων των containers. Πριν προχωρήσουμε στην δημιουργία ενός στιγμιότυπου, ας κάνουμε μερικές αλλαγές στο κοντέινερ π.χ. ας κάνουμε ενημερώσεις του συστήματος (θυμίζω ότι είναι ένα minimal Ubuntu λειτουργικό)

123lxc exec titanas -- apt updatelxc exec titanas -- apt dist-upgrade -ylxc exec titanas -- apt autoremove --purge -y

Τώρα που το container μας είναι ενημερωμένο και καθαρισμένο, ας αποθηκεύσουμε ένα στιγμιότυπο αυτής της κατάστασης με όνομα «katharo»:

1lxc snapshot titanas katharo

Τώρα, ας προκαλέσουμε μια ζημιά στο container μας:

1lxc exec titanas -- rm -Rf /etc /usr

Επιβεβαιώστε ότι έχει γίνει η ζημιά με:

123lxc exec titanas -- bash Error: not found

Και επαναφέρετε τα πάντα στην κατάσταση πριν την πρόκλησης της ζημιάς:

1lxc restore titanas katharo

Επιβεβαιώστε ότι έχει επανέλθει στα φυσιολογικά του ο titanas:

123lxc exec titanas -- bash root@titanas:~#

Με την παραπάνω εντολή, αν προσέξετε είστε πλέον μέσα στο Container titanas και μπορείτε να «παίξετε» π.χ. τρέξτε htop για να δείτε την κατανάλωση πόρων ή κάντε εγκατάσταση κάποιο πακέτο, ένα LAMP stack με WordPress κλπ. Για να βγείτε από το container απλά τρέξτε exit. Αν θέλετε να κρατήσετε τις αλλαγές για μετέπειτα μπορείτε να δημιουργήσετε ένα νέο snapshot.

Δημιουργία δικών μας image

Advertisements

Όπως πιθανότατα παρατηρήσατε, το LXD βασίζεται στα έτοιμα images, δηλαδή όλα τα containers πρέπει να δημιουργούνται είτε από ένα αντίγραφο ενός υπάρχοντος container είτε από ένα image.

Μπορείτε να δημιουργήσετε νέα image από ένα υπάρχον container ή απο ένα snapshot κάποιου container.

Πιο πάνω είχαμε δημιουργήσει ένα snapshot του container μας. Για να δημοσιεύσουμε το «katharo» μας snapshot ως ένα νέο image με φιλικό προς το χρήστη ψευδώνυμο π.χ. «clean-ubuntu», τρέξτε:

1lxc publish titanas/katharo --alias clean-ubuntu

Σε αυτό το σημείο δεν θα χρειαστούμε πλέον το container «titanas», οπότε το σταματάμε και το διαγράφουμε με

12lxc stop titanaslxc delete titanas

Και τέλος μπορούμε να ξεκινήσουμε ένα νέο container με όνομα dias από τo νέο μας image με:

1lxc launch clean-ubuntu dias

Πρόσβαση σε αρχεία από το κοντέινερ

Για να τραβήξετε ένα αρχείο από το container, μπορείτε να χρησιμοποιήσετε την εντολή lxc file pull

1lxc file pull dias/etc/hosts .

Η τελεία στο τέλος, λέει ότι θέλουμε το αρχείο «εδώ / στον φάκελο που ήμαστε». Αν επιθυμούμε να αποθηκευτεί σε άλλη διαδρομή, το γράφουμε

Ας προσθέσουμε μια καταχώρηση στο αρχείο που τραβήξαμε από το container μας:

1echo "1.2.3.4 paradigma" >> hosts

Και τώρα ας το στείλουμε πάλι πίσω στο container μας… από εκεί που ήλθε:

1lxc file push hosts dias/etc/hosts

Ας επιβεβαιώσουμε ότι είναι μέσα στο container:

1lxc exec dias -- cat /etc/hosts

όπου αν το στείλαμε σωστά θα δούμε την καταχώρηση 1.2.3.4 paradigma στο τέλος του αρχείου.

Μπορείτε επίσης να χρησιμοποιήσετε αυτόν τον μηχανισμό για να αποκτήσετε πρόσβαση στα αρχεία καταγραφής του container σας:

1lxc file pull dias/var/log/syslog - | less

Δεν θα χρειαστούμε πια αυτό το container, οπότε σταματήστε και διαγράψτε το με… βίαιο τρόπο:

1lxc delete --force dias

Χρησιμοποιήστε έναν απομακρυσμένο διακομιστή

Θυμηθείτε, στην αρχή αναφέραμε τους 3 server που ψάχενει για images το LXC. Το lxc λοιπόν υποστηρίζει πολλαπλά «remotes», τα οποία απομακρυσμένα συστήματα μπορούν να είναι διακομιστές των images είτε ως, μόνο για λήψη ή άλλοι και ως LXD servers.

Το upstream LXC τρέχει ένα τέτοιο διακομιστή στο https://images.linuxcontainers.org το οποίο εξυπηρετεί ένα σύνολο αυτόματα παραγόμενων images απο διάφορες διανομές Linux όπως είχαμε δει πιο πάνω.

Μπορείτε να δείτε την λίστα με τα διαθέσιμα images των διανομών αλλά και τις εκδόσεις του με:

1lxc image list images: | less

Για δοκιμή δημιουργείστε ένα νέο container από Centos 7 με:

1lxc launch images:centos/7 ira

Επιβεβαιώστε ότι είναι πράγματι το Centos 7 με:

1lxc exec ira -- cat /etc/redhat-release

Και διαγράψτε το… βίαια:

1lxc delete -f ira

Η λίστα όλων των διαμορφωμένων remotes στο σύστημά σας μπορεί να ληφθεί με:

1lxc remote list

Το παραπάνω είναι χρήσιμο όταν θέλετε να δείτε τους διαθέσιμους LXD servers που μπορεί να έχετε προσθέσει εσείς. Η δημιουργία LXD server είναι πέρα απο τους σκοπούς του παρόντος εισαγωγικού οδηγού οπότε για περισσότερα σχετικά με το θέμα αυτό δείτε τις παραπομπές.

Γραφικό περιβάλλον για τα LXD Containers

Παρότι το τερματικό είναι υπεραρκετό όταν έχεις να διαχειριστείς 3-4 containers σταδιακά, όταν φτιάξετε containers με διαφορετικές διαρρυθμίσεις ίσως να θελήσετε να τα διαχειρίζεστε από ένα γραφικό περιβάλλον. Επίσημα, τουλάχιστον δεν υπάρχει κάποιο γραφικό περιβάλλον παρά μόνο πρόσθετα για cloud διαχειριστές π.χ. Openstack κλπ.

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

Εγκατάσταση του lxdui

Πρώτα θα πρέπει να κάνουμε εγκατάσταση κάποιες εξαρτήσεις στο Ubuntu

1sudo apt install -y git build-essential libssl-dev python3-venv python3-pip python3-dev zfsutils-linux bridge-utils

έπειτα κατεβάζουμε από το github το λογισμικό

1git clone https://github.com/AdaptiveScale/lxdui.git

μπαίνουμε στον φάκελο που κατεβάσαμε μέσα και τρέχουμε την εγκατάσταση

123cd lxdui sudo python3 setup.py install

αφού ολοκληρωθεί, ξεκινάμε το lxdui

1sudo lxdui start

Ανοίγουμε τον browser και πηγαίνουμε στο http://127.0.0.1:15151 και βάζουμε για username και password admin/admin

Βλέπουμε λοιπόν ότι έχουμε πρόσβαση στα container που είχαμε φτιάξει αλλά και στα remotes από όπου με ένα κλικ μπορούμε να κάνουμε λήψη και δημιουργία νέων containers. Επίσης μπορούμε να μπούμε μέσα στο container από το browser μας κάνοντας κλικ στην λίστα επιλογών Actions. Για μια πλήρη περιγραφή των δυνατοτήτων του επισκεφτείτε το αποθετήριο του lxdui.

Επίλογος

Ελπίζω ότι το παρών άρθρο σας έκανε μια καλή εισαγωγή στο LXD, τις δυνατότητές του και στο πόσο εύκολο είναι να το χρησιμοποιήσετε. Ελπίζουμε να σας φανεί χρήσιμο στο καθημερινό workflow σας είτε είστε Sysadmin είτε developer είτε θέλετε απλά να απαλλαγείτε από τα πολλά Virtual Machines δοκιμών.

Στο μέλλον, αν υπάρξει ενδιαφέρον θα παρουσιάσουμε και άλλες πτυχές και δυνατότητες του LXD και κατ επέκταση των Linux Containers

Παραπομπές

Πηγή άρθρου: planet.ellak.gr https://cerebrux.net/

Leave a Comment