LXD is de folgjende generaasje systeem container manager, sa seit it boarne. It biedt in brûkersynterface fergelykber mei firtuele masines, mar brûkt ynstee Linux-konteners.
LXD kearn is in befoarrjochte daemon (in tsjinst dy't rint mei root-rjochten) dy't in REST API leveret fia in lokale unix-socket, lykas fia it netwurk as de passende konfiguraasje is ynstalleare. Klanten, lykas it kommandorigelark dat is foarsjoen fan LXD, meitsje oanfragen fia dizze REST API. Dit betsjut dat of jo tagong krije ta in lokale host of in host op ôfstân, alles wurket itselde.
Yn dit artikel sille wy net yn detail wenje oer de konsepten fan LXD, wy sille net alle beskikbere mooglikheden beskôgje dy't yn 'e dokumintaasje beskreaun binne, ynklusyf de resinte ymplemintaasje yn' e lêste ferzjes fan LXD fan stipe foar QEMU firtuele masines parallel mei konteners. Ynstee dêrfan sille wy gewoan de basis leare fan kontenerbehear - opslachpools ynstelle, netwurkjen, in kontener útfiere, boarnegrinzen tapasse, en hoe't jo snapshots kinne brûke, sadat jo in basisbegryp fan LXD kinne krije en konteners op Linux kinne brûke.
Foar folsleine ynformaasje, ferwize nei de offisjele boarne:
Dit betsjut dat twa pakketten tagelyk ynstalleare wurde, ien as in systeempakket en de oare as in snappakket. It ynstallearjen fan twa pakketten op in systeem kin wat probleem meitsje wêrby't it systeempakket wees wurde kin as it snappakket fuorthelle wurdt troch de snappakketbehearder.
Fyn pakket lxd yn it snap repository kinne jo it folgjende kommando brûke:
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
Troch it kommando út te fieren list kinne jo derfoar soargje dat it pakket lxd noch net ynstallearre:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
Nettsjinsteande it feit dat LXD in snappakket is, moat it ynstalleare wurde fia it systeempakket lxd, dat sil meitsje de oerienkommende groep yn it systeem, de nedige nutsbedriuwen yn /usr/bin en sa fierder.
sudo apt update
sudo apt install lxd
Litte wy derfoar soargje dat it pakket is ynstalleare as in snappakket:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
lxd 3.21 13474 stable/… canonical✓ -
Om it LXD-pakket op it systeem te ynstallearjen, moatte jo de folgjende kommando's útfiere, de earste sil de list mei pakketten bywurkje op it systeem beskikber yn it repository, de twadde sil it pakket direkt ynstallearje:
sudo pacman -Syyu && sudo pacman -S lxd
Nei it ynstallearjen fan it pakket, om LXD te behearjen troch in gewoane brûker, moat it wurde tafoege oan de systeemgroep lxd:
sudo usermod -a -G lxd user1
Lit ús soargje dat de brûker user1 tafoege oan groep lxd:
id -Gn user1
user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd
As de groep lxd is net sichtber yn 'e list, dan moatte jo de brûkerssesje opnij aktivearje. Om dit te dwaan, moatte jo útlogge en ynlogge ûnder deselde brûker.
Aktivearje yn systemd it laden fan de LXD-tsjinst by it opstarten fan it systeem:
Foardat inisjalisaasje begjint, moatte wy begripe hoe't de opslach yn LXD logysk regele is.
Opslach (Opslach) bestiet út fan ien of mear opslach pool dy't ien fan 'e stipe triemsystemen brûkt lykas ZFS, BTRFS, LVM of reguliere mappen. Elk opslach pool is ferdield yn dielen (Opslach folume) dy't ôfbyldings, konteners of gegevens befetsje foar oare doelen.
Ofbyldings - dit binne spesjaal gearstalde distribúsjes sûnder de Linux-kernel en beskikber fan eksterne boarnen
Containers - dit binne ynset distribúsjes fan ôfbyldings, klear foar gebrûk
Snapshots - dit binne snapshots fan 'e steat fan konteners wêr't jo nei werom kinne
Om opslach yn LXD te behearjen, brûk it kommando lxc storage in sertifikaat wêrfoar jo kinne krije troch it opjaan fan de kaai - lxc storage --help
It folgjende kommando toant in list fan allegear opslach pool yn LXD opslach:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 2 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 4 |
+---------+-------------+--------+--------------------------------+---------+
Om in list fan allegear te besjen Opslach folume yn de selektearre opslach pool tsjinnet it team 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 |
+-----------+----------------------------------+-------------+---------+
Ek, as foar opslach pool By it oanmeitsjen waard it BTRFS-bestânsysteem selektearre, krij dan in list Opslach folume of subvolumes yn 'e BTRFS-ynterpretaasje kinne jo de toolkit fan dit bestânsysteem brûke:
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
Foardat jo konteners oanmeitsje en brûke, moatte jo in algemiene LXD-initialisaasje útfiere dy't it netwurk en opslach oanmakket en konfigurearret. Dit kin mei de hân dien wurde mei standert kliïntkommando's dy't beskikber binne yn 'e list troch it kommando op te roppen lxc --help of mei help fan de inisjalisaasje wizard lxd init in pear fragen beantwurdzje.
Tidens inisjalisaasje stelt LXD ferskate fragen, ynklusyf it bepalen fan it bestânssysteemtype foar de standert opslach pool. Standert is it BTRFS-bestânsysteem dêrfoar selektearre. It sil ûnmooglik wêze om te feroarjen nei in oare FS nei skepping. Om in FS te selektearjen wurdt foarsteld feature ferliking tabel:
Eigenskip
Directory
btrfs
LVM
ZFS
CEPH
Optimalisearre ôfbylding opslach
nee
ja
ja
ja
ja
Optimalisearre eksimplaar oanmeitsjen
nee
ja
ja
ja
ja
Optimalisearre snapshot oanmeitsjen
nee
ja
ja
ja
ja
Optimalisearre ôfbylding oerdracht
nee
ja
nee
ja
ja
Optimalisearre eksimplaar oerdracht
nee
ja
nee
ja
ja
Kopiearje op skriuwen
nee
ja
ja
ja
ja
Block basearre
nee
nee
ja
nee
ja
Instant cloning
nee
ja
ja
ja
ja
Storage driver brûkber binnen in kontener
ja
ja
nee
nee
nee
Weromsette fan âldere snapshots (net lêste)
ja
ja
ja
nee
ja
Opslach kwota
Ja(*)
ja
ja
ja
nee
Inisjalisearjen fan it netwurk en Storage Pool mei help fan de wizard ^
It folgjende kommando dat wy sille besjen suggerearret it ynstellen fan de haadkomponinten fan LXD troch ienfâldige fragen te beantwurdzjen mei de inisjalisaasjewizard.
Kommando útfiere lxc init en fier de antwurden yn op 'e fragen nei de kolon lykas werjûn yn it foarbyld hjirûnder of feroarje se neffens jo betingsten:
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]:
Yn 'e foarige stap hawwe wy makke opslach pool dy't de namme krige ssdpool en it bestân wêrfan op myn systeem leit op /var/lib/lxd/disks/ssdpool.img. Dit triemsysteemadres komt oerien mei it fysike SSD-stasjon op myn PC.
De folgjende aksjes, te wreidzjen begryp fan 'e rol spile troch opslach pool yn it repository sille wy in twadde meitsje opslach pool dy't fysyk sil lizze op in oar type skiif, HDD. It probleem is dat LXD jo net tastean om te meitsjen opslach pool út adres /var/lib/lxd/disks/ en sels symboalyske keppelings sille net wurkje, sjoch it antwurd fan de ûntwikkelder. Wy kinne dizze beheining omgean by inisjalisaasje / opmaak opslach pool troch it opjaan fan de wearde as in blok apparaat ynstee fan it paad nei de loopback triem troch opjaan dit yn de kaai source.
Dus, foardat jo meitsje opslach pool jo moatte in loopback-bestân definiearje as in besteande partysje op jo bestânsysteem dat it sil brûke. Om dit te dwaan, sille wy in bestân oanmeitsje en brûke dat wy yn grutte sille beheine ta 10GB:
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
Litte wy it loopback-bestân ferbine mei in fergese loopback-apparaat:
Mei tank oan de kaai --show it útfieren fan it kommando jout werom nei it skerm de namme fan it apparaat wêryn ús loopback-bestân is ferbûn. As it nedich is, kinne wy in list sjen litte fan alle drokke apparaten fan dit type om te soargjen dat ús aksjes korrekt binne:
Ut de list kinne jo fine dat it apparaat hat /dev/loop1 loopback-bestân ynbegrepen /mnt/work/lxd/hddpool.img, en yn it apparaat /dev/loop0 loopback-bestân ynbegrepen /var/lib/lxd/disks/ssdpool.img dy't oerienkomt mei de standert opslach pool.
It folgjende kommando makket in nij opslach pool yn LXD basearre op it loopback-bestân dat wy krekt taret hawwe. LXD sil it loopback-bestân formatearje /mnt/work/lxd/hddpool.img yn it apparaat /dev/loop1 foar it BTRFS-bestânsysteem:
Auto ynfoegje fan in loopback triem yn in loopback apparaat slot ^
Wy hawwe ien lyts probleem, by it opnij opstarten fan it hostsysteem, it bestân /mnt/work/lxd/hddpool.img sil "fleane" út it apparaat /dev/loop1 en de LXD-tsjinst sil crashe by it laden, om't it it net sil sjen yn dit apparaat. Om dit probleem op te lossen moatte jo in systeemtsjinst oanmeitsje dy't dit bestân yn it apparaat sil ynfoegje /dev/loop1 as it hostsysteem opstart.
Lit ús meitsje ienheid triemtype betsjinning в /etc/systemd/system/ foar it SystemD inisjalisaasjesysteem:
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
Aktivearje de tsjinst:
sudo systemctl enable lxd-hddpool
Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.
Nei it opnij starte fan it hostsysteem kontrolearje wy de tsjinststatus:
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).
Fanút de útfier kinne wy ferifiearje dat de tsjinststatus is aktyf, nettsjinsteande it feit dat de útfiering fan ús skript fan ien kommando foltôge wie, liet de opsje ús dit dwaan RemainAfterExit=true.
Sûnt alle kontenerprosessen eins yn isolaasje rinne op it hostsysteem mei syn kernel, om de tagong fan kontenerprosessen nei it hostsysteem fierder te beskermjen, biedt LXD prosesprivilege, wêrby't:
Privilearde konteners - dit binne konteners wêryn prosessen mei UID en GID oerienkomme mei deselde eigner as op it hostsysteem. Bygelyks, in proses dat rint yn in kontener mei in UID fan 0 hat alle deselde tagongsrjochten as in proses op it hostsysteem mei in UID fan 0. Mei oare wurden, de root-brûker yn 'e kontener hat alle rjochten net allinich yn de kontener, mar ek op de host systeem as hy kin gean bûten de container syn isolearre nammeromte.
Unprivilegearre konteners - dit binne konteners wêryn prosessen hearre ta de eigner fan 'e UID en GID mei in nûmer fan 0 oant 65535, mar foar it hostsysteem wurdt de eigner maskearre mei respektivelik de tafoege SubUID- en SubGID-bits. Bygelyks, in brûker mei UID = 0 yn in kontener sil sjoen wurde op de host systeem as SubUID + UID. Dit beskermet it hostsysteem, om't as ien proses yn 'e kontener syn isolearre nammeromte kin ûntkomme, kin it allinich kommunisearje mei it hostsysteem as in proses mei in ûnbekende, heul hege UID / GID.
Standert hawwe nij oanmakke konteners in unprivileged status en dêrom moatte wy in SubUID en SubGID definiearje.
Litte wy twa konfiguraasjebestannen oanmeitsje wêryn wy it masker foar respektivelik SubUID en SubGID sille ynstelle:
Sûnt wy earder inisjalisearre it netwurk mei help fan de inisjalisaasje wizard lxd init en makke in netwurk apparaat lxdbr0, dan sille wy yn dizze seksje gewoan yn 'e kunde komme mei netwurken yn LXD en hoe't jo in firtuele skeakel (brêge) meitsje kinne mei it kliïntkommando.
It folgjende diagram lit sjen hoe't in switch (brêge) de host en konteners ferbynt yn in netwurk:
Containers kinne fia in netwurk kommunisearje mei oare konteners as de host wêrop dizze konteners wurde betsjinne. Om dit te dwaan, moatte jo de firtuele netwurkkaarten fan 'e konteners keppelje mei in firtuele switch. Wy sille earst in skeakel oanmeitsje, en de netwurkynterfaces fan 'e kontener wurde keppele yn folgjende haadstikken, nei't de kontener sels oanmakke is.
It folgjende kommando makket in skeakel mei in subnet 10.0.5.0/24 en IPv4-adres 10.0.5.1/24, en ek omfettet ipv4.nat sadat konteners tagong kinne ta it ynternet fia de host mei de NAT-tsjinst:
Elke kontener yn LXD hat syn eigen konfiguraasje en kin it útwreidzje mei globaal ferklearre konfiguraasjes neamd konfiguraasje profilen. It tapassen fan konfiguraasjeprofilen op in kontener hat in kaskademodel, it folgjende foarbyld lit dit sjen:
Yn dit foarbyld binne trije profilen makke yn it LXD-systeem: default, hddpool и hostfs. Alle trije profilen wurde tapast op in kontener dy't in lokale konfiguraasje hat (griis gebiet). Profyl default hat in apparaat root dy't in parameter hat pool is gelyk oan ssdpool, mar tank oan de cascade konfiguraasje applikaasje model, kinne wy tapasse in profyl oan de kontener hddpool dy't in parameter hat pool sil deselde parameter oerskriuwe fan it profyl default en de kontener sil de apparaatkonfiguraasje ûntfange root mei parameter pool lykweardich hddpool, en it profyl hostfs foeget gewoan in nij apparaat ta oan 'e kontener.
Om de list mei beskikbere konfiguraasjeprofilen te sjen, brûk it folgjende kommando:
lxc profile list
+---------+---------+
| NAME | USED BY |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+
In folsleine list mei beskikbere kommando's foar wurkjen mei in profyl kin wurde krigen troch de kaai ta te foegjen --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
Standert konfiguraasje profyl default hat gjin netwurkkaartkonfiguraasje foar de kontener en alle nij oanmakke konteners hawwe gjin netwurk, foar har is it nedich om lokale (tawiide) netwurkapparaten te meitsjen mei in apart kommando, mar wy kinne in wrâldwide netwurkapparaat yn 'e konfiguraasje meitsje profyl dat dield wurdt tusken alle konteners dy't dit profyl brûke. Op dizze manier, fuortendaliks nei it kommando om in nije kontener te meitsjen, sille se in netwurk hawwe mei netwurk tagong. Tagelyk binne d'r gjin beheiningen; wy kinne letter altyd in lokaal netwurkapparaat meitsje as it nedich is.
It folgjende kommando sil it apparaat tafoegje oan it konfiguraasjeprofyl eth0 type nic ferbûn mei it netwurk lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0
It is wichtich om te notearjen dat, om't wy it apparaat feitlik tafoege oan it konfiguraasjeprofyl, as wy in statysk IP-adres yn it apparaat oantsjutte, dan sille alle konteners dy't dit profyl brûke itselde IP-adres diele. As d'r needsaak is om in kontener te meitsjen mei in statysk IP-adres tawiisd foar de kontener, dan moatte jo in netwurkapparaatkonfiguraasje oanmeitsje op it kontenernivo (lokale konfiguraasje) mei de IP-adresparameter, en net op it profylnivo.
Litte wy it profyl kontrolearje:
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: []
Yn dit profyl kinne wy sjen dat foar alle nij oanmakke konteners twa apparaten sille wurde oanmakke:
eth0 - Type apparaat nic ferbûn mei in switch (netwurkbrêge) lxdbr0
root - Type apparaat disk dy't brûkt in opslach pool ssdpool
Om earder makke te brûken opslach pool containers, meitsje in konfiguraasje profyl ssdroot wêryn wy sille tafoegje in apparaat lykas disk mei mount punt / (root) mei help fan de earder makke opslach pool - ssdpool:
Containers wurde makke fan ôfbyldings dy't spesjaal gearstalde distribúsjes binne dy't gjin Linux-kernel hawwe. Dêrom, foardat it útfieren fan de kontener, moat it wurde ynset fan dizze ôfbylding. De boarne fan ôfbyldings is in lokale repository wêryn ôfbyldings wurde ynladen fan eksterne repositories.
Om de kontener te brûken, moatte jo in ôfbylding tafoegje fan it globale repository oan 'e lokale local:. No is it lokale repository leech, it kommando sil der wis fan wêze lxc image list. As de metoade list spesifisearje gjin repository, dan sil it lokale repository standert brûkt wurde - local:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+
Ofbyldings yn it repository wurde beheard mei de folgjende metoaden:
team
beskriuwing
lxc ôfbylding alias
Beheare ôfbylding aliassen
lxc ôfbylding copy
Kopiearje ôfbyldings tusken servers
Neist de ynteraktive modus stipet LXD ek in net-ynteraktive konfiguraasje-ynstallaasjemodus, dit is as de konfiguraasje wurdt oantsjutte yn 'e foarm fan in YAML-bestân, in spesjale opmaak wêrmei jo de folsleine konfiguraasje tagelyk kinne ynstallearje, de útfiering foarby gean. fan in protte ynteraktive kommando's dy't hjirboppe yn dit artikel waarden besprutsen, ynklusyf netwurkkonfiguraasje, oanmeitsjen fan konfiguraasjeprofilen, ensfh. Wy sille dit gebiet hjir net dekke, jo kinne it sels kontrolearje. yn dokumintaasje.
Folgjende ynteraktive kommando lxc config wêr't wy nei sille sjen kinne jo de konfiguraasje ynstelle. Bygelyks, om te soargjen dat ynladen ôfbyldings nei it lokale repository net automatysk bywurke wurde fan 'e globale repositories, kinne wy dit gedrach ynskeakelje mei it folgjende kommando:
Om in kontener te meitsjen brûk it kommando lxc init dêr't wearden oan wurde trochjûn репозиторий:образ en dan de winske ID foar de kontener. De repository kin wurde oantsjutte as lokaal local: sa is elke globale ien. As de repository net oantsjutte is, dan wurdt standert de lokale repository brûkt om te sykjen nei de ôfbylding. As de ôfbylding wurdt oantsjutte út it globale repository, dan sil de ôfbylding earst wurde ynladen nei it lokale repository en dan brûkt om de kontener te meitsjen.
Litte wy it folgjende kommando útfiere om ús earste kontener te meitsjen:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddroot
Litte wy nei de kommando-kaaien sjen dy't wy hjir brûke yn folchoarder:
alpine3 - In alias (alias) is spesifisearre foar de ôfbylding dy't earder waard upload nei it lokale repository. As de alias net makke is foar dizze ôfbylding, dan kinne jo altyd ferwize nei de ôfbylding troch syn Fingerprint dat wurdt werjûn yn 'e tabel.
alp - Stelt de identifier yn foar de kontener
--storage - Dizze kaai jout oan wêryn opslach pool in kontener sil oanmakke wurde
--profile - Dizze kaaien kaskade tapasse konfiguraasje fan earder oanmakke konfiguraasjeprofilen op 'e kontener
Wy lansearje de kontener, dy't it initsysteem fan 'e distribúsje begjint te starten:
lxc start alp
Jo kinne ek it kommando brûke lxc launch wêrtroch jo teams kinne kombinearje lxc init и lxc start yn ien operaasje.
Kontrolearje de steat fan 'e kontener:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME | STATE | IPV4 | IPV6 | TYPE | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | hddpool |
+------+---------+------------------+------+-----------+--------------+
Yn de seksje profiles wy kinne derfoar soargje dat dizze kontener twa konfiguraasjeprofilen brûkt - default и hddroot. Yn seksje devices wy kinne mar ien apparaat ûntdekke, om't it netwurkapparaat op it profylnivo makke is default. Om alle apparaten te sjen dy't troch de kontener brûkt wurde, moatte jo in kaai tafoegje --expanded:
As wy besykje in IP-adres yn te stellen foar in netwurkapparaat eth0 ploech lxc config device set alp bedoeld foar de kontenerkonfiguraasje, dan krije wy in flater dy't rapportearret dat it apparaat net bestiet omdat it apparaat eth0 dat wurdt brûkt troch de kontener heart ta it profyl default:
lxc config device set alp eth0 ipv4.address 10.0.5.5
Error: The device doesn't exist
Wy kinne fansels in statysk IP-adres ynstelle foar eth0 apparaten yn it profyl, mar it sil itselde wêze foar alle konteners dy't dit profyl brûke. Litte wy dêrom in apparaat tafoegje wijd oan 'e kontener:
lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Dan moatte jo de kontener opnij starte:
lxc restart alp
As wy no nei de kontenerkonfiguraasje sjogge, hoege wy de opsje net te brûken --expanded om it netwurkapparaat te sjen eth0, om't wy it makke hawwe op it kontenernivo en it kaskade oer itselde apparaat fan it profyl default:
Om kommando's direkt yn in kontener út te fieren, troch netwurkferbiningen te omgean, brûk it kommando lxc exec dy't kommando's yn 'e kontener útfiert sûnder de systeemshell te starten. As jo in kommando moatte útfiere yn in shell mei help fan shell-patroanen lykas fariabelen, triemferwizings (pipe), ensfh., Dan moatte jo de shell eksplisyt starte en it kommando trochjaan as in kaai, bygelyks:
lxc exec alp -- /bin/sh -c "echo $HOME"
It kommando brûkte in spesjale escape-karakter foar spesjale karakter $ sadat de fariabele $HOME waard net ynterpretearre op de host masine, mar waard ynterpretearre allinnich binnen de kontener.
It is ek mooglik om de ynteraktive shell-modus te begjinnen, en dan de sesje te beëinigjen troch fluchtoets út te fieren CTRL+D:
Yn LXD kinne jo kontenerboarnen beheare mei in spesjale set fan konfiguraasje. In folsleine list mei parameters foar konfiguraasje fan konteners kin fûn wurde yn dokumintaasje.
D'r binne ferskate manieren om CPU-boarnen te beheinen. soarten beheinings:
limit.cpu - bynt in kontener oan ien of mear CPU kearnen
limits.cpu.allowance - beheart of CFS-planner-kwota's as de tiidlimyt is foarby, of it universele CPU-boarne-dielingsmeganisme as it persintaazje is foarby
limits.cpu.priority - plannerprioriteit as meardere eksimplaren dy't in set processors diele, itselde persintaazje processors wurde tawiisd
Neist beheinings sokke limits.read, limits.write wy kinne ek de hoemannichte skiifromte beheine konsumearre troch de kontener (wurket allinich mei ZFS of BTRFS):
lxc config device set alp root size=2GB
Nei ynstallaasje, yn de parameter devices.root.size Wy kinne de ynstelde limyt ferifiearje:
lxc config show alp
...
devices:
root:
path: /
pool: hddpool
size: 2GB
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""
Om de brûkte skiifkwota's te besjen kinne wy krije fan it kommando 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
Nettsjinsteande it feit dat wy in limyt hawwe ynsteld foar it root-apparaat fan 'e kontener op 2GB, systeemprogramma's lykas df sil dizze beheining net sjen. Om dit te dwaan, sille wy in lytse test útfiere en útfine hoe't it wurket.
Litte wy 2 nije identike konteners yn deselde meitsje opslach pool (hddpool):
Litte wy derfoar soargje dat it bestân oanmakke is:
lxc exec alp1 -- ls -lh
total 1000M
-rw-r--r-- 1 root root 1000.0M Mar 27 10:16 file.img
As wy yn 'e twadde kontener sjogge, kontrolearje dan op it bestean fan in bestân op deselde lokaasje, dan sil dit bestân d'r net wêze, wat ferwachte wurdt, om't konteners yn har eigen makke wurde Opslach folume yn itselde opslach pool:
lxc exec alp2 -- ls -lh
total 0
Mar lit ús de wearden fergelykje dy't it produseart df op ien en oare kontener:
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% /
...
Device /dev/loop1 monteare as de root-partysje is opslach pool dy't dizze konteners brûke, sadat se har folume diele tusken twa.
LXD hat de mooglikheid om snapshots te meitsjen en de kontenerstatus fan har te herstellen.
Om in snapshot te meitsjen, fier it folgjende kommando út:
lxc snapshot alp snapshot1
It team lxc snapshot gjin kaai beskikber list, dêrom, om de list mei snapshots te besjen, moatte jo it kommando brûke dat algemiene ynformaasje oer de kontener toant:
lxc info alp
...
...
Snapshots:
snapshot1 (taken at 2020/04/08 18:18 UTC) (stateless)
Jo kinne in kontener weromsette fan in momintopname mei it kommando lxc restore spesifisearje de kontener wêrfoar de restauraasje sil wurde útfierd en de snapshot alias:
lxc restore alp snapshot1
It folgjende kommando wurdt brûkt om in snapshot te wiskjen. Tink derom dat de kommandosyntaksis net fergelykber is mei alle oaren; hjir moatte jo in foarútstribjende slash opjaan nei de kontenernamme. As de slash is weilitten, dan wurdt it kommando om in momintopname te wiskjen ynterpretearre as in kommando om in kontener te wiskjen!
lxc delete alp/snapshot1
Yn it foarbyld hjirboppe hawwe wy sjoen nei saneamde stateless snapshots. LXD hat in oar type snapshots - stateful, dy't de aktuele steat fan alle prosessen yn 'e kontener bewarret. D'r binne in oantal nijsgjirrige en nuttige funksjes ferbûn mei stateful snapshots.