ProHoster > Blog > uprava > Osnovne karakteristike LXD - Linux kontejnerskih sustava
Osnovne karakteristike LXD - Linux kontejnerskih sustava
LXD je sljedeća generacija upravitelja spremnika sustava, tako kaže izvor. Nudi korisničko sučelje slično virtualnim strojevima, ali umjesto toga koristi Linux spremnike.
LXD jezgra je povlašteni demon (usluga koja radi s root pravima) koji pruža REST API putem lokalnog unix socketa, kao i putem mreže ako je instalirana odgovarajuća konfiguracija. Klijenti, kao što je alat naredbenog retka koji se isporučuje uz LXD, postavljaju zahtjeve putem ovog REST API-ja. To znači da bez obzira pristupate li lokalnom ili udaljenom računalu, sve radi isto.
U ovom se članku nećemo detaljno baviti konceptima LXD-a, nećemo razmatrati sve dostupne mogućnosti navedene u dokumentaciji, uključujući nedavnu implementaciju u najnovijim verzijama LXD-a podrške za QEMU virtualne strojeve paralelno sa spremnicima. Umjesto toga, naučit ćemo samo osnove upravljanja spremnikom - postavljanje spremišta, umrežavanje, pokretanje spremnika, primjena ograničenja resursa i kako koristiti snimke tako da možete steći osnovno razumijevanje LXD-a i koristiti spremnike na Linuxu.
To znači da će dva paketa biti instalirana odjednom, jedan kao sistemski paket, a drugi kao snap paket. Instaliranje dvaju paketa na sustav može stvoriti određeni problem pri čemu sistemski paket može postati siroče ako snap paket ukloni upravitelj snap paketa.
Pronađi paket lxd u snap repozitoriju 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 naredbe list možete se uvjeriti da paket lxd još nije instaliran:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
Unatoč činjenici da je LXD snap paket, mora se instalirati kroz sistemski paket lxd, koji će stvoriti odgovarajuću grupu u sustavu, potrebne uslužne programe u /usr/bin itd.
sudo apt update
sudo apt install lxd
Provjerite je li paket instaliran kao brzi 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 sustav, trebate pokrenuti sljedeće naredbe, prva će ažurirati popis paketa na sustavu dostupnih u repozitoriju, druga će izravno instalirati paket:
sudo pacman -Syyu && sudo pacman -S lxd
Nakon instaliranja paketa, kako bi običan korisnik mogao upravljati LXD-om, potrebno ga je dodati u grupu sustava lxd:
sudo usermod -a -G lxd user1
Uvjerimo se da korisnik user1 dodan u grupu lxd:
id -Gn user1
user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd
Ako grupa lxd nije vidljiv na popisu, 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 sustava:
Prije početka inicijalizacije, moramo razumjeti kako je pohrana u LXD-u logično raspoređena.
Pohrana (skladištenje) sastoji se od od jednog ili više Bazen za pohranu koji koristi jedan od podržanih datotečnih sustava kao što su ZFS, BTRFS, LVM ili obične direktorije. Svaki Bazen za pohranu podijeljen je na sveske (Volumen skladišta) koji sadrže slike, spremnike ili podatke za druge svrhe.
lik - ovo su posebno sastavljene distribucije bez Linux kernela i dostupne iz vanjskih izvora
spremnici - ovo su raspoređene distribucije iz slika, spremne za upotrebu
Snimke - ovo su snimke stanja spremnika na koje se možete vratiti
Za upravljanje pohranom u LXD-u upotrijebite naredbu lxc storage certifikat za koji možete dobiti navođenjem ključa - lxc storage --help
Sljedeća naredba prikazuje popis svih Bazen za pohranu u LXD pohrani:
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 popisa svih Volumen skladišta u odabranom Bazen za pohranu 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đer, ako za Bazen za pohranu Prilikom izrade odabran je datotečni sustav BTRFS, a zatim dohvatite popis Volumen skladišta ili podvolovi u interpretaciji BTRFS-a, možete koristiti alat ovog datotečnog sustava:
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 stvaranja i korištenja spremnika, morate izvršiti opću LXD inicijalizaciju koja stvara i konfigurira mrežu i pohranu. To se može učiniti ručno pomoću standardnih klijentskih naredbi koje su dostupne na popisu pozivom naredbe lxc --help ili pomoću čarobnjaka za inicijalizaciju lxd init odgovorivši na nekoliko pitanja.
Odabir datotečnog sustava za skladište za pohranu ^
Tijekom inicijalizacije, LXD postavlja nekoliko pitanja, uključujući određivanje tipa datotečnog sustava za zadani Bazen za pohranu. Prema zadanim postavkama za njega je odabran datotečni sustav BTRFS. Bit će nemoguće promijeniti na drugi FS nakon izrade. Predlaže se odabir FS-a tablica usporedbe karakteristika:
svojstvo
Imenik
Btrfs
LVM
ZFS
CEPH
Optimizirana pohrana slika
Ne
Da
Da
Da
Da
Optimizirano stvaranje instance
Ne
Da
Da
Da
Da
Optimizirano stvaranje snimke
Ne
Da
Da
Da
Da
Optimizirani prijenos slike
Ne
Da
Ne
Da
Da
Optimiziran prijenos instanci
Ne
Da
Ne
Da
Da
kopirati na pisanje
Ne
Da
Da
Da
Da
Na temelju blokova
Ne
Ne
Da
Ne
Da
Instant kloniranje
Ne
Da
Da
Da
Da
Upravljački program za pohranu koji se može koristiti unutar spremnika
Da
Da
Ne
Ne
Ne
Vraćanje sa starijih snimaka (ne najnovijih)
Da
Da
Da
Ne
Da
Kvote za pohranu
Da(*)
Da
Da
Da
Ne
Inicijalizacija mreže i skladišnog prostora pomoću čarobnjaka ^
Sljedeća naredba koju ćemo pogledati predlaže postavljanje glavnih komponenti LXD-a odgovarajućim na jednostavna pitanja pomoću čarobnjaka za inicijalizaciju.
Naredba za pokretanje lxc init i unesite odgovore na pitanja iza dvotočke kao što je prikazano u donjem primjeru ili ih promijenite prema 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 stvorili Bazen za pohranu koji je dobio ime ssdpool i čija se datoteka nalazi na mom sustavu na adresi /var/lib/lxd/disks/ssdpool.img. Ova adresa datotečnog sustava odgovara fizičkom SSD disku na mom računalu.
Sljedeće radnje, proširiti razumijevanje uloge igra Bazen za pohranu u repozitoriju, mi ćemo stvoriti drugi Bazen za pohranu koji će se fizički nalaziti na drugoj vrsti diska, HDD. Problem je što vam LXD ne dopušta stvaranje Bazen za pohranu izvan adrese /var/lib/lxd/disks/ čak ni simboličke veze neće raditi, pogledajte odgovor programera. Ovo ograničenje možemo zaobići tijekom inicijalizacije/formatiranja Bazen za pohranu navođenjem vrijednosti kao blok uređaja umjesto staze do datoteke povratne petlje navođenjem ovoga u ključu source.
Dakle, prije stvaranja Bazen za pohranu trebate definirati povratnu datoteku ili postojeću particiju na vašem datotečnom sustavu koju će koristiti. Da bismo to učinili, izradit ćemo i koristiti datoteku čiju ćemo veličinu 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 datoteku povratne petlje s besplatnim uređajem povratne petlje:
Zahvaljujući ključu --show izvršavanje naredbe vraća na ekran naziv uređaja na koji je spojena naša povratna datoteka. Ako je potrebno, možemo prikazati popis svih zauzetih uređaja ove vrste kako bismo bili sigurni da su naše radnje ispravne:
Na popisu možete saznati da uređaj ima /dev/loop1 uključena povratna datoteka /mnt/work/lxd/hddpool.img, i u uređaju /dev/loop0 uključena povratna datoteka /var/lib/lxd/disks/ssdpool.img što odgovara zadanom Bazen za pohranu.
Sljedeća naredba stvara novu Bazen za pohranu u LXD-u na temelju povratne datoteke koju smo upravo pripremili. LXD će formatirati povratnu datoteku /mnt/work/lxd/hddpool.img u uređaju /dev/loop1 za BTRFS datotečni sustav:
Automatsko umetanje povratne datoteke u utor za povratni uređaj ^
Imamo jedan mali problem, prilikom ponovnog pokretanja glavnog sustava, datoteka /mnt/work/lxd/hddpool.img će "izletjeti" iz uređaja /dev/loop1 a LXD servis će se srušiti pri učitavanju jer ga neće vidjeti u ovom uređaju. Da biste riješili ovaj problem morate stvoriti uslugu sustava koja će umetnuti ovu datoteku u uređaj /dev/loop1 kada se podiže glavni sustav.
Kreirajmo jedinica Vrsta datoteke usluga в /etc/systemd/system/ za sustav 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 glavnog sustava, 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 potvrditi da je stanje usluge aktivan, unatoč činjenici da je izvršenje naše skripte iz jedne naredbe završeno, opcija nam je omogućila da to učinimo RemainAfterExit=true.
Budući da se svi procesi spremnika zapravo izvode izolirano na glavnom sustavu koristeći njegovu jezgru, za dodatnu zaštitu pristupa spremničkih procesa glavnom sustavu, LXD nudi privilegiju procesa, gdje:
Privilegirani spremnici - to su spremnici u kojima procesi s UID-om i GID-om odgovaraju istom vlasniku kao i na host sustavu. Na primjer, proces koji se izvodi u spremniku s UID-om 0 ima sva prava pristupa kao i proces na glavnom sustavu s UID-om 0. Drugim riječima, root korisnik u spremniku ima sva prava ne samo u spremniku, ali također i na glavnom sustavu ako može izaći izvan izoliranog imenskog prostora spremnika.
Neprivilegirani spremnici - to su spremnici u kojima procesi pripadaju vlasniku UID-a i GID-a s brojem od 0 do 65535, ali za host sustav vlasnik je maskiran pomoću dodanih SubUID odnosno SubGID bitova. Na primjer, korisnik s UID=0 u spremniku bit će vidljiv na glavnom sustavu kao SubUID + UID. Ovo štiti sustav domaćina jer ako bilo koji proces u spremniku može pobjeći svom izoliranom prostoru imena, on može komunicirati sa sustavom domaćina samo kao proces s nepoznatim, vrlo visokim UID/GID-om.
Prema zadanim postavkama, novostvoreni spremnici imaju neprivilegirani status i stoga moramo definirati SubUID i SubGID.
Kreirajmo dvije konfiguracijske datoteke u kojima ćemo postaviti masku za SubUID odnosno SubGID:
Budući da smo prethodno inicijalizirali mrežu pomoću čarobnjaka za inicijalizaciju lxd init i stvorio mrežni uređaj lxdbr0, tada ćemo se u ovom dijelu jednostavno upoznati s umrežavanjem u LXD-u i kako stvoriti virtualni preklopnik (most) pomoću naredbe klijenta.
Sljedeći dijagram pokazuje kako preklopnik (most) povezuje host i spremnike u mrežu:
Spremnici mogu komunicirati putem mreže s drugim spremnicima ili hostom na kojem se ti spremnici poslužuju. Da biste to učinili, morate povezati virtualne mrežne kartice spremnika s virtualnim prekidačem. Prvo ćemo izraditi preklopnik, a mrežna sučelja spremnika povezat ćemo u narednim poglavljima, nakon što se sam spremnik izradi.
Sljedeća naredba stvara prekidač s podmrežom 10.0.5.0/24 i IPv4 adresu 10.0.5.1/24, a također uključuje ipv4.nat tako da spremnici mogu pristupiti internetu putem hosta koristeći NAT uslugu:
Svaki spremnik u LXD-u ima vlastitu konfiguraciju i može je proširiti globalno deklariranim konfiguracijama tzv konfiguracijski profili. Primjena konfiguracijskih profila na spremnik ima kaskadni model, sljedeći primjer to pokazuje:
U ovom primjeru u LXD sustavu kreirana su tri profila: default, hddpool и hostfs. Sva tri profila primjenjuju se na spremnik koji ima lokalnu konfiguraciju (sivo područje). Profil default ima uređaj root koji ima parametar pool jednako je ssdpool, ali zahvaljujući modelu aplikacije kaskadne konfiguracije, možemo primijeniti profil na spremnik hddpool koji ima parametar pool će nadjačati isti parametar iz profila default a spremnik će primiti konfiguraciju uređaja root s parametrom pool jednak hddpool, i profil hostfs jednostavno dodaje novi uređaj u spremnik.
Da biste vidjeli popis dostupnih konfiguracijskih profila, koristite sljedeću naredbu:
lxc profile list
+---------+---------+
| NAME | USED BY |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+
Potpuni popis dostupnih naredbi za rad s profilom može se 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
Zadani konfiguracijski profil default nema konfiguraciju mrežne kartice za kontejner i svi novokreirani kontejneri nemaju mrežu, za njih je potrebno kreirati lokalne (dedicirane) mrežne uređaje posebnom naredbom, ali možemo kreirati globalni mrežni uređaj u konfiguraciji profil koji će se dijeliti između svih spremnika koji koriste ovaj profil. Tako će odmah nakon naredbe za izradu novog spremnika imati mrežu s mrežnim pristupom. Istodobno, nema ograničenja, uvijek možemo kasnije stvoriti uređaj lokalne mreže ako je potrebno.
Sljedeća naredba će dodati uređaj konfiguracijskom profilu eth0 vrsta nic spojen na mrežu lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0
Važno je napomenuti da budući da smo zapravo dodali uređaj konfiguracijskom profilu, ako smo naveli statičku IP adresu u uređaju, tada će svi spremnici koji će koristiti ovaj profil dijeliti istu IP adresu. Ako postoji potreba za stvaranjem spremnika sa statičkom IP adresom dodijeljenom za spremnik, tada biste trebali izraditi konfiguraciju mrežnog uređaja na razini spremnika (lokalna konfiguracija) s parametrom IP adrese, a ne na razini profila.
Provjerimo 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 možemo vidjeti da će za sve novostvorene spremnike 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 stvorenog Bazen za pohranu spremnike, izradite konfiguracijski profil ssdroot u koji ćemo dodati uređaj poput disk s točkom montiranja / (root) korištenjem prethodno stvorenog Bazen za pohranu - ssdpool:
Spremnici se izrađuju iz slika koje su posebno sastavljene distribucije koje nemaju Linux kernel. Stoga, prije pokretanja spremnika, on se mora implementirati iz ove slike. Izvor slika je lokalni repozitorij u koji se slike preuzimaju iz vanjskih repozitorija.
Da biste počeli koristiti spremnik, trebate dodati sliku iz globalnog repozitorija u lokalni local:. Sada je lokalno spremište prazno, naredba će se pobrinuti za to lxc image list. Ako se metoda list nemojte navesti spremište, tada će se prema zadanim postavkama koristiti lokalno spremište - local:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+
Slikama u repozitoriju upravlja se pomoću sljedećih metoda:
Momčad
Opis
lxc slika pseudonim
Upravljanje aliasima slika
lxc slika kopija
Kopirajte slike između poslužitelja
lxc slika izbrisati
Izbriši slike
lxc slika uredi
Uredi svojstva slike
lxc slika izvoz
Izvoz i preuzimanje slika
lxc slika uvoz
Uvezite slike u pohranu slika
lxc slika info
Pokažite korisne informacije o slikama
lxc slika popis
Popis slika
lxc slika osvježiti
Osvježi slike
lxc slika predstava
Prikaži svojstva slike
Kopirajte sliku u lokalno spremište iz globalnog images::
Uz interaktivni način, LXD također podržava neinteraktivni način instalacije konfiguracije, to je kada je konfiguracija navedena u obliku YAML datoteke, posebnog formata koji vam omogućuje da instalirate cijelu konfiguraciju odjednom, zaobilazeći izvršenje mnogih interaktivnih naredbi o kojima je bilo riječi u ovom članku, uključujući mrežnu konfiguraciju, stvaranje konfiguracijskih profila itd. Ovdje nećemo pokrivati ovo područje, možete ga sami provjeriti. u dokumentaciji.
Sljedeća interaktivna naredba lxc config koji ćemo pogledati omogućuje vam postavljanje konfiguracije. Na primjer, kako bismo osigurali da se slike preuzete u lokalno spremište ne ažuriraju automatski iz globalnih spremišta, možemo omogućiti ovo ponašanje sljedećom naredbom:
Za izradu spremnika koristite naredbu lxc init na koje se prosljeđuju vrijednosti репозиторий:образ a zatim željeni ID za spremnik. Repozitorij se može navesti kao lokalni local: tako i svaka globalna. Ako spremište nije navedeno, prema zadanim postavkama za traženje slike koristi se lokalno spremište. Ako je slika određena iz globalnog repozitorija, tada će slika prvo biti preuzeta u lokalno repozitorij, a zatim će se koristiti za stvaranje spremnika.
Pokrenimo sljedeću naredbu za stvaranje našeg prvog spremnika:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddroot
Pogledajmo naredbene tipke koje ovdje koristimo redom:
alpine3 — Pseudonim (alias) je određen za sliku koja je prethodno učitana u lokalno spremište. Ako pseudonim nije stvoren za ovu sliku, uvijek se možete pozvati na sliku pomoću nje Otisak prsta koji je prikazan u tabeli.
alp — Postavlja identifikator za spremnik
--storage — Ovaj ključ pokazuje u kojem Bazen za pohranu stvorit će se spremnik
--profile — Ovi ključevi kaskadno primjenjuju konfiguraciju iz prethodno stvorenih konfiguracijskih profila na spremnik
Pokrećemo spremnik, koji počinje pokretati init sustav distribucije:
lxc start alp
Također možete koristiti naredbu lxc launch što vam omogućuje kombiniranje timova lxc init и lxc start u jednoj operaciji.
Provjera stanja spremnika:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME | STATE | IPV4 | IPV6 | TYPE | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | hddpool |
+------+---------+------------------+------+-----------+--------------+
U odjeljku profiles možemo osigurati da ovaj spremnik koristi dva konfiguracijska profila − default и hddroot. U odjeljku devices možemo otkriti samo jedan uređaj jer je mrežni uređaj kreiran na razini profila default. Kako biste vidjeli sve uređaje koje koristi spremnik morate dodati ključ --expanded:
Ako pokušamo postaviti IP adresu za mrežni uređaj eth0 Tim lxc config device set alp namijenjen konfiguraciji spremnika, tada ćemo dobiti pogreš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 bit će isti za sve spremnike koji će koristiti ovaj profil. Stoga, dodajmo uređaj posvećen spremniku:
lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Zatim morate ponovno pokrenuti spremnik:
lxc restart alp
Ako sada pogledamo konfiguraciju spremnika, ne moramo koristiti opciju --expanded da vidite mrežni uređaj eth0, budući da smo ga kreirali na razini spremnika i kaskadno se povezivao preko istog uređaja iz profila default:
Za izravno izvršavanje naredbi u spremniku, zaobilazeći mrežne veze, koristite naredbu lxc exec koji izvršava naredbe u spremniku bez pokretanja ljuske sustava. Ako trebate izvršiti naredbu u ljusci koristeći uzorke ljuske kao što su varijable, preusmjeravanja datoteka (cijevovod), itd., tada morate eksplicitno pokrenuti ljusku i proslijediti naredbu kao ključ, na primjer:
lxc exec alp -- /bin/sh -c "echo $HOME"
Naredba je koristila poseban znak za izlaz za poseban karakter $ tako da varijabla $HOME nije interpretiran na glavnom stroju, već je interpretiran samo unutar spremnika.
Također je moguće pokrenuti interaktivni način rada ljuske, a zatim završiti sesiju izvršavanjem prečaca CTRL+D:
U LXD-u možete upravljati resursima spremnika pomoću posebnog skupa konfiguracije. Potpuni popis konfiguracijskih parametara spremnika može se pronaći u dokumentaciji.
Postoji nekoliko načina za ograničavanje CPU resursa. vrste ograničenja:
limit.cpu - veže spremnik na jednu ili više CPU jezgri
limits.cpu.allowance - upravlja ili kvotama CFS planera kada je prošlo vremensko ograničenje ili univerzalnim mehanizmom dijeljenja CPU resursa kada je postotak prošao
limits.cpu.priority - prioritet planera kada je višestrukim instancama koje dijele skup procesora dodijeljen isti postotak procesora
Osim ograničenja kao što su limits.read, limits.write također možemo ograničiti količinu diskovnog prostora koju zauzima spremnik (radi samo sa ZFS ili BTRFS):
lxc config device set alp root size=2GB
Nakon instalacije, u parametru devices.root.size Postavljeni limit možemo provjeriti:
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
Unatoč činjenici da smo postavili ograničenje za root uređaj spremnika na 2 GB, uslužni programi sustava poput 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 spremnika u istom Bazen za pohranu (hddpool):
lxc exec alp1 -- ls -lh
total 1000M
-rw-r--r-- 1 root root 1000.0M Mar 27 10:16 file.img
Ako pogledamo drugi spremnik, provjerimo postoji li datoteka na istoj lokaciji, tada te datoteke neće biti tamo, što je i očekivano, budući da se spremnici stvaraju u vlastitom Volumen skladišta u istom Bazen za pohranu:
lxc exec alp2 -- ls -lh
total 0
Ali usporedimo vrijednosti koje proizvodi df na jednom i drugom spremniku:
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 root particija Bazen za pohranu koje ti spremnici koriste, pa dijele njegov volumen između dva.
LXD ima mogućnost stvaranja snimaka i vraćanja stanja spremnika iz njih.
Da biste stvorili snimku, pokrenite sljedeću naredbu:
lxc snapshot alp snapshot1
Tim lxc snapshot ključ nije dostupan list, stoga za pregled popisa snimki morate upotrijebiti naredbu koja prikazuje opće informacije o spremniku:
lxc info alp
...
...
Snapshots:
snapshot1 (taken at 2020/04/08 18:18 UTC) (stateless)
Možete vratiti spremnik iz snimke pomoću naredbe lxc restore navodeći spremnik za koji će se izvršiti vraćanje i alias snimke:
lxc restore alp snapshot1
Sljedeća naredba koristi se za brisanje snimke. Imajte na umu da sintaksa naredbe nije slična svim ostalim; ovdje morate navesti kosu crtu nakon naziva spremnika. Ako je kosa crta izostavljena, tada se naredba za brisanje snimke tumači kao naredba za brisanje spremnika!
lxc delete alp/snapshot1
U gornjem primjeru gledali smo takozvane snimke bez stanja. LXD ima još jednu vrstu snimki stanja - stateful, koja sprema trenutno stanje svih procesa u spremnik. Postoji niz zanimljivih i korisnih značajki povezanih sa snimkama stanja.