
LXD LXD është një menaxher modern i konteinerëve, kështu thotë . Ai ofron një ndërfaqe përdoruesi që ngjan me makinat virtuale, por përdor në vend të tyre konteinerë Linux.
Nuk Ă«shtĂ« LXD â kjo Ă«shtĂ« njĂ« shĂ«rbim i privilegjuar (shĂ«rbimi i ekzekutuar me tĂ« drejtat root) qĂ« ofron njĂ« API REST nĂ«pĂ«rmjet njĂ« soketi lokal unix, si dhe pĂ«rmes rrjetit, nĂ«se Ă«shtĂ« instaluar konfigurimi pĂ«rkatĂ«s. KlientĂ«t, siç Ă«shtĂ« mjeti i linjĂ«s sĂ« komandave qĂ« vjen me LXD, dĂ«rgojnĂ« kĂ«rkesa pĂ«rmes kĂ«tij API REST. Kjo do tĂ« thotĂ« se pavarĂ«sisht nĂ«se jeni duke u lidhur me hostin lokal apo me njĂ« tĂ« largĂ«t, gjithçka funksionon nĂ« mĂ«nyrĂ« tĂ« njĂ«jtĂ«.
NĂ« kĂ«tĂ« artikull ne nuk do tĂ« ndalemi nĂ« konceptet e LXD, nuk do tĂ« shqyrtojmĂ« tĂ« gjitha mundĂ«sitĂ« e disponueshme tĂ« paraqitura nĂ« dokumentacion, pĂ«rfshirĂ« implementimin e fundit nĂ« versionet mĂ« tĂ« fundit tĂ« LXD qĂ« mbĂ«shtesin makinat virtuale QEMU paralelisht me konteinerĂ«t. NĂ« vend tĂ« kĂ«saj, ne do tĂ« mĂ«sojmĂ« vetĂ«m bazat e menaxhimin e konteinerĂ«ve â do tĂ« konfigurojmĂ« pishina ruajtjeje, rrjetin, do tĂ« nisim konteinerĂ«, do tĂ« aplikojmĂ« kufizime burimesh dhe gjithashtu do tĂ« shqyrtojmĂ« si tĂ« pĂ«rdorim snapshot-et, qĂ« tĂ« keni njĂ« pasqyrĂ« bazĂ« tĂ« LXD dhe tĂ« pĂ«rdorni konteinerĂ«t nĂ« Linux.
Për informacion të plotë, lutemi referohuni burimit zyrtar:
Navigim
Instalim LXD
Instalimi i LXD në shpërndarjet Ubuntu
Në shpërndarjen Ubuntu 19.10 paketa lxd ka një transicion në :
apt search lxd
lxd/eoan 1:0.7 all
Paketa e kalimit - lxd -> snap (lxd)Kjo do të thotë se do të instalohen menjëherë dy paketa, një sistemor dhe tjetri si paketë snap. Instalimi i dy paketave në sistem mund të shkaktojë ndonjë problem, ku paketa sistemor mund të bëhet jetim, nëse hiqet paketa snap nga menaxheri i paketave snap.
Gjeni paketën lxd në repositorin snap me komandën e mëposhtme:
snap find lxd
Emri Version Përmbledhja
lxd 3.21 Menaxher i konteinerëve sistemor dhe API
lxd-demo-server 0+git.6d54658 Sesione demo të softuerit online duke përdorur LXD
nova ocata Shërbimi i llogaritjes OpenStack (nova)
nova-hypervisor ocata Shërbimi i llogaritjes OpenStack - Hypervizori KVM (nova)
distrobuilder 1.0 Ndërtesë imazhesh për LXC dhe LXD
fabrica 0.1 Ndërtoni snaps thjesht duke e drejtuar një formular në...
satellite 0.1.2 Platforma e avancuar e inteligjencës së kodit të hapurDuke ekzekutuar komandën list mund të sigurohemi se paketa lxd ende nuk është instaluar:
snap list
Emri Version Rev Ndjekja Botuesi Shënime
core 16-2.43.3 8689 stabile canonicalâ coreMegjithĂ«se LXD Ă«shtĂ« njĂ« paketĂ« snap, duhet ta instaloni atĂ« pĂ«rmes paketĂ«s sistemore lxd, e cila do tĂ« krijojĂ« nĂ« sistem grupin pĂ«rkatĂ«s, utilitetet e nevojshme nĂ« /usr/bin etj.
sudo apt update
sudo apt install lxdLe të verifikojmë se paketa është instaluar si paketë snap:
snap list
Emri Version Rev Ndjekja Botuesi Shënime
core 16-2.43.3 8689 stabile canonicalâ core
lxd 3.21 13474 stabile/⊠canonicalâ -Instalimi i LXD nĂ« shpĂ«rndarjet Arch Linux
Për të instaluar paketën LXD në sistem është e nevojshme të ekzekutoni komandat e mëposhtme, e para do të aktualizojë listën e paketeve të disponueshme në repositor, e dyta do të instalohet paketën:
sudo pacman -Syyu && sudo pacman -S lxdPasi të instalohet paketa, për menaxhimin e LXD nga një përdorues i zakonshëm, është e nevojshme ta shtoni atë në grupin sistemor lxd:
sudo usermod -a -G lxd user1Le të sigurohemi se përdoruesi user1 është shtuar në grupin lxd:
id -Gn user1
user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxdNëse grupi lxd nuk shfaqet në listë, atëherë duhet aktivizuar përsëri sesioni i përdoruesit. Për këtë, duhet të dilni dhe të ftuoni sërish në sistem me këtë përdorues.
Aktivizoni në systemd ngarkimin e shërbimit LXD gjatë nisjes së sistemit:
sudo systemctl enable lxdNisni shërbimin:
sudo systemctl start lxdKontrolloni statusin e shërbimit:
sudo systemctl status lxdRuajtja LXD (Storage)
Para fillimit të inicializimit, duhet të kuptojmë se si është strukturuar logjikisht ruajtja në LXD.
Ruajtja (Storage) nga njĂ« ose mĂ« shumĂ« Storage Pool e cila pĂ«rdor njĂ« nga sistemet e skedarĂ«ve tĂ« mbĂ«shtetur si ZFS, BTRFS, LVM ose drejtime tĂ« zakonshme. Ădo Storage Pool ndarje ndahen nĂ« vĂ«llime (VĂ«llimi i Ruajtjes) qĂ« pĂ«rmbajnĂ« pamje, konteinerĂ« ose tĂ« dhĂ«na pĂ«r qĂ«llime tĂ« tjera.
- Imazhet â janĂ« distribuime tĂ« veçanta tĂ« ndĂ«rtuara pa bĂ«rthamĂ«n Linux dhe tĂ« disponueshme nga burime tĂ« jashtme.
- KontenierĂ«t â janĂ« shpĂ«rndarje tĂ« instaluara nga imazhe, tĂ« gatshme pĂ«r pĂ«rdorim.
- Snapshotet â janĂ« pamje tĂ« gjendjes sĂ« kontejnerĂ«ve nga tĂ« cilat mund tĂ« riktheheni.

PĂ«r menaxhimin e ruajtjes nĂ« LXD pĂ«rdoret komandĂ« lxc storage pĂ«r ndihmĂ« tĂ« cilĂ«s mund tĂ« merrni duke ndarĂ« çelĂ«sin â lxc storage --help
Komanda e mëposhtme jep në ekran listën e të gjitha Storage Pool në ruajtjen LXD:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 2 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 4 |
+---------+-------------+--------+--------------------------------+---------+Për të parë listën e të gjitha Vëllimi i Ruajtjes në Storage Pool përdoret komandë 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 |
+-----------+----------------------------------+-------------+---------+Po ashtu, nëse për Storage Pool në krijim është zgjedhur sistemi i skedarëve BTRFS, atëherë për të marrë listën e Vëllimi i Ruajtjes ose subvolumes në interpretimin BTRFS mund të përdoren veglat e këtij sistemi skedarësh:
sudo btrfs subvolume list -p /var/lib/lxd/storage-pools/hddpool
ID 257 gen 818 parent 5 top level 5 path images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3sudo 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/alp3Inicijalizimi LXD
Para krijimit dhe përdorimit të konteinerëve, është e nevojshme të kryhet një inicim i përgjithshëm i LXD që krijon dhe konfiguron rrjetin, si dhe ruajtjen. Kjo mund të bëhet manualisht me komandat standarde të klientit të cilat janë të disponueshme në listën e thirrjes së komandës lxc --help ose me magjistrin e inicimit lxd init duke iu përgjigjur disa pyetjeve.
Zgjedhja e sistemit të dosjeve për Pishinën e Ruajtjes
Gjatë inicializimit, LXD bën disa pyetje, ndër të cilat do të përcaktojë llojin e sistemit të skedarëve për defoltin Storage Pool. Siç është caktuar, sistemi i skedarëve BTRFS zgjidhet për të. Ndryshimi në një sistemi të ndryshëm të skedarëve pas krijimit do të jetë i pamundur. Për të zgjedhur sistemin e skedarëve, ofrohet :
Karakteristika
Directory
Btrfs
LVM
ZFS.
CEPH
Ruajtja e optimizuar e imazheve
jo
po
po
po
po
Krijimi i optimizuar i instanceve
jo
po
po
po
po
Krijimi i optimizuar i snapshot-it
jo
po
po
po
po
Transferi i optimizuar i imazheve
jo
po
jo
po
po
Transferi i optimizuar i instanceve
jo
po
jo
po
po
Kopja në shkrim
jo
po
po
po
po
Baze blloku
jo
jo
po
jo
po
Klonimi i menjëhershëm
jo
po
po
po
po
Drejtues i ruajtjes që mund të përdoret brenda një konteineri
po
po
jo
jo
jo
Rivendosja nga snapshot-e më të vjetra (nuk është më e fundit)
po
po
po
jo
po
Kotat e ruajtjes
po(*)
po
po
po
jo
Inicijalizimi i rrjetit dhe Pishinës së Ruajtjes nëpërmjet asistencës
Komanda e ardhshme që do të shqyrtojmë, ofron konfigurimin e komponentëve kryesorë të LXD përmes përgjigjeve ndaj pyetjeve të thjeshta me ndihmën e asistantit të inicializuar.
Ekzekutoni komandën lxc init dhe jepni përgjigjet për pyetjet pas pikës dyfishe, siç tregohet në shembullin më poshtë ose ndryshojini ato sipas kushteve tuaja:
lxd init
A dëshironi të përdorni klasterizimin LXD? (po/jo) [defolt=jo]:
A dëshironi të konfiguroni një depo të re ruajtjeje? (po/jo) [defolt=po]:
Emri i depozita të re të ruajtjes [defolt=default]: ssdpool
Emri i prapavijës së ruajtjes për t'u përdorur (lvm, btrfs, dir) [defolt=btrfs]:
Krijoni një depo të re BTRFS? (po/jo) [defolt=po]:
A dëshironi të përdorni një pajisje blloku ekzistuese? (po/jo) [defolt=jo]:
Madhësia në GB e pajisjes loop të re (minimumi 1GB) [defolt=15GB]: 10GB
A dëshironi të lidheni me një server MAAS? (po/jo) [defolt=jo]:
A dëshironi të krijoni një urë të re locale? (po/jo) [defolt=po]:
Si duhet të quhet ura e re? [defolt=lxdbr0]:
Cila adresĂ« IPv4 duhet tĂ« pĂ«rdoret? (nĂ«nshkrimi CIDR, âautoâ ose ânoneâ) [defolt=auto]: 10.0.5.1/24
A dëshironi që LXD të NAT-ojë trafikun IPv4 në urën tuaj? [defolt=po]:
Cila adresĂ« IPv6 duhet tĂ« pĂ«rdoret? (nĂ«nshkrimi CIDR, âautoâ ose ânoneâ) [defolt=auto]: None
A dëshironi që LXD të jetë në dispozicion përmes rrjetit? (po/jo) [defolt=jo]:
A dëshironi që imazhet e plota të ruajtura të azhurnohen automatikisht? (po/jo) [defolt=po] Jo
A dëshironi që të printohet një YAML "lxd init" preseed? (po/jo) [defolt=jo]: Krijimi i një Pishine të Dytë të Ruajtjes
Në hapin e mëparshëm, ne krijuam Storage Pool të cilit i dhamë emrin ssdpool dhe skedari i tij ndodhet në sistemin tim në adresën /var/lib/lxd/disks/ssdpool.img. Kjo adresë e sistemit të skedarëve korrespondon me diskun fizik SSD në PC-në time.
Hapat e ardhshëm, për të zgjeruar kuptimin e asaj se çfarë roli luan Storage Pool në ruajtje, do të krijojmë një të dytë Storage Pool i cili do të ndodhet fizikisht në një lloj disku tjetër, në HDD. Problemi është se LXD nuk lejon krijimin e Storage Pool jashtë adresës /var/lib/lxd/disks/ dhe madje lidhjet simbolike nuk do të funksionojnë, . Ne mund ta anashkalojmë këtë kufizim gjatë inicializimit/formatimit Storage Pool duke caktuar vlerën si një pajisje blloku në vend të një rruge në skedarin loopback, duke e caktuar këtë në çelësin source.
Pra, deri në krijim Storage Pool duhet të përcaktohet skedari loopback ose ndarja e ekzistueshme në sistemin tuaj të skedarëve që do të përdoret. Për këtë, ne do të krijojmë dhe përdorim një skedar të cilin do ta kufizojmë në 10GB:
dd if=\/dev\/zero of=\/mnt\/work\/lxd\/hddpool.img bs=1MB count=10000
10000+0 të dhëna në
10000+0 të dhëna jashtë
10000000000 bytes (10 GB, 9.3 GiB) të kopjuara, 38.4414 s, 260 MB\/sDo të lidhim skedarin loopback në një pajisje loopback të lirë:
sudo losetup --find --show \/mnt\/work\/lxd\/hddpool.img
\/dev\/loop1Falë çelësit --show ekzekutimi i komandës kthen në ekran emrin e pajisjes në të cilën u lidh skedari ynë loopback. Nëse është e nevojshme, mund të nxjerrim listën e të gjitha pajisjeve të zëna të këtij lloji, për t'u siguruar në saktësinë e veprimeve tona:
losetup -l
EMRI SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
\/dev\/loop1 0 0 0 0 \/mnt\/work\/lxd\/hddpool.img 0 512
\/dev\/loop0 0 0 1 0 \/var\/lib\/lxd\/disks\/ssdpool.img 0 512Nga lista mund të zbulohet se në pajisjen /dev/loop1 është lidhur skedari loopback /mnt/work/lxd/hddpool.img, dhe në pajisjen /dev/loop0 është lidhur skedari loopback /var/lib/lxd/disks/ssdpool.img e cila i përket defoltit Storage Pool.
Komanda e ardhshme krijon një të re Storage Pool në LXD bazuar vetëm në skedarin loopback të sapo përgatitur. LXD do ta formatizojë skedarin loopback /mnt/work/lxd/hddpool.img në pajisjen /dev/loop1 në sistemin e skedarëve BTRFS:
lxc storage create hddpool btrfs size=10GB source=\/dev\/loop1Do të nxjerrim listën e të gjitha Storage Pool në ekran:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| EMRI | PĂRSHKRIMI | DRIVERA | BURIM | PĂRDORUR NGA |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | \/dev\/loop1 | 0 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | \/var\/lib\/lxd\/disks\/ssdpool.img | 0 |
+---------+-------------+--------+--------------------------------+---------+Rritja e madhësisë së Pishinës së Ruajtjes
Pas krijimit Storage Pool, nëse është e nevojshme, mund të zgjatet. Për Storage Pool të bazuar në sistemin e skedarëve BTRFS kryeni komandat e mëposhtme:
sudo truncate -s +5G \/mnt\/work\/lxd\/hddpool.img
sudo losetup -c \/dev\/loop1
sudo btrfs filesystem resize max \/var\/lib\/lxd\/storage-pools\/hddpoolAutomatizimi i vendosjes së skedarëve të loopback në slotin e pajisjes loopback
Kemi një problem të vogël, kur sistemi i host-it të ri ngarkohet, skedari /mnt/work/lxd/hddpool.img "do të "dalë" nga pajisja /dev/loop1 dhe shërbimi LXD do të bjerë gjatë ngarkesës, sepse nuk do ta shohë atë në këtë pajisje. Për të zgjidhur këtë problem, duhet të krijoni një shërbim sistemik që do ta fusë këtë skedar në pajisje /dev/loop1 gjatë ngarkesës së sistemit të host-it.
Do të krijojmë unit skedari i llojit shërbim në /etc/systemd/system/ për sistemin e inicializimit 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
EOFAktivizojmë shërbimin:
sudo systemctl enable lxd-hddpool
Krijuar lidhje pĂ«r /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service â /etc/systemd/system/lxd-hddpool.service.Pas rindizjes sĂ« sistemit pritĂ«s, kontrolloni statusin e shĂ«rbimit:
systemctl status lxd-hddpool.service
â lxd-hddpool.service - Losetup LXD Storage Pool (hddpool)
Ngarkuar: i ngarkuar (/etc/systemd/system/lxd-hddpool.service; i aktivizuar; vendosja e shitësit: e deaktivizuar)
Aktiv: aktiv (dalë) që nga Mër 2020-04-08 03:43:53 MSK; 1min 37s më parë
Procesi: 711 ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img (kod=dalë, statusi=0/SUKSESI)
PID kryesor: 711 (kod=dalë, statusi=0/SUKSESI)
apr 08 03:43:52 manjaro systemd[1]: Duke nisur Losetup LXD Storage Pool (hddpool)...
apr 08 03:43:53 manjaro systemd[1]: Përfundoi Losetup LXD Storage Pool (hddpool).Nga rezultati ne mund të sigurohemi se gjendja e shërbimit është aktiv, pavarësisht se ekzekutimi i skriptit tonë nga një komandë përfundoi, kjo na lejojti opsioni RemainAfterExit=true.
Siguria. Privileges of Containers
Duke marrë parasysh se të gjitha proceset e kontejnerit kryesisht ekzekutohen në izolim në sistemin pritës duke përdorur bërthamën e tij, për mbrojtje shtesë kundrejt qasjes së proceseve të kontejnerit në sistemin pritës, LXD ofron privilegjshmërinë e proceseve, ku:
KonteinerĂ«t e privilegjuar â janĂ« konteinerĂ« nĂ« tĂ« cilĂ«t proceset me UID dhe GID pĂ«rputhen me tĂ« njĂ«jtin pronar si nĂ« sistemin pritĂ«s. PĂ«r shembull, njĂ« proces i nisur nĂ« njĂ« konteiner me UID tĂ« barabartĂ« me 0 ka tĂ« njĂ«jtat tĂ« drejta qasje si njĂ« proces i sistemit pritĂ«s me UID tĂ« barabartĂ« me 0. Me fjalĂ« tĂ« tjera, pĂ«rdoruesi root nĂ« konteiner ka tĂ« gjitha tĂ« drejtat jo vetĂ«m nĂ« konteiner, por edhe nĂ« sistemin pritĂ«s nĂ«se ai arrin tĂ« dalĂ« jashtĂ« hapĂ«sirĂ«s izoluar tĂ« emrave tĂ« konteinerit.
KonteinerĂ«t e paprivilegjuar â janĂ« konteinerĂ« nĂ« tĂ« cilĂ«t proceset i pĂ«rkasin pronarit UID dhe GID me numra nga 0 nĂ« 65535, por pĂ«r sistemin pritĂ«s pronari maskohet duke pĂ«rdorur bitin e shtuar SubUID dhe SubGID pĂ«rkatĂ«s. PĂ«r shembull, njĂ« pĂ«rdorues me UID=0 nĂ« konteiner do tĂ« shfaqet nĂ« sistemin pritĂ«s si
SubUID + UID. Kjo mbron sistemin pritës, pasi nëse ndonjë proces në konteiner arrin të dalë nga hapësira e tij izoluar e emrave, ai mund të bashkëpunojë me sistemin pritës vetëm si një proces me një UID/GID tepër të lartë dhe të panjohur.
Sipas parashikimeve, konteinerët e rinj të krijuar kanë statusin e paprivilegjuar dhe prandaj ne duhet të përcaktojmë SubUID dhe SubGID.
Do të krijojmë dy skedare konfigurimi në të cilat do të përcaktojmë maskën për SubUID dhe SubGID përkatësisht:
sudo touch /etc{/subuid,/subgid}
sudo usermod --add-subuids 1000000-1065535 root
sudo usermod --add-subgids 1000000-1065535 rootPër të aplikuar ndryshimet, shërbimi LXD duhet të rindezit:
sudo systemctl restart lxdKrijimi i një switch-i virtual të rrjetit
Duke qenë se ne e përgatitëm më parë rrjetin me ndihmën e magjistrit të fillimit lxd init dhe krijuam një pajisje rrjeti lxdbr0, në këtë seksion ne thjesht do të njihemi me rrjetin në LXD dhe me mënyrën se si të krijojmë një kalim virtual (bridge) duke përdorur komandën e klientit.
Diagrami në vazhdim shfaq se si kalimi (bridge) bashkon hostin dhe kontejnerët në një rrjet:

Kontejnerët mund të komunikojnë përmes rrjetit me kontejnerë të tjerë ose me hostin mbi të cilin këta kontejnerë shërbehen. Për këtë, është e nevojshme të lidhim kartat virtuale të rrjetit të kontejnerëve me kalimin virtual. Fillimisht do të krijojmë kalimin, ndërsa ndërfaqet rrjetë të kontejnerëve do të lidhen në kapitujt në vazhdim, pasi do të krijohet vetë kontejneri.
Komanda në vazhdim krijon një kalim me nënrrjetë 10.0.5.0/24 dhe adresë IPv4 10.0.5.1/24, si dhe aktivizon ipv4.nat në mënyrë që kontejnerët të mund të marrin internet përmes hostit me ndihmën e shërbimit NAT:
lxc network create lxdbr0 ipv4.address=10.0.5.1/24 ipv4.nat=true ipv6.address=noneKontrollojmë listën e pajisjeve rrjetë që janë të disponueshme në LXD:
lxc network list
+--------+----------+---------+-------------+---------+
| NAME | TYPE | MANAGED | DESCRIPTION | USED BY |
+--------+----------+---------+-------------+---------+
| eno1 | physical | NO | | 0 |
+--------+----------+---------+-------------+---------+
| lxdbr0 | bridge | YES | | 0 |
+--------+----------+---------+-------------+---------+Po ashtu, mund tĂ« kontrolloni krijimin e pajisjes rrjetĂ« me ndihmĂ«n e mjetit standard tĂ« shpĂ«rndarjes Linux â ip link ose ip addr:
ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether bc:ee:7b:5a:6b:44 brd ff:ff:ff:ff:ff:ff
altname enp0s25
inet6 fe80::9571:11f3:6e0c:c07b/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: lxdbr0: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether c2:38:90:df:cb:59 brd ff:ff:ff:ff:ff:ff
inet 10.0.5.1/24 scope global lxdbr0
valid_lft forever preferred_lft forever
inet6 fe80::c038:90ff:fedf:cb59/64 scope link
valid_lft forever preferred_lft forever
5: veth3ddab174@if4: mtu 1500 qdisc noqueue master lxdbr0 state UP group default qlen 1000
link/ether ca:c3:5c:1d:22:26 brd ff:ff:ff:ff:ff:ff link-netnsid 0Profil i konfigurimit
Ădo kontejner nĂ« LXD ka konfigurimin e tij tĂ« vet dhe mund ta zgjasĂ« atĂ« me konfigurimin e shpallur globalisht qĂ« quhet konfiguracione profile. Zbatja e profileve tĂ« konfiguracionit nĂ« kontejner ka njĂ« model kaskad, shembulli i mĂ«poshtĂ«m e tregon kĂ«tĂ«:

Në këtë shembull, tre profile janë krijuar në sistemin LXD: default, hddpool dhe hostfs. Të tri profilet janë aplikuar në një kontejner që ka një konfiguracion lokal (zona gri). Profili default ka një pajisje root me parametrin pool është ssdpool, por për shkak të modelit kaskad të zbatimit të konfiguracionit ne mund të aplikojmë për kontejnerin profilin hddpool me parametrin pool do të mbulojë këtë parametrin nga profili default dhe kontejneri do të marrë konfigurimin e pajisjes root me parametrin pool të barabartë me hddpool, ndërsa profili hostfs thjesht shton një pajisje të re në kontejner.
Për të parë listën e profileve të disponueshme të konfiguracionit shërben komandën e mëposhtme:
lxc profile list
+---------+---------+
| EMRI | PĂRDOR NGA |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+Lista e plotë e komandave të disponueshme për punën me profilin mund të merret duke shtuar çelësin --help:
lxc profile --help
Përshkrimi:
Menaxho profile
Përdorimi:
lxc profile [komandë]
Komandat e Disponueshme:
add Shto profile në instanca
assign Cakto grupe profile në instanca
copy Kopjo profile
create Krijo profile
delete Fshi profile
device Menaxho pajisjet e instancës
edit Redakto konfigurimet e profileve si YAML
get Merr vlera për çelësat e konfiguracionit të profileve
list Lista e profileve
remove Hiqi profile nga instancat
rename Rine emërto profile
set Cakto çelësat e konfigurimit të profileve
show Trego konfigurimet e profileve
unset Hiqi çelësat e konfigurimit të profileveRedaktimi i profilit
Profili i konfiguracionit të paracaktuar default nuk ka konfigurim të kartës rrjedhës për kontejnerin dhe të gjithë kontejnerët e sapokrijuar nuk kanë rrjet, për ta duhen krijuar pajisje të rrjetit lokale (të dedikuara) me një komandë të veçantë, por ne mund të krijojmë në profilin e konfiguracionit një pajisje rrjeti globale që do të ndahen midis të gjithë kontejnerëve që përdorin këtë profil. Në këtë mënyrë, menjëherë pas komandës për krijimin e një kontejneri të ri, ata do të kenë rrjet me akses në internet. Në të njëjtën kohë, nuk ka kufizime, ne gjithmonë mund të krijojmë më vonë një pajisje rrjeti lokale nëse ka nevojë.
Komanda e mëposhtme do të shtojë në profilin e konfiguracionit pajisjen eth0 të tipit nic të lidhur me rrjetin lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0à rëndësishme të theksohet se pasi e shtuam me të vërtetë pajisjen në profilin e konfigurimit, nëse do të kishim caktuar një adresë IP statike në pajisje, të gjitha kontejnerët që do të aplikonin këtë profil do të ndanin të njëjtën adresë IP. Nëse ka nevojë për të krijuar një kontejner me një adresë IP statike të dedikuar, atëherë duhet të krijoni një konfigurim të pajisjes rrjetit në nivelin e kontejnerit (konfigurim lokal) me parametrin e adresës IP, e jo në nivelin e profilit.
Le të kontrollojmë profilin:
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: []Në këtë profil mund të shohim se për të gjitha kontejnerët e sapo krijuar do të krijohen dy pajisje (devices):
eth0â Pajisja e tipitnice lidhur me switch-in (urĂ«n rrjetĂ«sore)lxdbr0rootâ Pajisja e tipitdiskqĂ« pĂ«rdor rezervuarin e ruajtjesssdpool
Krijimi i profileve të reja
PĂ«r tĂ« pĂ«rdorur ato tĂ« krijuara mĂ« parĂ« Storage Pool kontejnerĂ«, do tĂ« krijojmĂ« njĂ« profil konfigurimi ssdroot ku do tĂ« shtojmĂ« pajisjen e tipit disk me pikĂ«n e montimit / (root) qĂ« pĂ«rdor rezervuarin e krijuar mĂ« parĂ« Storage Pool â ssdpool:
lxc profile create ssdroot
lxc profile device add ssdroot root disk path=\/ pool=ssdpoolNĂ« mĂ«nyrĂ« tĂ« ngjashme, krijojmĂ« pajisjen e tipit disk, por nĂ« kĂ«tĂ« rast pĂ«rdor Storage Pool â hddpool:
lxc profile create hddroot
lxc profile device add hddroot root disk path=\/ pool=hddpoolKontrollojmë profilin e konfigurimit:
lxc profile show ssdroot
config: {}
description: ""
devices:
root:
path: \/
pool: ssdpool
type: disk
name: ssdroot
used_by: []lxc profile show hddroot
config: {}
description: ""
devices:
root:
path: \/
pool: hddpool
type: disk
name: hddroot
used_by: []Repository e imazheve
Kontejnerët krijohen nga imazhe që janë distribucione të ndërtuara posaçërisht pa bërthamën e Linux-it. Prandaj, përpara se të niset kontejneri, ai duhet të jetë dislokuar nga ky imazh. Burimi i imazheve është një depo lokale ku imazhet ngarkohen nga depo të jashtme.
Repository të largëta të imazheve
Për default, LXD është konfiguruar për të marrë imazhe nga tre burime të largëta:
- ubuntu: (për imazhe stabile të Ubuntu)
- ubuntu-daily: (për imazhe të përditshme të Ubuntu)
- images: (për një grup distrosh të tjera)
lxc remote list
+-----------------+------------------------------------------+--------+--------+
| NAME | URL | PUBLIC | STATIC |
+-----------------+------------------------------------------+--------+--------+
| images | https://images.linuxcontainers.org | YES | NO |
+-----------------+------------------------------------------+--------+--------+
| local (default) | unix:// | NO | YES |
+-----------------+------------------------------------------+--------+--------+
| ubuntu | https://cloud-images.ubuntu.com/releases | YES | YES |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-daily | https://cloud-images.ubuntu.com/daily | YES | YES |
+-----------------+------------------------------------------+--------+--------+Për shembull, repozitori ubuntu: ka imazhe të mëposhtme:
lxc image -c dasut list ubuntu: | head -n 11
+----------------------------------------------+--------------+----------+------------+
| PĂRSHKRIM | ARKITEKTURA | MASA | LLOJI |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150728) | x86_64 | 153.72MB | KONTAINER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150819) | x86_64 | 152.91MB | KONTAINER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150906) | x86_64 | 154.69MB | KONTAINER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150930) | x86_64 | 153.86MB | KONTAINER |
+----------------------------------------------+--------------+----------+------------+Për të nxjerrë një numër të kufizuar kolonash, përdorëm opsionin -c me parametrat dasut, gjithashtu kufizuam gjatësi e listës me komandën head.
Për të nxjerrë listën e imazheve, është e disponueshme filtrimi. Komanda e mëposhtme do të nxjerrë listën e të gjitha arkitekturave të sistemit operativ :
lxc image -c ldast list images:alpine/3.11
+------------------------------+--------------------------------------+--------------+
| ALIAS | PĂRSHKRIM | ARKITEKTURA |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11 (3 më shumë) | Alpine 3.11 amd64 (20200220_13:00) | x86_64 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/arm64 (1 më shumë) | Alpine 3.11 arm64 (20200220_13:00) | aarch64 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/armhf (1 më shumë) | Alpine 3.11 armhf (20200220_13:00) | armv7l |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/i386 (1 më shumë) | Alpine 3.11 i386 (20200220_13:01) | i686 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/ppc64el (1 më shumë) | Alpine 3.11 ppc64el (20200220_13:00) | ppc64le |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/s390x (1 më shumë) | Alpine 3.11 s390x (20200220_13:00) | s390x |
+------------------------------+--------------------------------------+--------------+Repository lokale të imazheve
PĂ«r tĂ« filluar pĂ«rdorimin e kontejnerit, duhet tĂ« shtoni njĂ« imazh nga depoja globale nĂ« atĂ« lokale. lokal:. Tani depoja lokale Ă«shtĂ« bosh, ashtu si na tregon komanda lxc image list. NĂ«se metoda list nuk specifikon depo, atĂ«herĂ« do tĂ« pĂ«rdoret depoja lokale si parazgjedhje â lokal:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+Menaxhimi i imazheve në depo bëhet përmes metodave të mëposhtme:
Ekipa
Përshkrimi
lxc image alias
Menaxho aliaset e imazheve
lxc image copy
Kopjo imazhe midis serverave
lxc image fshij
Fshi imazhe
lxc image edit
Redakto pronat e imazheve
lxc image export
Eksporto dhe shkarko imazhe
lxc image import
Importo imazhe në magazinën e imazheve
lxc image info
Trego informacion të dobishëm mbi imazhet
lxc image list
Listo imazhet
lxc image refresh
Rifresko imazhet
lxc image trego
Trego pronat e imazhit
Kopjojmë imazhin në depojen lokale nga ajo globale images::
lxc image copy images:alpine/3.11/amd64 local: --alias=alpine3
Imazhi u kopjua me sukses!Të nxjerrim një listë të të gjitha imazheve që janë tani të disponueshme në depojen lokale lokal::
lxc image -c lfdatsu list local:
+---------+--------------+------------------------------------+--------------+
| ALIAS | FINGERPRINT | DESCRIPTION | ARCHITECTURE |
+---------+--------------+------------------------------------+--------------+
| alpine3 | 73a3093d4a5c | Alpine 3.11 amd64 (20200220_13:00) | x86_64 |
+---------+--------------+------------------------------------+--------------+Konfigurimi i LXD
Përveç modit interaktiv, LXD gjithashtu mbështet modin jo-interaktiv të konfigurimit, ku konfigurimi caktohet në formën e një skedari YAML, një format të veçantë që lejon ngritjen e gjithë konfigurimit njëherësh, duke shmangur ekzekutimin e shumë komande interaktive që u diskutuan më sipër në këtë artikull, përfshirë konfigurimin e rrjetit, krijimin e profileve të konfigurimit, etj. Këtu ne nuk do ta shqyrtojmë këtë fushë, mund ta studiosh vetë në .
Komanda interaktive e ardhshme lxc config e cila ne do ta shqyrtojmë, lejon të vendosni konfigurimin. Për shembull, për të siguruar që imazhet e shkarkuara në depo lokale të mos përditësohen automatikisht nga depo të përgjithshme, mund ta aktivizojmë këtë sjellje me komandën e mëposhtme:
lxc config set images.auto_update_cached=falseKrijimi dhe menaxhimi i konteinerëve
Për krijimin e një kontejneri shërben komanda lxc init ku kalohen vlerat depo:imazh dhe më pas identifikuesi i dëshiruar për kontejnerin. Depoja mund të tregohet si lokale. lokal: as well as any global one. If the repository is not specified, the local repository is used by default to search for the image. If the image is specified from a global repository, it will first be downloaded to the local repository and then used to create the container.
Let's execute the following command to create our first container:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddrootLet's break down the command keys we are using here:
alpine3â Specifies the alias for the image which was previously downloaded to the local repository. If an alias was not created for this image, it is always possible to refer to the image by its Fingerprint which is displayed in the table.alpâ Sets the identifier for the container--storageâ This key indicates in which Storage Pool the container will be created--profileâ These keys cascade the configuration from previously created configuration profiles to the container
We start the container, which begins to launch the init system of the distribution:
lxc start alpAlso, you can use the command lxc launch which allows combining the commands lxc init dhe lxc start into one operation.
We check the container's status:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME | STATE | IPV4 | IPV6 | TYPE | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | hddpool |
+------+---------+------------------+------+-----------+--------------+We check the container's configuration:
lxc config show alp
architecture: x86_64
config:
image.architecture: amd64
image.description: Alpine 3.11 amd64 (20200326_13:39)
image.os: Alpine
image.release: "3.11"
image.serial: "20200326_13:39"
image.type: squashfs
volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
volatile.eth0.host_name: vethb1fe71d8
volatile.eth0.hwaddr: 00:16:3e:5f:73:3e
volatile.idmap.base: "0"
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.power: RUNNING
devices:
root:
path: \/
pool: hddpool
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""NĂ« seksionin profiles we can ensure that this container uses two configuration profiles â default dhe hddroot. NĂ« seksionin devices we can find only one device, as the network device was created at the profile level default. PĂ«r tĂ« parĂ« tĂ« gjitha pajisjet e pĂ«rdorura nga kontejneri, duhet tĂ« shtoni çelĂ«sin --expanded:
lxc config show alp --expanded
arkitektura: x86_64
konfigurimi:
image.architecture: amd64
image.description: Alpine 3.11 amd64 (20200326_13:39)
image.os: Alpine
image.release: "3.11"
image.serial: "20200326_13:39"
image.type: squashfs
volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
volatile.eth0.host_name: vethb1fe71d8
volatile.eth0.hwaddr: 00:16:3e:5f:73:3e
volatile.idmap.base: "0"
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.power: RUNNING
pajisjet:
eth0:
emri: eth0
rrjeti: lxdbr0
tipi: nic
rrënjë:
rruga: /
pool: hddpool
tipi: disk
ephemeral: false
profilet:
- default
- hddroot
stateful: false
përshkrimi: ""Vendosja e një adrese IP statike
Nëse përpiqemi të vendosim një adresë IP për pajisjen rrjetë eth0 nëpërmjet komandës. lxc config device set alp të dedikuar për konfigurimin e kontejnerit, ne do të marrim një gabim që do të njoftojë se pajisja nuk ekziston sepse pajisja eth0 e cila përdoret nga kontejneri i përket profilit default:
lxc config device set alp eth0 ipv4.address 10.0.5.5
Gabim: Pajisja nuk ekzistonNatyrisht, mund të vendosim një adresë IP statike për eth0 pajisjen në profil, por ajo do të jetë e njëjtë për të gjithë kontejnerët që do ta përdorin këtë profil. Prandaj, do të shtojmë një pajisje të dedikuar për kontejnerin:
lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5Pastaj duhet të rindezim kontejnerin:
lxc restart alpNëse tani shohim konfigurimin e kontejnerit, nuk na nevojitet të zbatojmë opsionin --expanded për të parë pajisjen rrjetë eth0, pasi e kemi krijuar atë në nivelin e kontejnerit dhe ajo ka mbuluar kaskadë këtë pajisje nga profili default:
lxc config show alp
architecture: x86_64
config:
image.architecture: amd64
image.description: Alpine 3.11 amd64 (20200326_13:39)
image.os: Alpine
image.release: "3.11"
image.serial: "20200326_13:39"
image.type: squashfs
volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
volatile.eth0.host_name: veth2a1dc59d
volatile.eth0.hwaddr: 00:16:3e:0e:e2:71
volatile.idmap.base: "0"
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.power: RUNNING
devices:
eth0:
ipv4.address: 10.0.5.5
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
root:
path: \/
pool: hddpool
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""TĂ« heqim konteinerin
Për të fshirë kontenierin përdoret komanda lxc delete, por përpara se të fshihet konteneri, ai duhet të ndalet me komandën lxc stop:
lxc stop alplxc list
+------+---------+-------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+-------------------+------+-----------+-----------+
| alp | STOPPED | 10.0.5.10 (eth0) | | CONTAINER | 0 |
+------+---------+-------------------+------+-----------+-----------+Pas sigurimit që gjendja e kontenierit është STOPPED, ai mund të fshihet nga Storage Pool:
lxc delete alpQasja në konteiner
Për të ekzekutuar komandat në kontenier, direkt, duke anashkaluar lidhjet rrjet, përdoret komanda lxc exec e cila ekzekuton komandat në kontenier pa nisur shell-in sistemor. Nëse ju nevojitet të ekzekutoni një komandë në shell, duke përdorur modelet e shell-it, si variablat, redirektimet e skedarëve (pipe) etj., atëherë duhet të nisni qartë shell-in dhe të kaloni komandën si argument, për shembull:
lxc exec alp -- \/bin\/sh -c "echo $HOME"Në komandë u përdor simboli i veçantë i mbrojtjes për simbolin e veçantë $ që variabla $HOME të mos interpretohej në makinë pritëse, por të interpretohej vetëm brenda kontenierit.
Po ashtu, është e mundur të nisni një mod të ndërveprimit në shell, dhe pas përfundimit të seancës të përfundoni duke përdorur çelsin CTRL+D:
lxc exec alp -- \/bin\/shMenaxhimi i burimeve të konteinerit
Në LXD mund të menaxhoni burimet e kontenierit me ndihmën e një grupi të veçantë konfigurimi. Lista e plotë e parametrave të konfigurimit të kontenierit mund të gjendet .
Kufizimi i burimeve RAM (Memoria)
Parametri limits.memory kufizon sasinë e RAM që është e disponueshme për kontenerin. Si vlerë jepet një numër dhe një nga .
Le të caktojmë një kufizim për sasinë e RAM për kontenierin prej 256 MB:
lxc config set alp limits.memory 256MBPo ashtu, ekzistojnë parametra të tjerë për kufizimin e memories:
limits.memory.enforcelimits.memory.hugepageslimits.memory.swaplimits.memory.swap.priority
Ekipa lxc config show lejon të shfaqësh të gjithë konfigurimin e konteinerit, përfshirë kufizimin e burimeve që është vendosur:
lxc config show alp
arkitektura: x86_64
konfigurimi:
image.architecture: amd64
image.description: Alpine 3.11 amd64 (20200220_13:00)
image.os: Alpine
image.release: "3.11"
image.serial: "20200220_13:00"
image.type: squashfs
limits.memory: 256MB
volatile.base_image: 73a3093d4a5ce0148fd84b95369b3fbecd19a537ddfd2e2d20caa2eef0e8fd60
volatile.eth0.host_name: veth75b6df07
volatile.eth0.hwaddr: 00:16:3e:a1:e7:46
volatile.idmap.base: "0"
volatile.idmap.current: '[]'
volatile.idmap.next: '[]'
volatile.last_state.idmap: '[]'
volatile.last_state.power: RUNNING
devices: {}
ephemeral: false
profiles:
- default
stateful: false
description: ""Kufizimi i burimeve CPU (Procesori)
Për kufizimin e burimeve të CPU ka disa :
limit.cpuâ lidh konteinerin me njĂ« ose disa bĂ«rthamĂ« tĂ« CPUlimits.cpu.allowanceâ menaxhon ose kuotat e planifikuesit CFS, kur kalon kufiri nĂ« kohĂ«, ose mekanizmin universl tĂ« ndarjes sĂ« burimeve CPU, kur kalon vlera nĂ« pĂ«rqindjelimits.cpu.priorityâ prioriteti i planifikuesit, kur pĂ«r disa instanca qĂ« ndajnĂ« njĂ« grup procesorĂ«sh, caktohet njĂ« pĂ«rqindje e njĂ«jtĂ« procesorĂ«sh
lxc config set alp limits.cpu.allowance 40%lxc config show alp
arkitektura: x86_64
konfigurimi:
image.architecture: amd64
image.description: Alpine 3.11 amd64 (20200220_13:00)
image.os: Alpine
image.release: "3.11"
image.serial: "20200220_13:00"
image.type: squashfs
limits.cpu.allowance: 40%
limits.memory: 256MB
volatile.base_image: 73a3093d4a5ce0148fd84b95369b3fbecd19a537ddfd2e2d20caa2eef0e8fd60
volatile.eth0.host_name: veth75b6df07
volatile.eth0.hwaddr: 00:16:3e:a1:e7:46
volatile.idmap.base: "0"
volatile.idmap.current: '[]'
volatile.idmap.next: '[]'
volatile.last_state.idmap: '[]'
volatile.last_state.power: RUNNING
devices: {}
ephemeral: false
profiles:
- default
stateful: false
description: ""Kufizimi i hapësirës në disk
Përveç kufizimeve si limits.read, limits.write mund të kufizojmë gjithashtu sasinë e hapësirës së diskut që përdor konteneri (punon vetëm me ZFS ose BTRFS):
lxc config device set alp root size=2GBPas vendosjes, në parametrin devices.root.size mund të sigurohemi për kufizimin e vendosur:
lxc config show alp
...
devices:
root:
path: \/
pool: hddpool
size: 2GB
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""Për të parë kuotat e përdorura në disk mund të marrim nga komanda lxc info:
lxc info alp
...
Burimet:
Processes: 5
Përdorimi i diskut:
root: 1.05GB
Përdorimi i CPU:
Përdorimi i CPU (në sekonda): 1
Përdorimi i memories:
Memory (aktual): 5.46MB
Përdorimi i rrjetit:
eth0:
Bytes e marra: 802B
Bytes e dërguara: 1.59kB
Paketa e marra: 4
Paketa e dërguara: 14
lo:
Bytes e marra: 0B
Bytes e dërguara: 0B
Paketa e marra: 0
Paketa e dërguara: 0Megjithëse ne kemi vendosur një kufi për pajisjen rrënjësore të kontejnerit në 2GB, utilitat sistemore si df nuk do ta shohin këtë kufi. Për këtë, do të bëjmë një test të vogël dhe do të kuptojmë se si funksionon.
Do të krijojmë 2 kontejnerë të rinj të njëjtë në të njëjtin Storage Pool (hddpool):
lxc init alpine3 alp1 --storage=hddpool --profile=default --profile=hddroot
lxc init alpine3 alp2 --storage=hddpool --profile=default --profile=hddrootlxc list
+------+---------+------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+------------------+------+-----------+-----------+
| alp1 | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | 0 |
+------+---------+------------------+------+-----------+-----------+
| alp2 | RUNNING | 10.0.5.30 (eth0) | | CONTAINER | 0 |
+------+---------+------------------+------+-----------+-----------+Në një nga kontejnerët do të krijojmë një skedar me madhësi 1GB:
lxc exec alp1 -- dd if=\/dev\/urandom of=file.img bs=1M count=1000Le të sigurohemi që skedari është krijuar:
lxc exec alp1 -- ls -lh
total 1000M
-rw-r--r-- 1 root root 1000.0M Mar 27 10:16 file.imgNëse shohim në kontejnerin e dytë, duke kontrolluar ekzistencën e skedarit në të njëjtin vend, skedari nuk do të jetë atje, gjë që është e pritshme, pasi kontejnerët krijohen në të tyre Vëllimi i Ruajtjes në të njëjtin Storage Pool:
lxc exec alp2 -- ls -lh
total 0Por le të krahasojmë vlerat që jep df në të dy kontejnerët:
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% \/
...Pajisja /dev/loop1 i montuar si ndarje rrënjësor është Storage Pool i cili përdoret nga këta kontejnerë, prandaj ata e ndajnë hapësirën e tij në dy.
Statistika e konsumit të burimeve
Për të parë statistikën e përdorimit të burimeve për kontejnerin, mund të përdorni këtë komandë:
lxc info alp
Name: alp
Location: none
Remote: unix:\/\/
Architecture: x86_64
Created: 2020\/04\/08 18:05 UTC
Status: Running
Type: container
Profiles: default, hddroot
Pid: 19219
Ips:
eth0: inet 10.0.5.5 veth2a1dc59d
eth0: inet6 fe80::216:3eff:fe0e:e271 veth2a1dc59d
lo: inet 127.0.0.1
lo: inet6 ::1
Resources:
Processes: 5
Disk usage:
root: 495.62kB
CPU usage:
CPU usage (in seconds): 1
Memory usage:
Memory (current): 4.79MB
Network usage:
eth0:
Bytes received: 730B
Bytes sent: 1.59kB
Packets received: 3
Packets sent: 14
lo:
Bytes received: 0B
Bytes sent: 0B
Packets received: 0
Packets sent: 0Puna me snapshot-et
Në LXD ka mundësi për të krijuar snapshot-e dhe për të rikthyer nga ato gjendjen e kontejnerit.
Për të krijuar një snapshot, ekzekutoni komandën e mëposhtme:
lxc snapshot alp snapshot1Komanda lxc snapshot nuk ka një opsion list, prandaj, për të parë listën e snapshot-eve, duhet të përdorni komandën që tregon informacion të përgjithshëm mbi kontejnerin:
lxc info alp
...
...
Snapshots:
snapshot1 (e bërë më 2020/04/08 18:18 UTC) (pa status)Rivendosni kontejnerin nga snapshot me komandën lxc restore duke specifikuar kontejnerin për të cilin do të kryhet rivendosja dhe pseudonimin e snapshot-it:
lxc restore alp snapshot1Komanda e mëposhtme shërben për të fshirë snapshot-in. Vëreni se sintaksa e komandës nuk është si të gjitha të tjerat, këtu duhet të përcaktoni një slash të drejtpërdrejtë pas emrit të kontejnerit. Në rast se slashi nuk poshtërohet, komanda për fshirjen e snapshot-it interpretohet si një komandë për fshirjen e kontejnerit!
lxc delete alp/snapshot1NĂ« shembullin e mĂ«sipĂ«rm shqyrtuam tĂ« ashtuquajturat snapshot-e pa status. NĂ« LXD ka edhe njĂ« lloj tjetĂ«r snapshot-i â stateful, nĂ« tĂ« cilat ruhet gjendja e tanishme e tĂ« gjitha proceseve nĂ« kontejner. Me snapshotĂ«t stateful lidhen njĂ« sĂ«rĂ« funksionesh interesante dhe tĂ« dobishme.
ĂfarĂ« tjetĂ«r?
- Për zhvilluesit e Python është në dispozicion moduli i cili ofron API për LXD
UPDATE 10.04.2020 15:00: Shtova navigimin
Burimi: habr.com
