Osnovne karakteristike LXD - Linux kontejnerskih sistema
LXD je sljedeća generacija sistemskog upravitelja kontejnera, tako kaže izvor. Nudi korisnički interfejs sličan virtuelnim mašinama, ali umesto toga koristi Linux kontejnere.
LXD jezgro je privilegirani daemon (servis koji radi s root pravima) koji pruža REST API preko lokalnog unix socketa, kao i preko mreže ako je instalirana odgovarajuća konfiguracija. Klijenti, kao što je alat komandne linije koji se isporučuje uz LXD, postavljaju zahtjeve preko ovog REST API-ja. To znači da bez obzira da li pristupate lokalnom ili udaljenom hostu, sve radi isto.
U ovom članku nećemo se detaljno zadržavati na konceptima LXD-a, nećemo razmatrati sve dostupne mogućnosti navedene u dokumentaciji, uključujući nedavnu implementaciju podrške za QEMU virtuelne mašine u najnovijim verzijama LXD-a paralelno sa kontejnerima. Umjesto toga, naučit ćemo samo osnove upravljanja kontejnerima - postavljanje spremišta za pohranu, umrežavanje, pokretanje kontejnera, primjena ograničenja resursa i kako koristiti snimke kako biste mogli steći osnovno razumijevanje LXD-a i koristiti kontejnere na Linuxu.
To znači da će dva paketa biti instalirana odjednom, jedan kao sistemski, a drugi kao snap paket. Instaliranje dva paketa na sistem može stvoriti neki problem u kojem sistemski paket može ostati bez roditelja ako snap paket ukloni upravitelj snap paketa.
Pronađite paket lxd u snap spremištu možete koristiti sljedeću naredbu:
snap find lxd
Name Version Summary
lxd 3.21 System container manager and API
lxd-demo-server 0+git.6d54658 Online software demo sessions using LXD
nova ocata OpenStack Compute Service (nova)
nova-hypervisor ocata OpenStack Compute Service - KVM Hypervisor (nova)
distrobuilder 1.0 Image builder for LXC and LXD
fabrica 0.1 Build snaps by simply pointing a web form to...
satellite 0.1.2 Advanced scalable Open source intelligence platform
Pokretanjem komande list možete biti sigurni da je paket lxd još nije instalirano:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
Uprkos činjenici da je LXD snap paket, on se mora instalirati preko sistemskog paketa lxd, koji će kreirati odgovarajuću grupu u sistemu, potrebne uslužne programe u /usr/bin i tako dalje.
sudo apt update
sudo apt install lxd
Uvjerimo se da je paket instaliran kao snap paket:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
lxd 3.21 13474 stable/… canonical✓ -
Da biste instalirali LXD paket na sistem, potrebno je da pokrenete sljedeće komande, prva će ažurirati listu paketa na sistemu dostupnih u spremištu, druga će direktno instalirati paket:
sudo pacman -Syyu && sudo pacman -S lxd
Nakon instaliranja paketa, da bi običan korisnik mogao upravljati LXD-om, mora se dodati u sistemsku grupu lxd:
sudo usermod -a -G lxd user1
Pobrinimo se za korisnika user1 dodano u grupu lxd:
id -Gn user1
user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd
Ako grupa lxd nije vidljiv na listi, tada morate ponovo aktivirati korisničku sesiju. Da biste to učinili, morate se odjaviti i prijaviti pod istim korisnikom.
Aktiviraj u systemd učitavanje LXD usluge pri pokretanju sistema:
Prije nego što započne inicijalizacija, moramo razumjeti kako je skladište u LXD-u logično raspoređeno.
Skladištenje (skladištenje) sastoji se od od jednog ili više skladišni bazen koji koristi jedan od podržanih sistema datoteka kao što su ZFS, BTRFS, LVM ili regularni direktoriji. Svaki skladišni bazen podijeljen je na sveske (Volumen skladišta) koji sadrže slike, kontejnere ili podatke za druge svrhe.
Slike - ovo su posebno sastavljene distribucije bez Linux kernela i dostupne iz vanjskih izvora
Kontejneri - ovo su raspoređene distribucije iz slika, spremne za upotrebu
Snimci - ovo su snimci stanja kontejnera u koje se možete vratiti
Za upravljanje pohranom u LXD-u koristite naredbu lxc storage certifikat za koji možete dobiti navođenjem ključa - lxc storage --help
Sljedeća komanda prikazuje listu svih skladišni bazen u LXD skladištu:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 2 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 4 |
+---------+-------------+--------+--------------------------------+---------+
Za pregled liste svih Volumen skladišta u odabranom skladišni bazen služi timu lxc storage volume list:
lxc storage volume list hddpool
+-------+----------------------------------+-------------+---------+
| TYPE | NAME | DESCRIPTION | USED BY |
+-------+----------------------------------+-------------+---------+
| image | ebd565585223487526ddb3607f515... | | 1 |
+-------+----------------------------------+-------------+---------+
lxc storage volume list ssdpool
+-----------+----------------------------------+-------------+---------+
| TYPE | NAME | DESCRIPTION | USED BY |
+-----------+----------------------------------+-------------+---------+
| container | alp3 | | 1 |
+-----------+----------------------------------+-------------+---------+
| container | jupyter | | 1 |
+-----------+----------------------------------+-------------+---------+
| image | ebd565585223487526ddb3607f515... | | 1 |
+-----------+----------------------------------+-------------+---------+
Takođe, ako za skladišni bazen Prilikom kreiranja, odabran je sistem datoteka BTRFS, a zatim dobijete listu Volumen skladišta ili podskupovi u BTRFS interpretaciji, možete koristiti alate ovog sistema datoteka:
sudo btrfs subvolume list -p /var/lib/lxd/storage-pools/hddpool
ID 257 gen 818 parent 5 top level 5 path images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
sudo btrfs subvolume list -p /var/lib/lxd/storage-pools/ssdpool
ID 257 gen 1820 parent 5 top level 5 path images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
ID 260 gen 1819 parent 5 top level 5 path containers/jupyter
ID 263 gen 1820 parent 5 top level 5 path containers/alp3
Prije kreiranja i korištenja kontejnera, morate izvršiti opću LXD inicijalizaciju koja kreira i konfigurira mrežu i skladište. Ovo se može uraditi ručno koristeći standardne klijentske komande koje su dostupne na listi pozivanjem komande lxc --help ili pomoću čarobnjaka za inicijalizaciju lxd init odgovarajući na nekoliko pitanja.
Tokom inicijalizacije, LXD postavlja nekoliko pitanja, uključujući određivanje tipa sistema datoteka za podrazumevani skladišni bazen. Podrazumevano, za njega je izabran sistem datoteka BTRFS. Biće nemoguće promijeniti na drugi FS nakon kreiranja. Predlaže se da odaberete FS tabela za poređenje karakteristika:
svojstvo
imenik
Btrfs
LVM
ZFS
CEPH
Optimizirano skladištenje slika
Ne.
da
da
da
da
Optimizirano kreiranje instance
Ne.
da
da
da
da
Optimizirano kreiranje snimka
Ne.
da
da
da
da
Optimiziran prijenos slike
Ne.
da
Ne.
da
da
Optimiziran prijenos instance
Ne.
da
Ne.
da
da
Kopiraj na pisanje
Ne.
da
da
da
da
Blok baziran
Ne.
Ne.
da
Ne.
da
Trenutno kloniranje
Ne.
da
da
da
da
Drajver za skladištenje koji se može koristiti unutar kontejnera
da
da
Ne.
Ne.
Ne.
Vraćanje sa starijih snimaka (ne najnovijih)
da
da
da
Ne.
da
Kvote za skladištenje
da(*)
da
da
da
Ne.
Inicijalizacija mreže i Storage Pool-a pomoću čarobnjaka ^
Sljedeća naredba koju ćemo pogledati predlaže postavljanje osnovnih komponenti LXD-a odgovaranjem na jednostavna pitanja pomoću čarobnjaka za inicijalizaciju.
Pokreni naredbu lxc init i unesite odgovore na pitanja nakon dvotočke kao što je prikazano u primjeru ispod ili ih promijenite u skladu sa svojim uvjetima:
lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]: ssdpool
Name of the storage backend to use (lvm, btrfs, dir) [default=btrfs]:
Create a new BTRFS pool? (yes/no) [default=yes]:
Would you like to use an existing block device? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=15GB]: 10GB
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 10.0.5.1/24
Would you like LXD to NAT IPv4 traffic on your bridge? [default=yes]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes] no
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
U prethodnom koraku smo kreirali skladišni bazen kojoj je dato ime ssdpool i čija se datoteka nalazi na mom sistemu na adresi /var/lib/lxd/disks/ssdpool.img. Ova adresa sistema datoteka odgovara fizičkom SSD disku na mom računaru.
Sljedeće akcije, kako bi se proširilo razumijevanje uloge koju igra skladišni bazen u spremištu, kreiraćemo drugi skladišni bazen koji će se fizički nalaziti na drugom tipu diska, HDD-u. Problem je što vam LXD ne dozvoljava da kreirate skladišni bazen van adrese /var/lib/lxd/disks/ a čak ni simbolične veze neće raditi, pogledajte odgovor programera. Možemo zaobići ovo ograničenje tokom inicijalizacije/formatiranja skladišni bazen specificiranjem vrijednosti kao blok uređaja umjesto putanje do datoteke povratne petlje specificirajući ovo u ključu source.
Dakle, prije stvaranja skladišni bazen trebate definirati datoteku povratne petlje ili postojeću particiju na vašem sistemu datoteka koju će koristiti. Da bismo to učinili, kreirat ćemo i koristiti datoteku koju ćemo ograničiti na 10 GB:
dd if=/dev/zero of=/mnt/work/lxd/hddpool.img bs=1MB count=10000
10000+0 records in
10000+0 records out
10000000000 bytes (10 GB, 9,3 GiB) copied, 38,4414 s, 260 MB/s
Povežimo loopback fajl sa besplatnim loopback uređajem:
Hvala ključu --show izvršenje naredbe vraća na ekran ime uređaja na koji je povezan naš loopback fajl. Ako je potrebno, možemo prikazati listu svih zauzetih uređaja ove vrste kako bismo bili sigurni da su naše radnje ispravne:
Sa liste možete pronaći da uređaj ima /dev/loop1 loopback fajl uključen /mnt/work/lxd/hddpool.img, i u uređaju /dev/loop0 loopback fajl uključen /var/lib/lxd/disks/ssdpool.img što odgovara zadanom skladišni bazen.
Sljedeća komanda kreira novu skladišni bazen u LXD-u na osnovu loopback fajla koji smo upravo pripremili. LXD će formatirati datoteku povratne petlje /mnt/work/lxd/hddpool.img u uređaju /dev/loop1 za BTRFS sistem datoteka:
Automatsko umetanje loopback datoteke u slot uređaja za povratnu petlju ^
Imamo jedan mali problem, kada restartujemo host sistem, fajl /mnt/work/lxd/hddpool.img će "izletjeti" iz uređaja /dev/loop1 i LXD servis će se srušiti prilikom učitavanja jer ga neće vidjeti na ovom uređaju. Da biste riješili ovaj problem potrebno je da kreirate sistemski servis koji će umetnuti ovu datoteku u uređaj /dev/loop1 kada se host sistem pokrene.
Kreirajmo jedinica tip datoteke usluga в /etc/systemd/system/ za sistem inicijalizacije SystemD:
cat << EOF | sudo tee -a /etc/systemd/system/lxd-hddpool.service
[Unit]
Description=Losetup LXD Storage Pool (hddpool)
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img
RemainAfterExit=true
[Install]
WantedBy=local-fs.target
EOF
Aktivirajte uslugu:
sudo systemctl enable lxd-hddpool
Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.
Nakon ponovnog pokretanja host sistema, provjeravamo status usluge:
systemctl status lxd-hddpool.service
● lxd-hddpool.service - Losetup LXD Storage Pool (hddpool)
Loaded: loaded (/etc/systemd/system/lxd-hddpool.service; enabled; vendor preset: disabled)
Active: active (exited) since Wed 2020-04-08 03:43:53 MSK; 1min 37s ago
Process: 711 ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img (code=exited, status=0/SUCCESS)
Main PID: 711 (code=exited, status=0/SUCCESS)
апр 08 03:43:52 manjaro systemd[1]: Starting Losetup LXD Storage Pool (hddpool)...
апр 08 03:43:53 manjaro systemd[1]: Finished Losetup LXD Storage Pool (hddpool).
Iz izlaza možemo provjeriti da je servisno stanje aktivan, uprkos činjenici da je izvršenje naše skripte iz jedne komande završeno, opcija nam je omogućila da to uradimo RemainAfterExit=true.
Budući da se svi procesi kontejnera zapravo izvode izolovano na host sistemu koristeći njegovo jezgro, da bi dodatno zaštitio pristup kontejnerskih procesa host sistemu, LXD nudi privilegiju procesa, gde:
Privilegirani kontejneri - ovo su kontejneri u kojima procesi sa UID-om i GID-om odgovaraju istom vlasniku kao na host sistemu. Na primjer, proces koji se izvodi u kontejneru s UID-om 0 ima sva prava pristupa kao proces na host sistemu sa UID-om 0. Drugim riječima, root korisnik u kontejneru ima sva prava ne samo u kontejneru, ali i na host sistemu ako može izaći izvan izolovanog imenskog prostora kontejnera.
Neprivilegirani kontejneri - ovo su kontejneri u kojima procesi pripadaju vlasniku UID-a i GID-a sa brojem od 0 do 65535, ali je za host sistem vlasnik maskiran dodavanjem SubUID i SubGID bitova, respektivno. Na primjer, korisnik sa UID=0 u kontejneru će se na host sistemu vidjeti kao SubUID + UID. Ovo štiti host sistem jer ako bilo koji proces u kontejneru može da pobegne iz svog izolovanog imenskog prostora, on može komunicirati sa host sistemom samo kao proces sa nepoznatim, veoma visokim UID/GID.
Po defaultu, novokreirani kontejneri imaju neprivilegirani status i stoga moramo definirati SubUID i SubGID.
Kreirajmo dvije konfiguracijske datoteke u kojima ćemo postaviti masku za SubUID i SubGID, respektivno:
Pošto smo prethodno inicijalizirali mrežu pomoću čarobnjaka za inicijalizaciju lxd init i kreirao mrežni uređaj lxdbr0, onda ćemo se u ovom odeljku jednostavno upoznati sa umrežavanjem u LXD-u i kako da kreirate virtuelni prekidač (most) koristeći naredbu klijenta.
Sljedeći dijagram pokazuje kako prekidač (most) povezuje host i kontejnere u mrežu:
Kontejneri mogu komunicirati putem mreže s drugim kontejnerima ili hostom na kojem se ti kontejneri poslužuju. Da biste to učinili, trebate povezati virtualne mrežne kartice kontejnera s virtualnim prekidačem. Prvo ćemo kreirati prekidač, a mrežna sučelja kontejnera će biti povezana u narednim poglavljima, nakon što se sam kontejner kreira.
Sljedeća naredba kreira prekidač sa podmrežom 10.0.5.0/24 i IPv4 adresu 10.0.5.1/24, a također uključuje ipv4.nat tako da kontejneri mogu pristupiti Internetu preko hosta koristeći NAT uslugu:
Svaki kontejner u LXD-u ima svoju konfiguraciju i može je proširiti globalno deklarisanim konfiguracijama tzv konfiguracijski profili. Primjena konfiguracijskih profila na kontejner ima kaskadni model, sljedeći primjer to pokazuje:
U ovom primjeru su kreirana tri profila u LXD sistemu: default, hddpool и hostfs. Sva tri profila se primjenjuju na kontejner koji ima lokalnu konfiguraciju (siva zona). Profil default ima uređaj root koji ima parametar pool je jednako ssdpool, ali zahvaljujući aplikacijskom modelu kaskadne konfiguracije, možemo primijeniti profil na kontejner hddpool koji ima parametar pool će nadjačati isti parametar iz profila default a kontejner će primiti konfiguraciju uređaja root sa parametrom pool jednak hddpool, i profil hostfs jednostavno dodaje novi uređaj u kontejner.
Da vidite listu dostupnih konfiguracijskih profila, koristite sljedeću naredbu:
lxc profile list
+---------+---------+
| NAME | USED BY |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+
Kompletnu listu dostupnih komandi za rad sa profilom možete dobiti dodavanjem ključa --help:
lxc profile --help
Description:
Manage profiles
Usage:
lxc profile [command]
Available Commands:
add Add profiles to instances
assign Assign sets of profiles to instances
copy Copy profiles
create Create profiles
delete Delete profiles
device Manage instance devices
edit Edit profile configurations as YAML
get Get values for profile configuration keys
list List profiles
remove Remove profiles from instances
rename Rename profiles
set Set profile configuration keys
show Show profile configurations
unset Unset profile configuration keys
Podrazumevani profil konfiguracije default nema konfiguraciju mrežne kartice za kontejner i svi novonastali kontejneri nemaju mrežu, za njih je potrebno posebnom naredbom kreirati lokalne (namjenske) mrežne uređaje, ali možemo kreirati globalni mrežni uređaj u konfiguraciji profil koji će se dijeliti između svih kontejnera koji koriste ovaj profil. Na ovaj način, odmah nakon naredbe za kreiranje novog kontejnera, oni će imati mrežu sa pristupom mreži. U isto vrijeme, nema ograničenja, uvijek možemo kreirati lokalni mrežni uređaj kasnije ako je potrebno.
Sljedeća naredba će dodati uređaj u konfiguracijski profil eth0 tip nic povezan na mrežu lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0
Važno je napomenuti da pošto smo zapravo dodali uređaj u konfiguracioni profil, ako smo naveli statičku IP adresu u uređaju, onda će svi kontejneri koji će koristiti ovaj profil dijeliti istu IP adresu. Ako postoji potreba za kreiranjem kontejnera sa statičkom IP adresom dodijeljenom kontejneru, tada biste trebali kreirati konfiguraciju mrežnog uređaja na razini kontejnera (lokalna konfiguracija) s parametrom IP adrese, a ne na razini profila.
Pogledajmo profil:
lxc profile show default
config: {}
description: Default LXD profile
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: /
pool: ssdpool
type: disk
name: default
used_by: []
U ovom profilu vidimo da će za sve novokreirane kontejnere biti kreirana dva uređaja:
eth0 — Tip uređaja nic spojen na prekidač (mrežni most) lxdbr0
root — Tip uređaja disk koji koristi skladišni bazen ssdpool
Za korištenje prethodno kreiranih skladišni bazen kontejnere, kreirajte konfiguracijski profil ssdroot u koji ćemo dodati uređaj poput disk sa tačkom montiranja / (root) pomoću prethodno kreiranog skladišni bazen - ssdpool:
Kontejneri se kreiraju od slika koje su posebno sastavljene distribucije koje nemaju Linux kernel. Stoga, prije pokretanja kontejnera, on mora biti raspoređen sa ove slike. Izvor slika je lokalno spremište u koje se slike preuzimaju iz vanjskih spremišta.
Da biste počeli koristiti kontejner, morate dodati sliku iz globalnog spremišta u lokalno local:. Sada je lokalno spremište prazno, komanda će se pobrinuti za to lxc image list. Ako je metoda list nemojte specificirati spremište, tada će se lokalno spremište koristiti po defaultu - local:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+
Slikama u spremištu se upravlja pomoću sljedećih metoda:
tim
Opis
lxc slika pseudonim
Upravljajte pseudonima slika
lxc slika kopiraj
Kopirajte slike između servera
lxc slika izbrisati
Izbrišite slike
lxc slika edit
Uredite svojstva slike
lxc slika izvoz
Izvezite i preuzmite slike
lxc slika uvoz
Uvezite slike u skladište slika
lxc slika info
Prikaži korisne informacije o slikama
lxc slika lista
Lista slika
lxc slika refresh
Osvježite slike
lxc slika pokazati
Prikaži svojstva slike
Kopirajte sliku u lokalno spremište iz globalnog images::
Osim interaktivnog načina rada, LXD također podržava neinteraktivni način instalacije konfiguracije, to je kada je konfiguracija specificirana u obliku YAML datoteke, posebnog formata koji vam omogućava da instalirate cijelu konfiguraciju odjednom, zaobilazeći izvršenje od mnogih interaktivnih naredbi o kojima se raspravljalo gore u ovom članku, uključujući konfiguraciju mreže, kreiranje konfiguracijskih profila itd. Ovdje nećemo pokrivati ovo područje, možete ga sami provjeriti. u dokumentaciji.
Sljedeća interaktivna komanda lxc config koji ćemo pogledati omogućava vam da postavite konfiguraciju. Na primjer, kako bismo osigurali da preuzete slike u lokalno spremište ne budu automatski ažurirane iz globalnih spremišta, možemo omogućiti ovo ponašanje sljedećom naredbom:
Za kreiranje kontejnera koristite naredbu lxc init na koje se prosleđuju vrednosti репозиторий:образ a zatim željeni ID za kontejner. Spremište se može specificirati kao lokalno local: kao i bilo koja globalna. Ako spremište nije navedeno, tada se po defaultu lokalno spremište koristi za traženje slike. Ako je slika navedena iz globalnog spremišta, tada će slika prvo biti preuzeta u lokalno spremište, a zatim će se koristiti za kreiranje kontejnera.
Pokrenimo sljedeću naredbu da kreiramo naš prvi kontejner:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddroot
Pogledajmo redom komandne tipke koje ovdje koristimo:
alpine3 — Naveden je pseudonim (alias) za sliku koja je prethodno otpremljena u lokalno spremište. Ako pseudonim nije kreiran za ovu sliku, uvijek se možete pozvati na sliku po njoj otisak prsta koji je prikazan u tabeli.
alp — Postavlja identifikator za kontejner
--storage — Ovaj taster označava u kom skladišni bazen kontejner će biti kreiran
--profile — Ovi ključevi kaskadno primjenjuju konfiguraciju iz prethodno kreiranih konfiguracijskih profila na kontejner
Pokrećemo kontejner koji počinje pokretati init sistem distribucije:
lxc start alp
Također možete koristiti naredbu lxc launch što vam omogućava da kombinujete timove lxc init и lxc start u jednoj operaciji.
Provjera stanja kontejnera:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME | STATE | IPV4 | IPV6 | TYPE | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | hddpool |
+------+---------+------------------+------+-----------+--------------+
U sekciji profiles možemo osigurati da ovaj kontejner koristi dva konfiguracijska profila − default и hddroot. U sekciji devices možemo otkriti samo jedan uređaj jer je mrežni uređaj kreiran na nivou profila default. Da biste vidjeli sve uređaje koje koristi kontejner potrebno je dodati ključ --expanded:
Ako pokušamo postaviti IP adresu za mrežni uređaj eth0 tim lxc config device set alp namijenjen za konfiguraciju kontejnera, tada ćemo dobiti grešku koja će javiti da uređaj ne postoji jer uređaj eth0 koji koristi kontejner pripada profilu default:
lxc config device set alp eth0 ipv4.address 10.0.5.5
Error: The device doesn't exist
Naravno, možemo postaviti statičku IP adresu za eth0 uređaja u profilu, ali će biti isti za sve kontejnere koji će koristiti ovaj profil. Stoga, dodajmo uređaj posvećen kontejneru:
lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Zatim morate ponovo pokrenuti kontejner:
lxc restart alp
Ako sada pogledamo konfiguraciju kontejnera, ne moramo koristiti opciju --expanded da vidite mrežni uređaj eth0, pošto smo ga kreirali na nivou kontejnera i kaskadno je prešao preko istog uređaja iz profila default:
Da biste izvršili komande u kontejneru direktno, zaobilazeći mrežne veze, koristite naredbu lxc exec koji izvršava komande u kontejneru bez pokretanja sistemske ljuske. Ako trebate izvršiti naredbu u ljusci koristeći shell obrasce kao što su varijable, preusmjeravanja datoteka (pipe), itd., tada morate eksplicitno pokrenuti shell i proslijediti naredbu kao ključ, na primjer:
lxc exec alp -- /bin/sh -c "echo $HOME"
Komanda je koristila poseban escape karakter za poseban karakter $ tako da varijabla $HOME nije interpretiran na glavnoj mašini, već je interpretiran samo unutar kontejnera.
Također je moguće pokrenuti interaktivni shell mod, a zatim prekinuti sesiju izvršavanjem prečice CTRL+D:
U LXD-u možete upravljati resursima kontejnera koristeći poseban skup konfiguracija. Potpunu listu konfiguracijskih parametara kontejnera možete pronaći u dokumentaciji.
Postoji nekoliko načina da ograničite CPU resurse. vrste ograničenja:
limit.cpu - veže kontejner za jednu ili više CPU jezgri
limits.cpu.allowance - upravlja ili kvotama CFS planera kada prođe vremensko ograničenje, ili univerzalnim mehanizmom dijeljenja CPU resursa kada je postotak prošao
limits.cpu.priority - prioritet planera kada je više instanci koje dijele skup procesora dodijeljen isti postotak procesora
Pored ograničenja kao što su limits.read, limits.write također možemo ograničiti količinu prostora na disku koju koristi kontejner (radi samo sa ZFS ili BTRFS):
lxc config device set alp root size=2GB
Nakon instalacije, u parametru devices.root.size Možemo provjeriti postavljeno ograničenje:
lxc config show alp
...
devices:
root:
path: /
pool: hddpool
size: 2GB
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""
Za pregled iskorištenih diskovnih kvota možemo dobiti iz naredbe lxc info:
lxc info alp
...
Resources:
Processes: 5
Disk usage:
root: 1.05GB
CPU usage:
CPU usage (in seconds): 1
Memory usage:
Memory (current): 5.46MB
Network usage:
eth0:
Bytes received: 802B
Bytes sent: 1.59kB
Packets received: 4
Packets sent: 14
lo:
Bytes received: 0B
Bytes sent: 0B
Packets received: 0
Packets sent: 0
Uprkos činjenici da smo postavili ograničenje za root uređaj kontejnera na 2GB, sistemski uslužni programi kao npr. df neće vidjeti ovo ograničenje. Da bismo to učinili, provest ćemo mali test i saznati kako funkcionira.
Kreirajmo 2 nova identična kontejnera u istom skladišni bazen (hddpool):
lxc exec alp1 -- ls -lh
total 1000M
-rw-r--r-- 1 root root 1000.0M Mar 27 10:16 file.img
Ako pogledamo u drugi kontejner, provjerimo postojanje datoteke na istoj lokaciji, tada ove datoteke neće biti, što je i očekivano, budući da se kontejneri kreiraju sami Volumen skladišta u istom skladišni bazen:
lxc exec alp2 -- ls -lh
total 0
Ali uporedimo vrijednosti koje proizvodi df na jednom i drugom kontejneru:
lxc exec alp1 -- df -hT
Filesystem Type Size Used Available Use% Mounted on
/dev/loop1 btrfs 9.3G 1016.4M 7.8G 11% /
...
lxc exec alp2 -- df -hT
Filesystem Type Size Used Available Use% Mounted on
/dev/loop1 btrfs 9.3G 1016.4M 7.8G 11% /
...
Uređaj /dev/loop1 montiran kao što je root particija skladišni bazen koje ovi kontejneri koriste, tako da dijele njegovu zapreminu između dva.
LXD ima mogućnost kreiranja snimaka i vraćanja stanja kontejnera iz njih.
Da kreirate snimak, pokrenite sljedeću naredbu:
lxc snapshot alp snapshot1
Tim lxc snapshot nije dostupan ključ list, dakle, za pregled liste snimaka morate koristiti naredbu koja prikazuje opće informacije o kontejneru:
lxc info alp
...
...
Snapshots:
snapshot1 (taken at 2020/04/08 18:18 UTC) (stateless)
Kontejner možete vratiti iz snimka pomoću naredbe lxc restore navodeći kontejner za koji će se izvršiti restauracija i alias snimke:
lxc restore alp snapshot1
Sljedeća naredba se koristi za brisanje snimka. Imajte na umu da sintaksa naredbe nije slična svim ostalim; ovdje morate navesti kosu crtu naprijed nakon naziva spremnika. Ako je kosa crta izostavljena, tada se naredba za brisanje snimka tumači kao naredba za brisanje kontejnera!
lxc delete alp/snapshot1
U gornjem primjeru, pogledali smo takozvane snimke bez stanja. LXD ima još jednu vrstu snimaka - stanja, koja čuva trenutno stanje svih procesa u kontejneru. Postoji niz zanimljivih i korisnih funkcija povezanih sa snimcima stanja.