
LXD â Ă«shtĂ« njĂ« menaxher i sistemit tĂ« konteinerĂ«ve tĂ« brezit tĂ« ardhshĂ«m, thotĂ« . Ai ofron njĂ« ndĂ«rfaqe pĂ«rdoruesi qĂ« i ngjan makinave virtuale, por nĂ« vend tĂ« kĂ«saj pĂ«rdor konteinerĂ« Linux.
Nukleusi LXD â Ă«shtĂ« njĂ« demon privilegjuar (shĂ«rbim i nisur me tĂ« drejtat root), i cili ofron njĂ« API REST pĂ«rmes njĂ« soketi unix lokal, si dhe pĂ«rmes rrjetit, nĂ«se konfigurimi pĂ«rkatĂ«s Ă«shtĂ« i instaluar. KlientĂ«t, si vegla e komandĂ«s e ofruar me LXD, dĂ«rgojnĂ« kĂ«rkesa pĂ«rmes kĂ«tij API REST. Kjo do tĂ« thotĂ« se pavarĂ«sisht nĂ«se po i drejtoheni hostit lokal ose njĂ« tĂ« largĂ«t, gjithçka funksionon njĂ«soj.
Në këtë artikull nuk do të ndalemi në mënyrë të detajuar mbi konceptet e LXD, dhe nuk do të shqyrtojmë të gjitha mundësitë e disponueshme të shpjeguara në dokumentacion, përfshirë implementimin e fundit në versionet e fundit të LXD me mbështetje për makinat virtuale QEMU paralelisht me kontejnerët. Në vend të kësaj, do të mësojmë vetëm bazat e menaxhimit të kontejnerëve - do të konfigurojmë pulat e ruajtjes, rrjetin, do të nisnim një kontejner, do të aplikojmë kufizime të burimeve dhe gjithashtu do të shqyrtojmë se si të përdorim snapshot-et, në mënyrë që të keni një kuptim të përgjithshëm mbi LXD dhe të përdorni kontejnerët në Linux.
Për informacion të plotë, duhet të referoheni në burimin zyrtar:
Navigimi
Instalimi i LXD
Instalimi i LXD në distribucionet Ubuntu
Në distribucionin Ubuntu 19.10, paketa lxd ka përkthim në :
apt search lxd
lxd/eoan 1:0.7 all
Paketa transicionale - lxd -> snap (lxd)Kjo do të thotë se do të instalohen menjëherë dy paketa, një sistemik dhe një tjetër si paketë snap. Instalimi i dy paketimeve në sistem mund të krijojë një problem të caktuar, ku paketa sistemike mund të bëhet jetim, nëse fshihet paketa snap nga menaxheri i paketimeve snap.
Gjej paketën lxd në repositorin snap me komandën e mëposhtme:
snap gjej lxd
Emri Version Përmbledhje
lxd 3.21 Menaxher i kontejnerëve dhe API
lxd-demo-server 0+git.6d54658 Sesionet e demonstrimit të softuerit në internet duke përdorur LXD
nova ocata Shërbimi i Llogaritjes OpenStack (nova)
nova-hypervisor ocata Shërbimi i Llogaritjes OpenStack - Hypervisor KVM (nova)
distrobuilder 1.0 Ndërtues i imazheve për LXC dhe LXD
fabrica 0.1 Ndërtoni snaps duke drejtuar thjesht një formular në...
satellite 0.1.2 Platformë e avancuar të inteligjencës me burim të hapurDuke ekzekutuar komandën listë mund të sigurohemi që paketa lxd ende nuk është instaluar:
snap lista
Emri Version Rev Ndjekja Botuesi Shënime
core 16-2.43.3 8689 stabile canonicalâ coreMegjithĂ«se LXD Ă«shtĂ« njĂ« paketĂ« snap, instaluar duhet pĂ«rmes paketĂ«s sistemike 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 lxdTë sigurohemi që paketa është instaluar si paketë snap:
snap lista
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Ă« distribucionet Arch Linux
Për të instaluar paketën LXD në sistem, duhet të ekzekutoni komandat e mëposhtme, e para refreshon listën e paketimeve në sistem të disponueshme në repository, e dyta instalon paketën:
sudo pacman -Syyu && sudo pacman -S lxdPas instalimit të paketës, për menaxhimin e LXD nga përdorues të zakonshëm, duhet ta shtoni në grupin sistemik lxd:
sudo usermod -a -G lxd user1Të sigurohemi që 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 është i dukshëm në listë, atëherë duhet të aktivizoni sesionin e përdoruesit përsëri. Për këtë, duhen dalë dhe të futen sërish në sistem me të njëjtin përdorues.
Aktivizojmë në systemd ngarkimin e shërbimit LXD në fillim të sistemit:
sudo systemctl enable lxdNisim shërbimin:
sudo systemctl start lxdKontrollojmë statusin e shërbimit:
sudo systemctl status lxdStorage i LXD
Para fillimit të inicializimit, na nevojitet të kuptojmë se si është strukturuar logjikisht ruajtja në LXD.
Ruajtja (Storage) nga njĂ« ose mĂ« shumĂ« Storage Pool qĂ« pĂ«rdor njĂ« nga sistemet e skedarĂ«ve tĂ« mbĂ«shtetur si ZFS, BTRFS, LVM ose drejtoritĂ« e zakonshme. Ădo Storage Pool nĂ« pjesĂ« (Storage Volume) qĂ« pĂ«rmbajnĂ« imazhe, kontejnerĂ« ose tĂ« dhĂ«na pĂ«r qĂ«llime tĂ« tjera.
- Imazhet janë distribucione të përgatitura posaçërisht pa bërthamë Linux dhe të disponueshme nga burime të jashtme
- Kontejnerët janë distribucione të shtrira nga imazhet, të gatshëm për përdorim
- Snapshotet janë pamje të gjendjes së kontejnerëve në të cilat mund të ktheheni

Për menaxhimin e ruajtjes në LXD përdoret komandë lxc storage ndihmën për të cilën mund të merrni duke specifikuar çelësin - lxc storage --help
Ekipi i ardhshëm nxjerr në ekran një listë të gjitha Storage Pool në depozitën LXD:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| EMRI | PĂRSHKRIMI | DRIVE | BURIMI | PĂRDORUR NGA |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 2 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 4 |
+---------+-------------+--------+--------------------------------+---------+Për të parë listën e gjitha Storage Volume në Storage Pool shërben komanda lxc storage volume list:
lxc storage volume list hddpool
+-------+----------------------------------+-------------+---------+
| LLOJI | EMRI | PĂRSHKRIMI | PĂRDORUR NGA |
+-------+----------------------------------+-------------+---------+
| imazh | ebd565585223487526ddb3607f515... | | 1 |
+-------+----------------------------------+-------------+---------+lxc storage volume list ssdpool
+-----------+----------------------------------+-------------+---------+
| LLOJI | EMRI | PĂRSHKRIMI | PĂRDORUR NGA |
+-----------+----------------------------------+-------------+---------+
| kontejner | alp3 | | 1 |
+-----------+----------------------------------+-------------+---------+
| kontejner | jupyter | | 1 |
+-----------+----------------------------------+-------------+---------+
| imazh | ebd565585223487526ddb3607f515... | | 1 |
+-----------+----------------------------------+-------------+---------+Gjithashtu, nëse për Storage Pool kur krijohet, u zgjodh sistemi i skedarëve BTRFS, atëherë merrni listën Storage Volume ose subvolumes në interpretimin e BTRFS mund të përdoret me ndihmën e këtij mjeti:
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/alp3Inicializimi i LXD
Para krijimit dhe përdorimit të kontejnerëve është e nevojshme të kryhet një inicializim i përgjithshëm i LXD, i cili krijon dhe konfiguron rrjetin si dhe magazinën. Kjo mund të realizohet manualisht me komandat standarde të klientit që janë të disponueshme në listën e thirrjes së komandës lxc --help ose me anë të asistentit të inicializimit lxd init duke iu përgjigjur disa pyetjeve.
Zgjedhja e sistemit të skedarëve për Storage Pool
Gjatë inicializimit, LXD shton disa pyetje, mes të cilave do të jetë përcaktimi i llojit të sistemit të skedarëve për defoltin Storage Pool. Për të, si defualt, zgjidhet sistemi i skedarëve BTRFS. Ndryshimi në një sistem tjetër të skedarëve pas krijimit nuk do të jetë i mundur. Për të zgjedhur sistemin e skedarëve propozohet :
Veçoria
Directory
Btrfs
LVM
ZFS
CEPH
Magazinë e optimizuar për imazhe
no
yes
yes
yes
yes
Krijim optimal i instancës
no
yes
yes
yes
yes
Krijimi i optimizuar i snapshot-eve
no
yes
yes
yes
yes
Transferi i optimizuar i imazheve
no
yes
no
yes
yes
Transferi i optimizuar i instance-ve
no
yes
no
yes
yes
Kopje në shkruaj
no
yes
yes
yes
yes
I bazuar në bllok
no
no
yes
no
yes
Kloni menjëherë
no
yes
yes
yes
yes
Drejtuesi i ruajtjes i përdorshëm brenda një enë
yes
yes
no
no
no
Rivendosni nga snapshot-e më të vjetra (jo më të fundit)
yes
yes
yes
no
yes
Kuotat e ruajtjes
po(*)
yes
yes
yes
no
Inicializimi i rrjetit dhe Storage Pool me ndihmën e asistentit
Komanda tjetër që do të shqyrtojmë, ofron konfigurimin e komponentëve kryesorë të LXD me përgjigje në pyetje të thjeshta përmes asistentit të inicializimit.
Ekzekutoni komandën lxc init dhe jepni përgjigje në pyetje pas shenjës së dy pikave siç tregohet në shembullin më poshtë ose ndryshojini sipas kushteve tuaja:
lxd init
A dëshironi të përdorni klasterizimin LXD? (po/jo) [default=jo]:
A dëshironi të konfiguroni një pool të ri ruajtjeje? (po/jo) [default=po]:
Emri i pool-it të ri të ruajtjes [default=default]: ssdpool
Emri i pasqyrës së ruajtjes që do të përdoret (lvm, btrfs, dir) [default=btrfs]:
A dëshironi të krijoni një pool të ri BTRFS? (po/jo) [default=po]:
A dëshironi të përdorni një pajisje blloku ekzistuese? (po/jo) [default=jo]:
Të dhënat në GB të pajisjes së re të ciklit (1GB minimum) [default=15GB]: 10GB
A dëshironi të lidhni me një server MAAS? (po/jo) [default=jo]:
A dëshironi të krijoni një urë lokale të re rrjeti? (po/jo) [default=po]:
Si duhet të quhet ura e re? [default=lxdbr0]:
Cila adresĂ« IPv4 duhet tĂ« pĂ«rdoret? (nĂ«nshkrimi CIDR, âautoâ ose ânoneâ) [default=auto]: 10.0.5.1/24
A dëshironi që LXD të NAT të trafikut IPv4 në urën tuaj? [default=po]:
Cila adresĂ« IPv6 duhet tĂ« pĂ«rdoret? (nĂ«nshkrimi CIDR, âautoâ ose ânoneâ) [default=auto]: none
A dëshironi që LXD të jetë i disponueshëm mbi rrjet? (po/jo) [default=jo]:
A dëshironi që imazhet e ruajtura të prodhohen automatikisht? (po/jo) [default=po] jo
A dëshironi që të printohet një YAML "lxd init" preseed? (po/jo) [default=jo]: Krijimi i një Storage Pool shtesë
Në hapin e kaluar krijuam Storage Pool të cilit i dhamë emrin ssdpool dhe skedari i tij u vendos në sistemin tim në adresën /var/lib/lxd/disks/ssdpool.img. Kjo adresë e sistemit të skedarëve përputhet me disqin fizik SSD në PC-në time.
Si hap i ardhshëm, për të zgjeruar kuptimin e rolit që luan Storage Pool në ruajtje, do të krijojmë një të dytë Storage Pool i cili do të vendoset fizikisht në një lloj tjetër disku, në HDD. Problemi është se LXD nuk lejon krijimin Storage Pool jashtët adresës /var/lib/lxd/disks/ edhe lidhjet simbolike nuk do të funksionojnë, . Për t'i shpëtuar këtij kufizimi, mund ta bëjmë gjatë inicializimit/formatimit Storage Pool duke e caktuar vlerën si një njësie blloku në vend të një rruge për skedarin loopback duke e specifikuar këtë në çelësin source.
Pra, para se të krijojmë Storage Pool duhet të përcaktojmë skedarin loopback ose një ndarje ekzistuese në sistemin tuaj të skedarëve që ai do të përdorë. Për këtë, do të krijojmë dhe do të përdorim një skedar që do ta kufizojmë në madhësinë 10GB:
dd if=/dev/zero of=/mnt/work/lxd/hddpool.img bs=1MB count=10000
10000+0 regjistra në
10000+0 regjistra jashtë
10000000000 bytes (10 GB, 9,3 GiB) janë kopjuar, 38,4414 s, 260 MB/sDo të lidhim skedarin loopback në një njësinë e lirë loopback:
sudo losetup --find --show /mnt/work/lxd/hddpool.img
/dev/loop1Falë çelësit --show në përmbushjen e komandës, kthehet në ekran emri i pajisjes në të cilën është lidhur skedari ynë loopback. Nëse është e nevojshme, mund të shfaqim në ekran një listë të të gjitha pajisjeve të zëna të këtij lloji, për të siguruar saktësinë e veprimeve tona:
losetup -l
NAME 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ë zbulojmë 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 që përputhet me të parin standard Storage Pool.
Komanda në vazhdim krijon një të re Storage Pool në LXD, bazuar 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/loop1Le të shfaqim listën e gjithë Storage Pool në ekran:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 0 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 0 |
+---------+-------------+--------+--------------------------------+---------+Zgjerimi i madhësisë së Storage Pool
Pasi është krijuar Storage Pool, nëse është e nevojshme, mund të zgjerohet. Për Storage Pool për sistemin e skedarëve BTRFS, ekzekutoni 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/hddpoolAutovënia e skedarit loopback në slotin e pajisjes loopback
Kemi një problem të vogël, gjatë rinisjes së sistemit të hostit, skedari /mnt/work/lxd/hddpool.img "do të nxjerrë" nga pajisja /dev/loop1 dhe shërbimi LXD do të ngadalësohet gjatë ngarkesës pasi nuk do ta shohë atë në këtë pajisje. Për të zgjidhur këtë problem, duhet të krijojmë një shërbim sistemor që do ta vendosë këtë skedar në pajisje /dev/loop1 gjatë ngarkesës së sistemit të hostit.
Të krijojmë unit një skedë të tipit service 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 lidhjen simbolike /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service â /etc/systemd/system/lxd-hddpool.service.Pas ribiljes sĂ« sistemit tĂ« hostit, kontrollojmĂ« statusin e shĂ«rbimit:
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)
apr 08 03:43:52 manjaro systemd[1]: Starting Losetup LXD Storage Pool (hddpool)...
apr 08 03:43:53 manjaro systemd[1]: Finished Losetup LXD Storage Pool (hddpool).Nga dalja, mund të sigurojmë që gjendja e shërbimit është active, pavarësisht se ekzekutimi i skriptit tonë nga një komandë përfundoi, kjo na lejoj edhe opsioni RemainAfterExit=true.
Siguria. Privilegjet e kontejnerëve
Duke qenë se të gjitha proceset e kontejnerit efektivisht ekzekutohen në izolim në sistemin host duke përdorur bërthamën e tij, për mbrojtje shtesë ndaj aksesit të proceseve të kontejnerit në sistemin host, LXD ofron privilegje për proceset, ku:
KontejnerĂ« me privilegje â janĂ« kontejnerĂ« ku proceset me UID dhe GID i pĂ«rkasin tĂ« njĂ«jtit pronar si nĂ« sistemin host. PĂ«r shembull, njĂ« proces i nisur nĂ« njĂ« kontejner me UID tĂ« barabartĂ« me 0 ka tĂ« njĂ«jtin akses si njĂ« proces i sistemit host me UID tĂ« barabartĂ« me 0. NĂ« fjalĂ« tĂ« tjera, pĂ«rdoruesi root nĂ« kontejner ka tĂ« gjitha tĂ« drejtat jo vetĂ«m nĂ« kontejner, por edhe nĂ« sistemin host nĂ«se mund tĂ« dalĂ« pĂ«rtej hapĂ«sirĂ«s izoluese tĂ« emrave tĂ« kontejnerit.
KontejnerĂ« tĂ« papriviligjuar â janĂ« kontejnerĂ« ku proceset i pĂ«rkasin pronarit UID dhe GID me numra nga 0 deri nĂ« 65535, por pĂ«r sistemin host pronari maskohet pĂ«rmes bitit tĂ« shtuar SubUID dhe SubGID pĂ«rkatĂ«sisht. PĂ«r shembull, njĂ« pĂ«rdorues me UID=0 nĂ« kontejner do tĂ« vihet re nĂ« sistemin host si
SubUID + UID. Kjo mbron sistemin host, pasi nëse ndonjë proces në kontejner mund të dalë nga hapësira izoluese e tij, ai mund të ndërveprojë me sistemin host vetëm si një proces me UID/GID shumë të lartë dhe të panjohur.
Sipas parazgjedhjes, kontejnerët e sapo krijuar kanë statusin e papriviligjuar dhe prandaj ne duhet të përcaktojmë SubUID dhe SubGID.
Do të krijojmë dy skedarë konfigurimi në të cilët do të vendosim 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ë zbatuar ndryshimet, shërbimi LXD duhet të rindez:
sudo systemctl restart lxdKrijimi i një switch virtual të rrjetit
Tani që kemi inicializuar rrjetin me ndihmën e ndihmësit të inicializimit lxd init dhe kemi krijuar një pajisje rrjeti lxdbr0, në këtë seksion do të njohim rrjetin në LXD dhe se si të krijojmë një komutator virtual (urë rrjeti, bridge) duke përdorur komandën e klientit.
Schema e mëposhtme tregon se si komutatori (urë rrjeti, bridge) lidh hostin dhe kontejnerët në një rrjet:

Kontejnerët mund të ndërveprojnë përmes rrjetit me kontejnerë të tjerë ose me hostin ku këta konteinerë shërbehen. Për këtë, është e nevojshme të lidhim kartat virtuale të rrjetit të konteinerëve me komutatorin virtual. Në fillim do të krijojmë komutatorin, ndërsa interface-të rrjetore të konteinerëve do të lidhën në kapitujt e ardhshëm, pas krijimit të vetë konteinerit.
Komanda e mëposhtme krijon një komutator me një nënrrjetë 10.0.5.0/24 dhe adresën IPv4 10.0.5.1/24, si dhe aktivizon ipv4.nat për të siguruar 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=nonePo kontrollojmë listën e pajisjeve rrjetësore të disponueshme LXD:
lxc network list
+--------+----------+---------+-------------+---------+
| EMRI | LLOJI | MENAXHOHE | PĂRSHKRIMI | PĂRDORUR NGA |
+--------+----------+---------+-------------+---------+
| eno1 | fizik | JO | | 0 |
+--------+----------+---------+-------------+---------+
| lxdbr0 | urë | PO | | 0 |
+--------+----------+---------+-------------+---------+Gjithashtu, mund tĂ« siguroheni pĂ«r krijimin e pajisjes rrjetĂ«sore duke pĂ«rdorur mjetin standard tĂ« distribucionit 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 0Profili i konfigurimit
Ădo kontejner nĂ« LXD ka konfigurimin e tij tĂ« veçantĂ« dhe mund ta zgjasĂ« atĂ« me konfigurime qĂ« shpallen globalisht, tĂ« cilat quhen profile konfigurimi. Aplikimi i profileve tĂ« konfigurimit nĂ« njĂ« kontejner ka njĂ« model kaskad, shembulli i mĂ«poshtĂ«m e demonstruar kĂ«tĂ«:

Në këtë shembull, në sistemin LXD janë krijuar tre profile: default, hddpool dhe hostfs. Të tri profilat janë aplikuar në kontejnerin që ka konfigurimin lokal (zona gri). Profili default ka një pajisje root e cila ka parametër pool është ssdpool, por fal modelit kaskad të aplikimit të konfiguracionit ne mund të aplikojmë një profil për kontejnerin hddpool e cila ka parametër pool do të mbulojë këtë të njëjtin parametër nga profili default dhe kontejneri do të marrë konfigurimin e pajisjes root me parametrin pool të barabartë hddpool, ndërsa profili hostfs thjesht shton një pajisje të re në kontejner.
Për të parë listën e profileve të konfiguracionit të disponueshme, shërben komandën e mëposhtme:
lxc profile list
+---------+---------+
| EMRI | PĂRDORET NGA |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+Lista e plotë e komandave të disponueshme për punën me profilin mund të marrëhet duke shtuar çelësin --help:
lxc profile --help
Përshkrimi:
Menaxho profilet
Përdorimi:
lxc profile [komandë]
Komandat e Disponueshme:
add Shto profile në instanca
assign Cakto grupe profilesh në instanca
copy Kopjo profilet
create Krijo profile
delete Fshij profile
device Menaxho pajisjet e instancave
edit Redakto konfigurimet e profileve si YAML
get Merr vlerat për çelësat e konfigurimit të profilit
list Listo profilet
remove Hiq profilet nga instancat
rename Riemëro profilet
set Cakto çelësat e konfigurimit të profilit
show Trego konfigurimet e profileve
unset Ăâvendos çelĂ«sat e konfigurimit tĂ« profilitRedaktimi i profilit
Profili i konfigurimit të paracaktuar default nuk ka një konfigurim të kartës rrjetit për kontejnerin dhe të gjithë kontejnerët e rinj që krijohen s'kanë rrjet; për to është e nevojshme të krijohen pajisje të dedikuara rrjeti me një komandë të veçantë, por ne mund të krijojmë në profilin e konfigurimit një pajisje rrjeti globale që do të ndahet midis të gjithë konteinerëve që përdorin këtë profil. Kështu, menjëherë pas komandës për krijimin e një kontejneri të ri, ata do të kenë rrjet me qasje në rrjet. Sidoqoftë, nuk ka kufizime; gjithmonë mund të krijojmë më vonë një pajisje rrjeti lokale nëse ka nevojë.
Komanda e mëposhtme do të shtojë një pajisje në profilin e konfigurimit eth0 llojin e nic të lidhur me rrjetin lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0ĂshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se, pasi e kemi shtuar nĂ« tĂ« vĂ«rtetĂ« njĂ« pajisje nĂ« profilin e konfigurimit, nĂ«se do tĂ« kishim caktuar njĂ« adresĂ« IP statike nĂ« pajisje, tĂ« gjitha kontejnerĂ«t qĂ« do tĂ« pĂ«rdorin kĂ«tĂ« profil do tĂ« ndajnĂ« tĂ« njĂ«jtĂ«n adresĂ« IP. NĂ«se ka nevojĂ« pĂ«r tĂ« krijuar njĂ« konteiner me njĂ« adresĂ« IP statike tĂ« dedikuar, duhet tĂ« krijohet njĂ« konfigurim tĂ« pajisjes nĂ« nivelin e konteinerit (konfigurim lokal) me parametrin e adresĂ«s IP, e jo nĂ« nivelin e profilit.
Le të kontrollojmë profilin:
lxc profile show default
config: {}
description: Profil i parazgjedhur LXD
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ë gjithë kontejnerët e rinj që do të krijohen do të krijohen dy pajisje (devices):
eth0â Pajisja e tipitnice lidhur me njĂ« switch (urĂ« rrjeti)lxdbr0rootâ Pajisja e tipitdiske cila pĂ«rdor njĂ« rezervuar ruajtjejessdpool
Krijimi i profileve të reja
PĂ«r t'u pĂ«rdorur nga kontejnerĂ«t e krijuar mĂ« parĂ«, do tĂ« krijojmĂ« njĂ« profil konfigurimi Storage Pool ssdroot nĂ« tĂ« cilin do tĂ« shtojmĂ« njĂ« pajisje tĂ« tipit me pikĂ«n e montimit disk (root) qĂ« pĂ«rdor rezervuarin e krijuar mĂ« parĂ« / lxc profile create ssdroot lxc profile device add ssdroot root disk path=/ pool=ssdpool Storage Pool â ssdpool:
nĂ« mĂ«nyrĂ« tĂ« ngjashme, krijojmĂ« njĂ« pajisje tĂ« tipitPo njĂ«jtĂ«n mĂ«nyrĂ«, krijojmĂ« njĂ« pajisje tĂ« tipit disk, por kĂ«tĂ« rast pĂ«rdorĂ«se Storage Pool â hddpool:
lxc profile create hddroot
lxc profile device add hddroot root disk path=/ pool=hddpoolKontrollojmë profilin e konfigurimeve:
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: []Repozitori i imazheve
Kontejnerët krijohen nga imazhe, të cilat janë distribucione të veçanta të ndërtuara që nuk kanë një bërthamë Linux. Prandaj, para se të nisni një kontejner, ai duhet të jetë vendosur nga ky imazh. Burimi i imazheve është një depot lokale, ku imazhet ngarkohen nga depo të jashtme.
Repozitorët e largët të imazheve
Sipas parazgjedhjes, LXD është i vendosur për të marrë imazhe nga tre burime të largëta:
- ubuntu: (për imazhe të qëndrueshme Ubuntu)
- ubuntu-daily: (për imazhe të përditshme Ubuntu)
- images: (për një sërë distros tjetër)
lxc remote list
+-----------------+------------------------------------------+--------+--------+
| EMRI | URL | PUBLIK | STATIC |
+-----------------+------------------------------------------+--------+--------+
| images | https://images.linuxcontainers.org | PO | JO |
+-----------------+------------------------------------------+--------+--------+
| local (default) | unix:// | JO | PO |
+-----------------+------------------------------------------+--------+--------+
| ubuntu | https://cloud-images.ubuntu.com/releases | PO | PO |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-daily | https://cloud-images.ubuntu.com/daily | PO | PO |
+-----------------+------------------------------------------+--------+--------+Për shembull, repository ubuntu: ka këta imazhe:
lxc image -c dasut list ubuntu: | head -n 11
+----------------------------------------------+--------------+----------+------------+
| DESCRIPTION | ARCHITECTURE | SIZE | TYPE |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150728) | x86_64 | 153.72MB | CONTAINER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150819) | x86_64 | 152.91MB | CONTAINER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150906) | x86_64 | 154.69MB | CONTAINER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150930) | x86_64 | 153.86MB | CONTAINER |
+----------------------------------------------+--------------+----------+------------+Për të shfaqur një numër të kufizuar kolonash, kemi përdorur opsionin -c me parametrat dasut, dhe gjithashtu kufizuam gjatësi e listës me komandën head.
Për listimin e imazheve, është në dispozicion filtrimi. Komanda e mëposhtme do të shfaqë listën e të gjitha arkitekturave të disponueshme të distribucionit :
lxc image -c ldast list images:alpine/3.11
+------------------------------+--------------------------------------+--------------+
| ALIAS | DESCRIPTION | ARCHITECTURE |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11 (3 more) | Alpine 3.11 amd64 (20200220_13:00) | x86_64 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/arm64 (1 more) | Alpine 3.11 arm64 (20200220_13:00) | aarch64 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/armhf (1 more) | Alpine 3.11 armhf (20200220_13:00) | armv7l |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/i386 (1 more) | Alpine 3.11 i386 (20200220_13:01) | i686 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/ppc64el (1 more) | Alpine 3.11 ppc64el (20200220_13:00) | ppc64le |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/s390x (1 more) | Alpine 3.11 s390x (20200220_13:00) | s390x |
+------------------------------+--------------------------------------+--------------+Repozitori lokal i imazheve
Për të filluar shfrytëzimin e konteinerit, është e nevojshme të shtoni imazhin nga depoja globale në atë lokale. local:. Tani depoja lokale është bosh, shkalla e të cilës do t'na tregojë komandai lxc image list. Nëse metoda listë nuk specifikon depo, atëherë do të përdoret depoja lokale si parazgjedhje. local:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+Menaxhimi i imazheve në depo bëhet me metodat e mëposhtme:
Ekipa
Përshkrimi
lxc image alias
Menaxho aliaset e imazheve
lxc image copy
Kopjo imazhe midis serverëve
lxc image fshi
Fshi imazhet
lxc image edito
Redakto pronësitë e imazhit
lxc image eksporto
Eksporto dhe shkarkoni imazhet
lxc image import
Importo imazhe në depo
lxc image info
Trego informacion të dobishëm rreth imazheve
lxc image listë
Listo imazhet
lxc image rinovim
Rifresko imazhet
lxc image trego
Trego pronësitë e imazhit
Po kopjojmë imazhin në depo lokale nga e globala images::
lxc image copy images:alpine/3.11/amd64 local: --alias=alpine3
Imazhi u kopjua me sukses!Do të nxjerrim listën e të gjitha imazheve të disponueshme tani në depot lokale local::
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 mbështet gjithashtu një mod të pa-interaktiv për vendosjen e konfiguracionit, që është kur konfiguracioni përcaktohet në formën e një skedari YAML, një format i veçantë që lejon vendosjen e tërë konfiguracionit njëherësh, duke përjashtuar ekzekutimin e shumë komandave interaktive që janë trajtuar më lart në këtë artikull, duke përfshirë konfigurimin e rrjetit, krijimin e profileve të konfigurimit etj. Ne nuk do të shqyrtojmë këtë fushë, ju mund ta njihni vetë këtë. .
Komanda interaktive e ardhshme lxc config që do të shqyrtojmë, lejon vendosjen e konfiguracionit. Për shembull, në mënyrë që imazhet e ngarkuara në repo lokale të mos përditësohen automatikisht nga repo globale, ne mund ta aktivizojmë këtë sjellje me komandën e mëposhtme:
lxc config set images.auto_update_cached=falseKrijimi dhe menaxhimi i kontejnerëve
Për krijimin e një kontejneri shërben komanda lxc init e cila merr vlera repo:imagë dhe më pas identifikuesi i dëshiruar për kontejnerin. Repo mund të përcaktohet si lokal local: ashtu si çdo depo globale. Nëse depoja nuk është e specifikuar, për të kërkuar imazhin përdoret depoja lokale si parazgjedhje. Nëse imazhi tregohet nga një depo globale, ai do të ngarkohet më parë në depo lokale dhe më pas do të përdoret për të krijuar kontejnerin.
Të ekzekutojmë komandën në vijim për të krijuar kontejnerin tonë të parë:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddrootTë shqyrtojmë hap pas hapi çelësat e komandës që po përdorim këtu:
alpine3â Tregohet alias (pseudonimi) pĂ«r imazhin qĂ« Ă«shtĂ« ngarkuar mĂ« parĂ« nĂ« depo lokale. NĂ«se aliasi nuk Ă«shtĂ« krijuar pĂ«r kĂ«tĂ« imazh, gjithmonĂ« mund tĂ« referoni imazhin sipas Gisht qĂ« shfaqet nĂ« tabelĂ«.alpâ PĂ«rcaktohet identifikuesi pĂ«r kontejnerin--storageâ Ky çelĂ«s tregon nĂ« cilin Storage Pool do tĂ« krijohet kontejneri--profileâ KĂ«ta çelĂ«sa aplikojnĂ« kaskadĂ« konfigurimin nĂ« kontejner nga profilet e konfigurimit tĂ« krijuara mĂ« parĂ«
Nisim kontejnerin, i cili fillon të aktivizojë sistemin init të distribuimit:
lxc start alpPo ashtu, mund të përdorni komandën lxc launch e cila lejon bashkimin e komandave lxc init dhe lxc start në një operacion të vetëm.
Kontrollojmë gjendjen e kontejnerit:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| EMRI | GJENDJA | IPV4 | IPV6 | Lloji | PULA E RUAJTJESE |
+------+---------+------------------+------+-----------+--------------+
| alp | MUNDIM | 10.0.5.46 (eth0) | | KONTEJNER | hddpool |
+------+---------+------------------+------+-----------+--------------+Po kontrollojmë konfigurimin e kontejnerit:
lxc config show alp
arkitekturë: 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: MUNDIM
devices:
root:
path: /
pool: hddpool
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""NĂ« seksionin profillet mund tĂ« sigurohemi qĂ« ky kontejner pĂ«rdor dy profile konfigurimi â default dhe hddroot. NĂ« seksionin pajisjet mund tĂ« zbulojmĂ« vetĂ«m njĂ« pajisje, pasi pajisja rrjetore u krijua nĂ« nivelin e profilit default. PĂ«r tĂ« parĂ« tĂ« gjitha pajisjet e pĂ«rdorura nga kontejneri, nevojitet tĂ« shtoni çelĂ«sin --expanded:
lxc config show alp --expanded
arkitektura: 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:
eth0:
emri: eth0
rrjeti: lxdbr0
lloji: nic
root:
rruga: /
pool: hddpool
lloji: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""Instalimi i adresës IP statike
Nëse përpiqemi të vendosim një adresë IP për pajisjen rrjetore eth0 me komandën lxc config device set alp të destinuar për konfigurimin e kontejnerit, do të marrim një gabim që njofton se pajisja nuk ekziston sepse pajisja eth0 e përdorur nga kontejneri i përket profilit default:
lxc config device set alp eth0 ipv4.address 10.0.5.5
Gabim: Pajisja nuk ekzistonNe mund të vendosim natyrisht një adresë IP statike për eth0 dispositivin në profil, por ajo do të jetë e njëjtë për të gjithë kontejnerët që do të 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.5Më pas duhet të rindezim kontejnerin:
lxc restart alpNëse tani shohim konfigurimin e kontejnerit, nuk na nevojitet të aplikojmë opsionin --expanded për të parë pajisjen rrjetësore eth0, pasi e krijuam atë në nivelin e kontejnerit dhe ajo ka mbuluar në mënyrë kaskaduese këtë pajisje nga profili default:
lxc config show alp
arkitektura: x86_64
konfigurimi:
image.architektura: amd64
image.përshkrimi: Alpine 3.11 amd64 (20200326_13:39)
image.os: Alpine
image.lëshimi: "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
emri: eth0
nictype: bridged
prind: lxdbr0
tipi: nic
rrënjë:
rruga: /
pool: hddpool
tipi: disk
ephemeral: false
profile:
- default
- hddroot
stateful: false
përshkrimi: ""Fshirja e kontejnerit
Për të fshirë kontenierin, përdoret komanda lxc delete, por përpara se të fshini kontenierin, ai duhet të ndalet me komandën lxc stop:
lxc stop alplxc list
+------+---------+-------------------+------+-----------+-----------+
| EMRI | GJENDJA | IPV4 | IPV6 | TIPA | SNAPSHOTET |
+------+---------+-------------------+------+-----------+-----------+
| alp | NDALUR | 10.0.5.10 (eth0) | | KONTEINERI | 0 |
+------+---------+-------------------+------+-----------+-----------+Pasi kemi verifikuar që gjendja e kontenierit është NDALUR, mund të hiqet nga Storage Pool:
lxc fshi alpAksesi në kontejner
Për të ekzekutuar komanda në konteiner, drejtpërdrejt, pa kaluar nëpër lidhje rrjeti, shërben komanda lxc exec e cila ekzekuton komanda në konteiner pa nisur shell-in e sistemit. Nëse ju nevojitet të ekzekutoni një komandë në shell duke përdorur modele shell, si variabla, redirektimet e skedarëve (pipe) etj., atëherë duhet të nisin shkellet dhe të kaloni komandën si një çelës, për shembull:
lxc exec alp -- /bin/sh -c "echo $HOME"Në komandë u përdor një simbul i veçantë për të shkruar për simbolin e veçantë $ në mënyrë që variabla $HOME të mos interpretohej në makinën prind, por të interpretohej vetëm brenda konteinerit.
Gjithashtu, është e mundur të filloni një mod interaktiv të shell-it, dhe pas përfundimit të seancës të ekzekutoni hotkey CTRL+D:
lxc exec alp -- /bin/shMenaxhimi i burimeve të kontejnerit
Në LXD, mund të menaxhoni burimet e konteinerit përmes një grupi të caktuar konfigurimi. Lista e plotë e parametrave të konfigurimit të konteinerit mund të gjendet .
Kufizimi i burimeve RAM (MEMORI)
Parametri limits.memory kufizon sasinë e RAM që është e disponueshme për konteinerin. Si vlerë, specifikohet një numër dhe një nga .
Le të vendosim një kufizim për konteinerin për sasinë e RAM prej 256 MB:
lxc config set alp limits.memory 256MBgjithashtu, 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ë shfaqet e gjithë konfigurimi i kontejnerit, përfshirë kufizimin e resurseve që është vendosur:
lxc config show alp
architecture: x86_64
config:
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 (PĂRPROCESIM)
Për kufizimin e resurseve të CPU, ekzistojnë disa :
limit.cpuâ lidh kontejnerin me njĂ« ose mĂ« shumĂ« bĂ«rthama CPUlimits.cpu.allowanceâ menaxhon ose kuotat e planifikuesit CFS, kur ka kaluar kufizimi i kohĂ«s, ose mekanizmin universalisht pĂ«r ndarjen e resurseve tĂ« CPU, kur ka kaluar njĂ« vlerĂ« pĂ«rqindjejelimits.cpu.priorityâ prioriteti i planifikuesit, kur pĂ«r disa instanca, qĂ« ndajnĂ« tĂ« njĂ«jtin grup procesorĂ«sh, Ă«shtĂ« caktuar e njĂ«jta pĂ«rqindje procesorĂ«sh
lxc config set alp limits.cpu.allowance 40%lxc config show alp
architecture: x86_64
config:
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 diskore
Përveç kufizimeve si limits.read, limits.write ne mund të kufizojmë gjithashtu sasinë e hapësirës disk të përdorur nga kontejneri (funksionon 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 ta marrim nga komanda 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: 0Megjithëse ne kemi vendosur një kufi për pajisjen rrënjë të kontejnerit në 2GB, utilitetet sistemore si df nuk do ta shohin këtë kufi. Për këtë, ne do të bëjmë një test të vogël dhe do të zbulojmë se si funksionon.
Do të krijojmë 2 kontejnerë identikë 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
+------+---------+------------------+------+-----------+-----------+
| EMRI | STADI | IPV4 | IPV6 | LLOJI | SNAPSHOTET |
+------+---------+------------------+------+-----------+-----------+
| alp1 | NĂ FUNKSION | 10.0.5.46 (eth0) | | KONTEJNER | 0 |
+------+---------+------------------+------+-----------+-----------+
| alp2 | NĂ FUNKSION | 10.0.5.30 (eth0) | | KONTEJNER | 0 |
+------+---------+------------------+------+-----------+-----------+Në një nga kontejnerët do të krijojmë një skedari me madhësi 1GB:
lxc exec alp1 -- dd if=/dev/urandom of=file.img bs=1M count=1000Të 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, atëherë ky skedar nuk do të jetë aty, siç pritej, pasi kontejnerët krijohen në Storage Volume 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 e montuar sihtas si një pjesë e rrënjësore Storage Pool e cila përdoret nga këto konteinerë, kështu që ata e ndajnë atë volum në dy.
Statistika e konsumit të burimeve
Të shikoni statistikën e konsumit të burimeve për konteinerin mund të bëhet me komandën:
lxc info alp
Emri: alp
Vendndodhja: asnjë
Remote: unix://
Arkitektura: x86_64
Krijuar: 2020/04/08 18:05 UTC
Statusi: Duke punuar
Tipi: konteiner
Profili: 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
Burimet:
Proceset: 5
Përdorimi i diskut:
rrënjësor: 495.62kB
Përdorimi i CPU:
Përdorimi i CPU (në sekonda): 1
Përdorimi i kujtesës:
Kujtesa (aktuale): 4.79MB
Përdorimi i rrjetit:
eth0:
Bytes e pranuara: 730B
Bytes e dërguara: 1.59kB
Paketa e pranuara: 3
Paketa e dërguara: 14
lo:
Bytes e pranuara: 0B
Bytes e dërguara: 0B
Paketa e pranuara: 0
Paketa e dërguara: 0Puno me snapshot-et
LXD ka mundësinë e krijimit të snapshoteve dhe rikthimit prej tyre të gjendjes së konteinerit.
Për të krijuar një snapshot, ekzekutoni komandën në vijim:
lxc snapshot alp snapshot1Komanda lxc snapshot nuk ka një çelës listë, prandaj, për të parë listën e snapshot-eve, duhet të përdorim komandën që jep informacion të përgjithshëm mbi kontejnerin:
lxc info alp
...
...
Snapshot-e:
snapshot1 (marrë më 2020/04/08 18:18 UTC) (pa shtesë)Për të rikthyer kontejnerin nga një snapshot, mund të përdorni komandën lxc restore duke specifikuar kontejnerin për të cilin do të bëhet rikthimi dhe pseudonimin e snapshot-it:
lxc restore alp snapshot1Komanda në vijim shërben për të fshirë një snapshot. Vini re se sintaksa e komandës nuk është e ngjashme me të gjitha të tjerat; këtu duhet të specifikoni një prerje të drejtpërdrejtë pas emrit të kontejnerit. Nëse e lëshoni prerjen, komanda për fshirjen e snapshot-it do të interpretohet si një komandë për fshirjen e kontejnerit!
lxc delete alp/snapshot1NĂ« shembullin e mĂ«sipĂ«rm, ne shqyrtuam snapshot-e tĂ« quajtur stateless. NĂ« LXD ka njĂ« tjetĂ«r lloj snapshot-i â stateful, nĂ« tĂ« cilin ruhet gjendja aktuale e tĂ« gjithĂ« proceseve nĂ« kontejner. Me snapshot-et stateful lidhen disa funksione tĂ« interesante dhe tĂ« dobishme.
ĂfarĂ« tjetĂ«r?
- Për zhvilluesit Python është në dispozicion moduli i cili ofron API për LXD
UPDATE 10.04.2020 15:00: Shtova navigimin
Burimi: habr.com
