ProHoster > Blog > Uprava > Osnovne značilnosti LXD - Linux kontejnerskih sistemov
Osnovne značilnosti LXD - Linux kontejnerskih sistemov
LXD je naslednja generacija upravitelja sistemskih vsebnikov, tako piše Vir. Ponuja uporabniški vmesnik, podoben virtualnim strojem, vendar namesto tega uporablja vsebnike Linux.
LXD jedro je privilegiran demon (storitev, ki se izvaja s korenskimi pravicami), ki zagotavlja API REST prek lokalne vtičnice unix in tudi prek omrežja, če je nameščena ustrezna konfiguracija. Odjemalci, kot je orodje ukazne vrstice, ki je na voljo z LXD, postavljajo zahteve prek tega API-ja REST. To pomeni, da ne glede na to, ali dostopate do lokalnega ali oddaljenega gostitelja, vse deluje enako.
V tem članku se ne bomo podrobno ukvarjali s koncepti LXD, ne bomo upoštevali vseh razpoložljivih zmogljivosti, opisanih v dokumentaciji, vključno z nedavno implementacijo podpore za virtualne stroje QEMU vzporedno s kontejnerji v najnovejših različicah LXD. Namesto tega se bomo naučili le osnov upravljanja vsebnikov – nastavitev pomnilniških bazenov, mreženje, izvajanje vsebnika, uporaba omejitev virov in kako uporabljati posnetke, da boste lahko pridobili osnovno razumevanje LXD in uporabljali vsebnike v Linuxu.
To pomeni, da bosta hkrati nameščena dva paketa, eden kot sistemski paket in drugi kot snap paket. Namestitev dveh paketov v sistem lahko povzroči težave, ko sistemski paket lahko osirote, če upravitelj snap paketov odstrani paket snap.
Najdi paket lxd v repozitoriju snap lahko uporabite naslednji ukaz:
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
Z izvajanjem ukaza list se lahko prepričate, da paket lxd še ni nameščen:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
Kljub temu, da je LXD snap paket, ga je treba namestiti prek sistemskega paketa lxd, ki bo ustvaril ustrezno skupino v sistemu, potrebne pripomočke v /usr/bin itd
sudo apt update
sudo apt install lxd
Prepričajmo se, da je paket nameščen kot 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✓ -
Če želite namestiti paket LXD v sistem, morate zagnati naslednje ukaze, prvi bo posodobil seznam paketov v sistemu, ki so na voljo v repozitoriju, drugi pa bo neposredno namestil paket:
sudo pacman -Syyu && sudo pacman -S lxd
Po namestitvi paketa, da bi LXD lahko upravljal navaden uporabnik, ga je treba dodati v sistemsko skupino lxd:
sudo usermod -a -G lxd user1
Prepričajmo se, da uporabnik user1 dodan v skupino lxd:
id -Gn user1
user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd
Če skupina lxd ni viden na seznamu, potem morate znova aktivirati uporabniško sejo. Če želite to narediti, se morate odjaviti in prijaviti pod istim uporabnikom.
Aktivirajte v systemd nalaganje storitve LXD ob zagonu sistema:
Preden se začne inicializacija, moramo razumeti, kako je shramba v LXD logično urejena.
Shranjevanje (skladiščenje) sestavljajo od enega ali več Bazen za shranjevanje ki uporablja enega od podprtih datotečnih sistemov, kot so ZFS, BTRFS, LVM ali navadne imenike. vsak Bazen za shranjevanje je razdeljen na zvezke (Prostor za shranjevanje), ki vsebujejo slike, vsebnike ali podatke za druge namene.
Slike - to so posebej sestavljene distribucije brez jedra Linuxa in na voljo iz zunanjih virov
Zabojniki - to so razporejene distribucije iz slik, pripravljene za uporabo
Posnetki - to so posnetki stanja vsebnikov, na katere se lahko vrnete
Za upravljanje pomnilnika v LXD uporabite ukaz lxc storage certifikat, ki ga pridobite z vnosom ključa - lxc storage --help
Naslednji ukaz prikaže seznam vseh Bazen za shranjevanje v shrambi LXD:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 2 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 4 |
+---------+-------------+--------+--------------------------------+---------+
Za ogled seznama vseh Prostor za shranjevanje v izbranem Bazen za shranjevanje služi ekipi 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 |
+-----------+----------------------------------+-------------+---------+
Tudi, če za Bazen za shranjevanje Pri ustvarjanju je bil izbran datotečni sistem BTRFS, nato pridobite seznam Prostor za shranjevanje ali podštevilke v interpretaciji BTRFS lahko uporabite komplet orodij tega datotečnega sistema:
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
Preden ustvarite in uporabite vsebnike, morate izvesti splošno inicializacijo LXD, ki ustvari in konfigurira omrežje in shrambo. To je mogoče storiti ročno z uporabo standardnih odjemalskih ukazov, ki so na voljo na seznamu s klicem ukaza lxc --help ali s pomočjo čarovnika za inicializacijo lxd init odgovori na nekaj vprašanj.
Izbira datotečnega sistema za pomnilniško področje ^
Med inicializacijo LXD postavi več vprašanj, vključno z določitvijo vrste datotečnega sistema za privzeto Bazen za shranjevanje. Privzeto je zanj izbran datotečni sistem BTRFS. Po ustvarjanju ne bo mogoče spremeniti drugega FS. Priporočljivo je, da izberete FS primerjalno tabelo funkcij:
Feature
Imenik
Btrfs
LVM
ZFS
CEPH
Optimizirano shranjevanje slik
št
ja
ja
ja
ja
Optimizirano ustvarjanje primerkov
št
ja
ja
ja
ja
Optimizirano ustvarjanje posnetkov
št
ja
ja
ja
ja
Optimiziran prenos slike
št
ja
št
ja
ja
Optimiziran prenos primerkov
št
ja
št
ja
ja
kopiraj na pisanje
št
ja
ja
ja
ja
Na podlagi blokov
št
št
ja
št
ja
Takojšnje kloniranje
št
ja
ja
ja
ja
Gonilnik za shranjevanje, ki se lahko uporablja znotraj vsebnika
ja
ja
št
št
št
Obnovi iz starejših posnetkov (ne najnovejših)
ja
ja
ja
št
ja
Kvote za shranjevanje
da(*)
ja
ja
ja
št
Inicializacija omrežja in pomnilniškega bazena s čarovnikom ^
Naslednji ukaz, ki si ga bomo ogledali, predlaga nastavitev glavnih komponent LXD z odgovori na preprosta vprašanja s čarovnikom za inicializacijo.
Zaženi ukaz lxc init in vnesite odgovore na vprašanja za dvopičjem, kot je prikazano v spodnjem primeru, ali jih spremenite glede na svoje pogoje:
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]:
V prejšnjem koraku smo ustvarili Bazen za shranjevanje ki je dobil ime ssdpool in katere datoteka se nahaja v mojem sistemu na /var/lib/lxd/disks/ssdpool.img. Ta naslov datotečnega sistema ustreza fizičnemu pogonu SSD v mojem računalniku.
Naslednji ukrepi za razširitev razumevanja vloge, ki jo igra Bazen za shranjevanje v repozitoriju bomo ustvarili drugo Bazen za shranjevanje ki bo fizično nameščen na drugi vrsti diska, HDD. Težava je v tem, da vam LXD ne dovoljuje ustvarjanja Bazen za shranjevanje iz naslova /var/lib/lxd/disks/ in celo simbolne povezave ne bodo delovale, glejte odgovor razvijalca. To omejitev lahko zaobidemo med inicializacijo/formatiranjem Bazen za shranjevanje z navedbo vrednosti kot blokovne naprave namesto poti do datoteke povratne zanke tako, da to navedete v ključu source.
Torej, pred ustvarjanjem Bazen za shranjevanje v vašem datotečnem sistemu morate definirati datoteko povratne zanke ali obstoječo particijo, ki jo bo uporabljala. Za to bomo ustvarili in uporabili datoteko, katere velikost bomo omejili 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 datoteko povratne zanke z brezplačno napravo za povratno zanko:
Zahvaljujoč ključu --show izvajanje ukaza vrne na zaslon ime naprave, v katero je povezana naša povratna datoteka. Po potrebi lahko prikažemo seznam vseh zasedenih naprav te vrste, da se prepričamo, ali so naša dejanja pravilna:
Na seznamu lahko ugotovite, da ima naprava /dev/loop1 vključena povratna datoteka /mnt/work/lxd/hddpool.img, in v napravi /dev/loop0 vključena povratna datoteka /var/lib/lxd/disks/ssdpool.img ki ustreza privzetku Bazen za shranjevanje.
Naslednji ukaz ustvari novega Bazen za shranjevanje v LXD na podlagi datoteke povratne zanke, ki smo jo pravkar pripravili. LXD bo formatiral datoteko povratne zanke /mnt/work/lxd/hddpool.img v napravi /dev/loop1 za datotečni sistem BTRFS:
Po ustvarjanju Bazen za shranjevanje, če je potrebno, se lahko razširi. Za Bazen za shranjevanje na podlagi datotečnega sistema BTRFS zaženite naslednje ukaze:
Samodejno vstavljanje datoteke povratne zanke v režo naprave za povratno zanko ^
Imamo eno majhno težavo, pri ponovnem zagonu gostiteljskega sistema, datoteko /mnt/work/lxd/hddpool.img bo "odletel" iz naprave /dev/loop1 in storitev LXD se bo zrušila pri nalaganju, ker je ne bo videla v tej napravi. Za rešitev te težave morate ustvariti sistemsko storitev, ki bo to datoteko vstavila v napravo /dev/loop1 ko se gostiteljski sistem zažene.
Ustvarjajmo Enota vrsta datoteke Storitev в /etc/systemd/system/ za inicializacijski sistem 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 storitev:
sudo systemctl enable lxd-hddpool
Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.
Po ponovnem zagonu gostiteljskega sistema preverimo status storitve:
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 izhoda lahko preverimo, ali je stanje storitve aktivna, kljub dejstvu, da je bila izvedba našega skripta iz enega ukaza končana, nam je možnost to omogočila RemainAfterExit=true.
Ker se vsi procesi vsebnika dejansko izvajajo izolirano v gostiteljskem sistemu z uporabo njegovega jedra, za dodatno zaščito dostopa procesov vsebnika do gostiteljskega sistema LXD ponuja privilegij procesa, kjer:
Privilegirani kontejnerji - to so vsebniki, v katerih procesi z UID in GID ustrezajo istemu lastniku kot na gostiteljskem sistemu. Na primer, proces, ki se izvaja v vsebniku z UID 0, ima vse enake pravice dostopa kot proces v gostiteljskem sistemu z UID 0. Z drugimi besedami, korenski uporabnik v vsebniku ima vse pravice ne le v vsebniku, temveč tudi v gostiteljskem sistemu, če lahko gre zunaj izoliranega imenskega prostora vsebnika.
Neprivilegirani vsebniki - to so vsebniki, v katerih procesi pripadajo lastniku UID in GID s številko od 0 do 65535, vendar je za gostiteljski sistem lastnik zamaskiran z dodanimi biti SubUID oziroma SubGID. Na primer, uporabnik z UID=0 v vsebniku bo v gostiteljskem sistemu viden kot SubUID + UID. To ščiti gostiteljski sistem, ker če lahko kateri koli proces v vsebniku uide svojemu izoliranemu imenskemu prostoru, lahko z gostiteljskim sistemom komunicira le kot proces z neznanim, zelo visokim UID/GID.
Privzeto imajo na novo ustvarjeni vsebniki neprivilegiran status, zato moramo definirati SubUID in SubGID.
Ustvarimo dve konfiguracijski datoteki, v katerih bomo nastavili masko za SubUID oziroma SubGID:
Ker smo predhodno inicializirali omrežje s čarovnikom za inicializacijo lxd init in ustvaril omrežno napravo lxdbr0, potem se bomo v tem razdelku preprosto seznanili z omreženjem v LXD in kako ustvariti virtualno stikalo (most) z ukazom odjemalca.
Naslednji diagram prikazuje, kako stikalo (most) povezuje gostitelja in vsebnike v omrežje:
Vsebniki lahko prek omrežja komunicirajo z drugimi vsebniki ali gostiteljem, na katerem so ti vsebniki na voljo. Če želite to narediti, morate navidezne omrežne kartice vsebnikov povezati z navideznim stikalom. Najprej bomo ustvarili stikalo, omrežni vmesniki vsebnika pa bodo povezani v naslednjih poglavjih, potem ko bo ustvarjen sam vsebnik.
Naslednji ukaz ustvari stikalo s podomrežjem 10.0.5.0/24 in naslov IPv4 10.0.5.1/24, in vključuje tudi ipv4.nat tako da lahko vsebniki dostopajo do interneta prek gostitelja s storitvijo NAT:
Vsak vsebnik v LXD ima svojo konfiguracijo in jo lahko razširi z globalno deklariranimi konfiguracijami, imenovanimi konfiguracijski profili. Uporaba konfiguracijskih profilov za vsebnik ima kaskadni model, naslednji primer to prikazuje:
V tem primeru so bili v sistemu LXD ustvarjeni trije profili: default, hddpool и hostfs. Vsi trije profili so uporabljeni za vsebnik, ki ima lokalno konfiguracijo (sivo območje). Profil default ima napravo root ki ima parameter pool je enako ssdpool, toda zahvaljujoč modelu aplikacije kaskadne konfiguracije lahko na vsebnik uporabimo profil hddpool ki ima parameter pool bo preglasil isti parameter iz profila default in vsebnik bo prejel konfiguracijo naprave root s parametrom pool enako hddpoolin profil hostfs preprosto doda novo napravo v vsebnik.
Če si želite ogledati seznam razpoložljivih konfiguracijskih profilov, uporabite naslednji ukaz:
lxc profile list
+---------+---------+
| NAME | USED BY |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+
Popoln seznam razpoložljivih ukazov za delo s profilom lahko dobite z dodajanjem 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
Privzeti konfiguracijski profil default nima konfiguracije omrežne kartice za vsebnik in vsi novo ustvarjeni kontejnerji nimajo omrežja, zanje je potrebno ustvariti lokalne (namenske) omrežne naprave z ločenim ukazom, lahko pa ustvarimo globalno omrežno napravo v konfiguraciji profil, ki bo v skupni rabi med vsemi vsebniki, ki uporabljajo ta profil. Tako bodo takoj po ukazu za ustvarjanje novega kontejnerja imeli omrežje z dostopom do omrežja. Hkrati pa ni nobenih omejitev, po potrebi lahko lokalno omrežno napravo vedno ustvarimo pozneje.
Naslednji ukaz bo dodal napravo v konfiguracijski profil eth0 tip nic povezan z omrežjem lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0
Pomembno je omeniti, da ker smo napravo dejansko dodali konfiguracijskemu profilu, če smo v napravi podali statični naslov IP, bodo vsi vsebniki, ki bodo uporabljali ta profil, delili isti naslov IP. Če je treba ustvariti vsebnik s statičnim naslovom IP, dodeljenim vsebniku, morate ustvariti konfiguracijo omrežne naprave na ravni vsebnika (lokalna konfiguracija) s parametrom naslova IP in ne na ravni profila.
Preverimo 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: []
V tem profilu lahko vidimo, da bosta za vse novo ustvarjene vsebnike ustvarjeni dve napravi:
eth0 — Vrsta naprave nic priključen na stikalo (omrežni most) lxdbr0
root — Vrsta naprave disk ki uporablja shranjevalni bazen ssdpool
Za uporabo predhodno ustvarjenega Bazen za shranjevanje vsebnike, ustvarite konfiguracijski profil ssdroot v katerega bomo dodali napravo, kot je disk s točko pritrditve / (root) z uporabo predhodno ustvarjenega Bazen za shranjevanje - ssdpool:
Vsebniki so ustvarjeni iz slik, ki so posebej sestavljene distribucije, ki nimajo jedra Linuxa. Zato je treba pred zagonom vsebnika razmestiti iz te slike. Vir slik je lokalni repozitorij, v katerega se slike nalagajo iz zunanjih repozitorijev.
Če želite začeti uporabljati vsebnik, morate dodati sliko iz globalnega repozitorija v lokalno local:. Zdaj je lokalno skladišče prazno, ukaz bo poskrbel za to lxc image list. Če metoda list ne določite repozitorija, potem bo privzeto uporabljen lokalni repozitorij - local:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+
Slike v repozitoriju se upravljajo z naslednjimi metodami:
Ekipa
Opis
lxc slika alias
Upravljanje vzdevkov slik
lxc slika copy
Kopirajte slike med strežniki
lxc slika odstrani
Izbriši slike
lxc slika Uredi
Uredi lastnosti slike
lxc slika izvoz
Izvoz in prenos slik
lxc slika uvoz
Uvozite slike v shrambo slik
lxc slika info
Pokaži uporabne informacije o slikah
lxc slika Seznam
Seznam slik
lxc slika osvežitev
Osveži slike
lxc slika Prikaži
Pokaži lastnosti slike
Kopirajte sliko v lokalni repozitorij iz globalnega images::
Poleg interaktivnega načina LXD podpira tudi neinteraktivni način namestitve konfiguracije, ko je konfiguracija določena v obliki datoteke YAML, posebnega formata, ki vam omogoča namestitev celotne konfiguracije naenkrat, mimo izvajanja številnih interaktivnih ukazov, ki so bili obravnavani zgoraj v tem članku, vključno s konfiguracijo omrežja, ustvarjanjem konfiguracijskih profilov itd. Tukaj ne bomo obravnavali tega področja, preverite ga lahko sami. v dokumentaciji.
Naslednji interaktivni ukaz lxc config ki si ga bomo ogledali, omogoča nastavitev konfiguracije. Na primer, da zagotovimo, da se slike, prenesene v lokalni repozitorij, ne posodobijo samodejno iz globalnih repozitorijev, lahko to vedenje omogočimo z naslednjim ukazom:
Če želite ustvariti vsebnik, uporabite ukaz lxc init na katerega se posredujejo vrednosti репозиторий:образ in nato želeni ID vsebnika. Repozitorij je mogoče določiti kot lokalni local: prav tako vsaka globalna. Če repozitorij ni določen, se za iskanje slike privzeto uporablja lokalni repozitorij. Če je slika podana iz globalnega repozitorija, bo slika najprej prenesena v lokalni repozitorij in nato uporabljena za ustvarjanje vsebnika.
Zaženimo naslednji ukaz, da ustvarimo naš prvi vsebnik:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddroot
Oglejmo si ukazne tipke, ki jih tukaj uporabljamo po vrstnem redu:
alpine3 — Vzdevek (vzdevek) je določen za sliko, ki je bila predhodno naložena v lokalni repozitorij. Če vzdevek ni bil ustvarjen za to sliko, se lahko vedno sklicujete na sliko z njenim Prstni odtis ki je prikazana v tabeli.
alp — Nastavi identifikator za vsebnik
--storage — Ta ključ označuje, v katerem Bazen za shranjevanje ustvarjen bo vsebnik
--profile — Ti ključi kaskadno uporabljajo konfiguracijo iz predhodno ustvarjenih konfiguracijskih profilov v vsebniku
Zaženemo vsebnik, ki začne zagnati sistem inicializacije distribucije:
lxc start alp
Uporabite lahko tudi ukaz lxc launch ki vam omogoča združevanje ekip lxc init и lxc start v eni operaciji.
Preverjanje stanja posode:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME | STATE | IPV4 | IPV6 | TYPE | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | hddpool |
+------+---------+------------------+------+-----------+--------------+
V razdelku profiles zagotovimo lahko, da ta vsebnik uporablja dva konfiguracijska profila − default и hddroot. V razdelku devices zaznamo lahko le eno napravo, ker je bila omrežna naprava ustvarjena na ravni profila default. Če želite videti vse naprave, ki jih uporablja vsebnik, morate dodati ključ --expanded:
Če poskušamo nastaviti naslov IP za omrežno napravo eth0 ekipa lxc config device set alp namenjen konfiguraciji vsebnika, potem bomo prejeli napako, ki bo poročala, da naprava ne obstaja, ker naprava eth0 ki ga uporablja zabojnik spada v profil default:
lxc config device set alp eth0 ipv4.address 10.0.5.5
Error: The device doesn't exist
Seveda lahko nastavimo statični naslov IP za eth0 naprav v profilu, vendar bo enako za vse vsebnike, ki bodo uporabljali ta profil. Zato dodajmo napravo, namenjeno vsebniku:
lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Nato morate znova zagnati posodo:
lxc restart alp
Če zdaj pogledamo konfiguracijo vsebnika, nam možnosti ni treba uporabiti --expanded da vidite omrežno napravo eth0, saj smo ga ustvarili na ravni vsebnika in se je kaskadno povezal prek iste naprave iz profila default:
Za neposredno izvajanje ukazov v vsebniku, mimo omrežnih povezav, uporabite ukaz lxc exec ki izvaja ukaze v vsebniku brez zagona sistemske lupine. Če morate izvesti ukaz v lupini z uporabo vzorcev lupine, kot so spremenljivke, preusmeritve datotek (cev) itd., morate izrecno zagnati lupino in posredovati ukaz kot ključ, na primer:
lxc exec alp -- /bin/sh -c "echo $HOME"
Ukaz je uporabil poseben ubežni znak za poseben značaj $ tako da spremenljivka $HOME ni bil interpretiran na gostiteljskem stroju, ampak je bil interpretiran le znotraj vsebnika.
Možno je tudi zagnati način interaktivne lupine in nato končati sejo z izvajanjem bližnjične tipke CTRL+D:
V LXD lahko upravljate vire vsebnika s posebnim naborom konfiguracij. Najdete lahko celoten seznam konfiguracijskih parametrov vsebnika v dokumentaciji.
Obstaja več načinov za omejitev virov procesorja. vrste omejitev:
limit.cpu - veže vsebnik na eno ali več jeder procesorja
limits.cpu.allowance - upravlja kvote razporejevalnika CFS, ko je potekla časovna omejitev, ali univerzalni mehanizem za skupno rabo virov CPE, ko je potekel odstotek
limits.cpu.priority - prednost planerja, ko je več primerkom, ki si delijo nabor procesorjev, dodeljen enak odstotek procesorjev
Poleg takšnih omejitev limits.read, limits.write omejimo lahko tudi količino prostora na disku, ki ga porabi vsebnik (deluje samo z ZFS ali BTRFS):
lxc config device set alp root size=2GB
Po namestitvi v parametru devices.root.size Nastavljeno omejitev lahko preverimo:
lxc config show alp
...
devices:
root:
path: /
pool: hddpool
size: 2GB
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""
Za ogled porabljenih diskovnih kvot, ki jih lahko dobimo z ukazom 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
Kljub temu, da smo za korensko napravo vsebnika postavili omejitev na 2 GB, sistemski pripomočki, kot je npr. df ne bo videl te omejitve. Da bi to naredili, bomo izvedli majhen test in ugotovili, kako deluje.
Ustvarimo 2 nova enaka vsebnika v istem Bazen za shranjevanje (hddpool):
lxc exec alp1 -- ls -lh
total 1000M
-rw-r--r-- 1 root root 1000.0M Mar 27 10:16 file.img
Če pogledamo v drugi vsebnik, preverimo obstoj datoteke na istem mestu, potem te datoteke tam ne bo, kar je pričakovano, saj so vsebniki ustvarjeni v svojih Prostor za shranjevanje v istem Bazen za shranjevanje:
lxc exec alp2 -- ls -lh
total 0
Toda primerjajmo vrednosti, ki jih proizvaja df na eni in drugi posodi:
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% /
...
Naprava /dev/loop1 nameščen kot korenska particija Bazen za shranjevanje ki jih te posode uporabljajo, tako da si njihovo prostornino delijo med dvema.
LXD ima možnost ustvarjanja posnetkov in obnavljanja stanja vsebnika iz njih.
Če želite ustvariti posnetek, zaženite naslednji ukaz:
lxc snapshot alp snapshot1
Ekipa lxc snapshot ključ ni na voljo list, zato morate za ogled seznama posnetkov uporabiti ukaz, ki prikaže splošne informacije o vsebniku:
lxc info alp
...
...
Snapshots:
snapshot1 (taken at 2020/04/08 18:18 UTC) (stateless)
Z ukazom lahko obnovite vsebnik iz posnetka lxc restore z določitvijo vsebnika, za katerega bo izvedena obnova, in vzdevka posnetka:
lxc restore alp snapshot1
Naslednji ukaz se uporablja za brisanje posnetka. Upoštevajte, da sintaksa ukaza ni podobna vsem drugim; tukaj morate za imenom vsebnika določiti poševnico. Če je poševnica izpuščena, se ukaz za brisanje posnetka interpretira kot ukaz za brisanje vsebnika!
lxc delete alp/snapshot1
V zgornjem primeru smo si ogledali tako imenovane posnetke brez stanja. LXD ima še eno vrsto posnetkov - stateful, ki shrani trenutno stanje vseh procesov v vsebniku. S posnetki stanja so povezane številne zanimive in uporabne funkcije.