Sådan bruges Linux-containere med LXC og LXD

I de gode gamle dage betød installation af et operativsystem at trække alle hardwarekomponenterne sammen, skyde din nye computer op med en installationsdisk i et perifert drev og sætte installationsprocessen løs, gør sine ting. Den samlede forløbne tid kunne løbe hvor som helst mellem timer og uger.

I disse dage kan jeg sige til mig selv "Jeg ville ikke have noget imod at teste det på en server, der kører en bestemt version af CentOS" og - afhængigt af et antal variabler og forudsat at det originale billede allerede er downloadet - kan jeg have en fuldt fungerende virtuelt system klar inden for 30 sekunder. Dine nøjagtige resultater kan variere, men ikke så meget.

Du kan se, hvordan alt dette fungerer i mit nye Pluralsight "Linux System Optimization" kursus - som denne artikel er baseret på.

Hvad har kørt al denne ændring? Virtualisering. Og især container virtualisering.

Et virtualiseret operativsystem er et filsystem, der indeholder alle de softwarebiblioteker, binære filer og konfigurationsfiler, du har brug for for at starte en traditionel maskine. Det er bare, at dette bestemte filsystem ikke er gemt i rod- eller bootpartitionen, som din computer ville læse, når den tændes, men på en anden del af din lagervolumen.

Og "tænde" din virtuelle computer sker, når noget software kløgtigt narrer filerne til at tro, at de kører helt alene på deres egen hardware, når de virkelig deler plads og ressourcer med værtsoperativsystemet og måske nogle andre virtuelle computere.

Generelt er der to slags softwaresystemer, der bruges til servervirtualiseringsadministration: hypervisor og container.

Hypervisors giver et lag af abstraktion, der tillader gæstevm-computere at skabe et isoleret miljø med adgang til systemhardwaren, der efterligner en bare metal-server. Dette betyder, at hypervisor-VM'er kan bygges fra ethvert operativsystem, der er kompatibelt med din underliggende hardware. Men det betyder også, at de bruger mere plads og mere hukommelse og beregner ressourcer.

Containervirtualisering

Containere deler på den anden side værtscomputerens OS-kerne og eksisterer inden for omhyggeligt sikrede og isolerede rum, der administreres af systemværktøjer som cgroups. Fordi de deler kernen, kan hukommelsen og systemressourcerne, der forbruges af containere, være virkelig minimale med intet spildt. Og som du vil se, vil de hastigheder, du får ved at køre containerapplikationer, være betagende.

En masse containerrelateret opmærksomhed i løbet af de sidste par år har været fokuseret på Docker og for nylig Googles containerorkesteringsværktøj, Kubernetes. Faktisk er Kubernetes velegnet til mikrotjenestearkitekturer i virksomhedsskala.

Men der er en ældre og uden tvivl mere moden implementering af containermodellen, der ikke er gået nogen steder. Linux Container Project, LXC og dets nyere værktøjssæt, LXD, har styrker, som mange vil hævde, gør det til en bedre kandidat til nogle brugssager end Kubernetes. Især udmærker LXC sig i at opbygge lette og hurtige sandkassemiljøer til test og applikationsudvikling.

I denne artikel vil jeg vise dig, hvordan du installerer LXD, hvordan du forbereder og starter en simpel beholder, der kører den ultra-lille Alpine Linux, og hvordan du åbner en shell-session i din nye container. Jeg forklarer også, hvordan man finder og starter flere versioner af andre distributioner.

En ting, jeg kan fortælle dig med det samme, er at når jeg underviser i LXC, svarer studerende med forbløffelse over, hvor kraftfuld og effektiv brug af containere kan være.

Når vi er færdige med alt dette, vil du være i stand til at fyre maskiner op for at afprøve det, du lærer eller arbejder på, inden for få sekunder. Når et eksperiment går dårligt, kan du øjeblikkeligt lukke ned og fjerne en container og bygge en anden til at erstatte den. Der er simpelthen ikke længere nogen undskyldning for ikke at lære.

Bygning af LXD-containere

Vi får LXC i gang med at arbejde på en ny installation af en Ubuntu 18.04-maskine. I denne demo installerer og initialiserer vi et LXD-miljø og bruger derefter LXD-versionen af ​​LXC-kommandolinjegrænsefladen til at downloade og starte en Alpine Linux-container. Vi bekræfter alt fungeret og kigger os lidt rundt for at se, hvordan miljøet befolkes.

Jeg skal bruge snap pakkehåndtering til at installere LXD, fordi det nu er den officielle anbefaling. Og ikke kun for LXD, husk dig: alle slags applikationer kører til alternative ledere som snap eller AppImmage og Flatpak. Jeg elsker stadig min Debian-evne, men du kan ikke bekæmpe hele verden.

$ sudo snap install lxd 

LXD - som igen er et opdateret værktøjssæt designet til at styre LXC API - kommer i en pakke, der indeholder alle de almindelige LXC-afhængigheder. Én installationskommando, og vi er færdige.

Det er vigtigt at initialisere LXC-miljøet ved hjælp af lxd init-kommandoen. Du kan selv opsætte tingene manuelt, men det er mere sandsynligt, at du får det okay på denne måde. Init-processen vil stille dig en masse spørgsmål, og i øjeblikket fungerer standard svarene alle sammen.

$ sudo lxd init 

Når det er gjort, er vi klar til at bygge din første container. Uanset hvilken Linux-distribution og version vi ønsker, skal vi finde og downloade billedet. LXC-projektet opretholder et lager med en lang række billeder på images.linuxcontainers.org. Du kan se, at der normalt er flere versioner af hver distro, der giver dig mulighed for at bygge containere, der fungerer med næsten enhver software, du kan kaste på den.

Jeg vil bruge den nyeste version af Alpine Linux, fordi den er virkelig lille. Du er velkommen til at bruge ethvert billede, du kan lide - herunder de store drenge som Ubuntu og CentoOS. Alpine downloades naturligvis meget hurtigt.

Men inden vi gør det, skal jeg fortælle dig, hvordan du finder ud af kommandolinjens syntaks, der er nødvendig for at få dit billede.

Som du kan se i dette skærmbillede fra LXD-webstedet, kan du få tre stykker information, du har brug for fra selve siden: navnet på distroen - Alpine, i dette tilfælde - frigivelsesnummeret - 3.10 - og arkitekturen . Vi er efter amd64.

Vi er nu klar til at udløse download ved at køre launchkommandoen:

$ sudo lxc launch images:alpine/3.10/amd64 demo 

Læg mærke til, hvordan syntaksen er "lxc", selvom dette teknisk set er en LXD-grænseflade. "billeder" fortæller LXC, at vores image lever i den offentlige repo, vi så tidligere. Vores tre databit - distronavn, frigivelsesnummer og arkitektur indtastes adskilt af skråstreg. Jeg bruger "demo" som navnet på min container. Det skal være alt, hvad vi har brug for.

Du kan se, hvor lille Alpine er, hvor hurtigt den downloades. Min internetforbindelse er ikke så hurtig, og jeg har ikke spillet nogen spil med optagelsen. For at bekræfte, at det fungerede, kører jeg "lxc ls" for at liste alle de beholdere, der aktuelt er installeret. Der er bare den ene. Og dens aktuelle status "kører".

sudo lxc ls +------+---------+----------------------+------------+-----------+ | NAME | STATE | IPV4 | TYPE | SNAPSHOTS | +------+---------+----------------------+------------+-----------+ | demo | RUNNING | 10.125.45.119 (eth0) | PERSISTENT | 0 | +------+---------+----------------------+------------+-----------+ 

Du kan åbne en root-session, der ikke er logget ind i en container ved hjælp af kommandoen "lxc exec". Angiv bare containernavnet, og fortæl derefter LXC, at du vil køre en shell ved hjælp af sh-tolken (du foretrækker måske, /bin/bashhvis du arbejder med en Ubuntu- eller CentOS-container - dit opkald på begge måder). Som du selv kan se, om du følger hjemme, har vi en normal Linux-kommandoprompt, og alt, hvad Linux-y er nu muligt.

$ sudo lxc exec demo sh ~ # 

You could also run a single command without opening a full shell by typing the command instead of this sh.

$ sudo lxc exec demo ls / bin etc lib mnt proc run srv tmp var dev home media opt root sbin sys usr 

You can bail out of the shell any time you like using exit and return to your host. Here, besides listing running containers, I can also list any storage pools. The default pool that was created during initialization is there, and we can see where the disk image is stored. /var/lib/lxd is, by default, where all LXC resources are kept.

$ sudo lxc storage ls +---------+-------------+--------+--------------------------------+---------+ | NAME | DESCRIPTION | DRIVER | SOURCE | USED BY | +---------+-------------+--------+--------------------------------+---------+ | default | | btrfs | /var/lib/lxd/disks/default.img | 3 | +---------+-------------+--------+--------------------------------+---------+ 

I can similarly list all my networks. There happen to be a few network bridges on this system (I've been playing around a bit, as you can see). There's also the physical enp0s3 bridge used by the host Ubuntu server. Although between you and me, that one's not physical either, as this is actually a VM running in Oracle's Virtual Box.

$ lxc network ls +---------+----------+---------+-------------+---------+ | NAME | TYPE | MANAGED | DESCRIPTION | USED BY | +---------+----------+---------+-------------+---------+ | enp0s3 | physical | NO | | 1 | +---------+----------+---------+-------------+---------+ | lxdbr0 | bridge | YES | | 1 | +---------+----------+---------+-------------+---------+ | mynet | bridge | YES | | 0 | +---------+----------+---------+-------------+---------+ | testbr0 | bridge | YES | | 1 | +---------+----------+---------+-------------+---------+ 

If we needed to, we could easily add a new virtual interface to our container using the "lxc network attach" command. Here, I'll specify the physical network and then the name of our container.

$ lxc network attach enp0s3 demo 

With that done, you could open a new shell in the container to see what's changed. There should now be an eth1 interface listed. You may need to reboot for all the changes to take full effect. By doing that you can also marvel at just how fast this thing can reboot itself - for all intents and purposes, it'll happen faster than you can type your exec command to open a new shell.

Enjoy your new environment!

This article is based on content in my Pluralsight course, "Linux System Optimization." There's much more administration goodness in the form of books, courses, and articles available at bootstrap-it.com.