LXD - Linux konteineru sistēmu pamatfunkcijas

LXD - Linux konteineru sistēmu pamatfunkcijas

LXD ir nākamās paaudzes sistēmas konteineru pārvaldnieks, tā teikts avots. Tas piedāvā lietotāja interfeisu, kas ir lÄ«dzÄ«gs virtuālajām maŔīnām, taču tā vietā tiek izmantoti Linux konteineri.

LXD kodols ir priviliģēts dēmons (pakalpojums, kas darbojas ar root tiesÄ«bām), kas nodroÅ”ina REST API, izmantojot lokālo unix ligzdu, kā arÄ« caur tÄ«klu, ja ir instalēta atbilstoŔā konfigurācija. Klienti, piemēram, ar LXD nodroÅ”inātais komandrindas rÄ«ks, veic pieprasÄ«jumus, izmantojot Å”o REST API. Tas nozÄ«mē, ka neatkarÄ«gi no tā, vai piekļūstat vietējam resursdatoram vai attālam resursdatoram, viss darbojas tāpat.

Å ajā rakstā mēs nekavēsimies sÄ«kāk pie LXD jēdzieniem, mēs neapskatÄ«sim visas pieejamās iespējas, kas izklāstÄ«tas dokumentācijā, ieskaitot neseno ievieÅ”anu jaunākajās LXD versijās atbalstam QEMU virtuālajām maŔīnām paralēli konteineriem. Tā vietā mēs apgÅ«sim tikai konteineru pārvaldÄ«bas pamatus ā€” krātuves pÅ«lu iestatÄ«Å”anu, tÄ«klu izveidi, konteinera darbināŔanu, resursu ierobežojumu piemēroÅ”anu un momentuzņēmumu izmantoÅ”anu, lai jÅ«s varētu iegÅ«t pamatzināŔanas par LXD un izmantot konteinerus operētājsistēmā Linux.

Lai iegūtu pilnīgu informāciju, lūdzu, skatiet oficiālo avotu:

Navigācija

UzstādīŔana LXD ^

LXD instalēŔana Ubuntu izplatījumos ^

Ubuntu 19.10 izplatÄ«Å”anas pakotnē lxd ir ieslēgta pārraide snap iepakojums:

apt search lxd

lxd/eoan 1:0.7 all
  Transitional package - lxd -> snap (lxd)

Tas nozÄ«mē, ka uzreiz tiks instalētas divas pakotnes, viena kā sistēmas pakotne, bet otra kā snap pakotne. Divu pakotņu instalÄ“Å”ana sistēmā var radÄ«t problēmas, jo sistēmas pakotne var kļūt par bāreņiem, ja snap pakotņu pārvaldnieks noņem snap pakotni.

Atrodi paketi lxd snap repozitorijā varat izmantot Ŕādu komandu:

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

Palaižot komandu list jūs varat pārliecināties, ka iepakojums lxd vēl nav instalēts:

snap list

Name  Version    Rev   Tracking  Publisher   Notes
core  16-2.43.3  8689  stable    canonicalāœ“  core

Neskatoties uz to, ka LXD ir snap pakotne, tā ir jāinstalē, izmantojot sistēmas pakotni lxd, kas sistēmā izveidos atbilstoÅ”o grupu, nepiecieÅ”amās utilÄ«tas iekŔā /usr/bin uc

sudo apt update
sudo apt install lxd

Pārliecināsimies, ka pakotne ir instalēta kā snap pakotne:

snap list

Name  Version    Rev    Tracking  Publisher   Notes
core  16-2.43.3  8689   stable    canonicalāœ“  core
lxd   3.21       13474  stable/ā€¦  canonicalāœ“  -

LXD instalēŔana Arch Linux izplatījumos ^

Lai sistēmā instalētu LXD pakotni, jums ir jāizpilda Ŕādas komandas, pirmā atjauninās repozitorijā pieejamo sistēmas pakotņu sarakstu, otrā tieÅ”i instalēs pakotni:

sudo pacman -Syyu && sudo pacman -S lxd

Pēc pakotnes instalÄ“Å”anas, lai parasts lietotājs pārvaldÄ«tu LXD, tā jāpievieno sistēmas grupai lxd:

sudo usermod -a -G lxd user1

Pārliecināsimies, ka lietotājs user1 pievienots grupai lxd:

id -Gn user1

user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd

Ja grupa lxd nav redzams sarakstā, tad vēlreiz jāaktivizē lietotāja sesija. Lai to izdarÄ«tu, jums ir jāatsakās un jāpiesakās ar vienu un to paÅ”u lietotāju.

Aktivizējieties systemd LXD pakalpojuma ielāde sistēmas startÄ“Å”anas laikā:

sudo systemctl enable lxd

Sāksim pakalpojumu:

sudo systemctl start lxd

Pakalpojuma statusa pārbaude:

sudo systemctl status lxd

Krātuve LXD (krātuve) ^

Pirms inicializācijas sākuma mums ir jāsaprot, kā LXD krātuve ir loģiski sakārtota.

Krātuve (glabāŔana) sastāv no no viena vai vairākiem UzglabāŔanas baseins kas izmanto kādu no atbalstÄ«tajām failu sistēmām, piemēram, ZFS, BTRFS, LVM vai parastos direktorijus. Katrs UzglabāŔanas baseins ir sadalÄ«ts sējumos (Krātuves apjoms), kas satur attēlus, konteinerus vai datus citiem nolÅ«kiem.

  • Attēli - tie ir Ä«paÅ”i samontēti izplatÄ«jumi bez Linux kodola un pieejami no ārējiem avotiem
  • Konteineri - tie ir izvietoti izplatÄ«Å”anai no attēliem, gatavi lietoÅ”anai
  • Momentuzņēmumi ā€” tie ir konteineru stāvokļa momentuzņēmumi, kuros varat atgriezties

LXD - Linux konteineru sistēmu pamatfunkcijas

Lai pārvaldītu krātuvi LXD, izmantojiet komandu lxc storage sertifikāts, kuru varat iegūt, norādot atslēgu - lxc storage --help

Nākamā komanda parāda visu sarakstu UzglabāŔanas baseins LXD krātuvē:

lxc storage list

+---------+-------------+--------+--------------------------------+---------+
|  NAME   | DESCRIPTION | DRIVER |             SOURCE             | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool |             | btrfs  | /dev/loop1                     | 2       |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool |             | btrfs  | /var/lib/lxd/disks/ssdpool.img | 4       |
+---------+-------------+--------+--------------------------------+---------+

Lai skatītu visu sarakstu Krātuves apjoms atlasītajā UzglabāŔanas baseins kalpo komandai 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       |
+-----------+----------------------------------+-------------+---------+

Tāpat, ja priekÅ” UzglabāŔanas baseins Veidojot, tika atlasÄ«ta BTRFS failu sistēma, pēc tam iegÅ«stiet sarakstu Krātuves apjoms vai apakÅ”lÄ«meņi BTRFS interpretācijā varat izmantot Ŕīs failu sistēmas rÄ«ku komplektu:

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

Notiek LXD inicializācija ^

Pirms konteineru izveides un izmantoÅ”anas ir jāveic vispārÄ«ga LXD inicializÄ“Å”ana, kas izveido un konfigurē tÄ«klu un krātuvi. To var izdarÄ«t manuāli, izmantojot standarta klienta komandas, kas ir pieejamas sarakstā, izsaucot komandu lxc --help vai izmantojot inicializācijas vedni lxd init atbildot uz dažiem jautājumiem.

Failu sistēmas atlase uzglabāŔanas pÅ«lam ^

Inicializācijas laikā LXD uzdod vairākus jautājumus, tostarp nosaka noklusējuma failu sistēmas tipu UzglabāŔanas baseins. Pēc noklusējuma tam ir atlasÄ«ta BTRFS failu sistēma. Pēc izveides nebÅ«s iespējams mainÄ«t uz citu FS. Ir ieteicams izvēlēties FS funkciju salÄ«dzināŔanas tabula:

iezīme
Direktorija
Btrfs
LVM
ZFS
CEPH

Optimizēta attēlu glabāŔana
Nē
jā
jā
jā
jā

Optimizēta instanču izveide
Nē
jā
jā
jā
jā

Optimizēta momentuzņēmuma izveide
Nē
jā
jā
jā
jā

Optimizēta attēlu pārsÅ«tÄ«Å”ana
Nē
jā
Nē
jā
jā

Optimizēta gadÄ«jumu pārsÅ«tÄ«Å”ana
Nē
jā
Nē
jā
jā

kopēt uz rakstīt
Nē
jā
jā
jā
jā

Bloku pamatā
Nē
Nē
jā
Nē
jā

TÅ«lÄ«tēja klonÄ“Å”ana
Nē
jā
jā
jā
jā

UzglabāŔanas draiveris, ko var izmantot konteinerā
jā
jā
Nē
Nē
Nē

Atjaunot no vecākiem momentuzņēmumiem (nav jaunākajiem)
jā
jā
jā
Nē
jā

UzglabāŔanas kvotas
Jā(*)
jā
jā
jā
Nē

TÄ«kla un krātuves pÅ«la inicializÄ“Å”ana, izmantojot vedni ^

Nākamā komanda, kuru apskatīsim, iesaka iestatīt galvenos LXD komponentus, atbildot uz vienkārŔiem jautājumiem, izmantojot inicializācijas vedni.

Palaist komandu lxc init un ievadiet atbildes uz jautājumiem aiz kola, kā parādÄ«ts zemāk esoÅ”ajā piemērā, vai mainiet tās atbilstoÅ”i saviem nosacÄ«jumiem:

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]: 

Papildu krātuves baseina izveide ^

IepriekŔējā darbÄ«bā mēs izveidojām UzglabāŔanas baseins kam tika dots vārds ssdpool un kura fails atrodas manā sistēmā vietnē /var/lib/lxd/disks/ssdpool.img. Å Ä« failu sistēmas adrese atbilst fiziskajam SSD diskdzinÄ« manā datorā.

Å Ä«s darbÄ«bas, lai paplaÅ”inātu izpratni par lomu UzglabāŔanas baseins repozitorijā mēs izveidosim otru UzglabāŔanas baseins kas fiziski atradÄ«sies cita veida diskā, HDD. Problēma ir tā, ka LXD neļauj jums izveidot UzglabāŔanas baseins ārpus adreses /var/lib/lxd/disks/ un pat simboliskas saites nedarbosies, skatiet izstrādātāja atbildi. Mēs varam apiet Å”o ierobežojumu inicializācijas/formatÄ“Å”anas laikā UzglabāŔanas baseins norādot vērtÄ«bu kā bloka ierÄ«ci, nevis ceļu uz atgriezeniskās saites failu, norādot to atslēgā source.

Tātad, pirms izveidoÅ”anas UzglabāŔanas baseins jums ir jādefinē atpakaļcilpas fails vai esoÅ”s nodalÄ«jums savā failu sistēmā, ko tas izmantos. Lai to izdarÄ«tu, mēs izveidosim un izmantosim failu, kura lielumu ierobežosim lÄ«dz 10 GB:

dd if=/dev/zero of=/mnt/work/lxd/hddpool.img bs=1MB count=10000

10000+0 records in
10000+0 records out
10000000000 bytes (10 GB, 9,3 GiB) copied, 38,4414 s, 260 MB/s

Savienosim atpakaļcilpas failu ar bezmaksas cilpas ierīci:

sudo losetup --find --show /mnt/work/lxd/hddpool.img

/dev/loop1

Pateicoties atslēgai --show izpildot komandu, ekrānā tiek atgriezts tās ierÄ«ces nosaukums, kurai ir pievienots atpakaļcilpas fails. Ja nepiecieÅ”ams, mēs varam parādÄ«t visu Ŕāda veida aizņemto ierīču sarakstu, lai pārliecinātos, ka mÅ«su darbÄ«bas ir pareizas:

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     512

No saraksta varat atrast, ka ierÄ«cei ir /dev/loop1 cilpas fails ir iekļauts /mnt/work/lxd/hddpool.img, un ierÄ«cē /dev/loop0 cilpas fails ir iekļauts /var/lib/lxd/disks/ssdpool.img kas atbilst noklusējuma UzglabāŔanas baseins.

SekojoŔā komanda izveido jaunu UzglabāŔanas baseins LXD, pamatojoties uz tikko sagatavoto cilpas failu. LXD formatēs atgriezeniskās saites failu /mnt/work/lxd/hddpool.img ierÄ«cē /dev/loop1 BTRFS failu sistēmai:

lxc storage create hddpool btrfs size=10GB source=/dev/loop1

Parādīsim visu sarakstu UzglabāŔanas baseins ekrānam:

lxc storage list

+---------+-------------+--------+--------------------------------+---------+
|  NAME   | DESCRIPTION | DRIVER |             SOURCE             | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool |             | btrfs  | /dev/loop1                     | 0       |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool |             | btrfs  | /var/lib/lxd/disks/ssdpool.img | 0       |
+---------+-------------+--------+--------------------------------+---------+

Krātuves baseina lieluma palielināŔana ^

Pēc radÄ«Å”anas UzglabāŔanas baseins, ja nepiecieÅ”ams, to var paplaÅ”ināt. PriekÅ” UzglabāŔanas baseins pamatojoties uz BTRFS failu sistēmu, palaidiet Ŕādas komandas:

sudo truncate -s +5G /mnt/work/lxd/hddpool.img
sudo losetup -c /dev/loop1
sudo btrfs filesystem resize max /var/lib/lxd/storage-pools/hddpool

Automātiska cilpas faila ievietoŔana atpakaļcilpas ierīces slotā ^

Mums ir viena neliela problēma, pārstartējot resursdatora sistēmu, failu /mnt/work/lxd/hddpool.img "izlidos" no ierÄ«ces /dev/loop1 un LXD pakalpojums avarēs ielādes laikā, jo tas to neredzēs Å”ajā ierÄ«cē. Lai atrisinātu Å”o problēmu, jums ir jāizveido sistēmas pakalpojums, kas ievietos Å”o failu ierÄ«cē /dev/loop1 kad tiek sāknēta resursdatora sistēma.

Izveidosim vienÄ«ba faila tips apkalpoÅ”ana Š² /etc/systemd/system/ SystemD inicializācijas sistēmai:

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

Pakalpojuma aktivizēŔana:

sudo systemctl enable lxd-hddpool

Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service ā†’ /etc/systemd/system/lxd-hddpool.service.

Pēc resursdatora sistēmas restartÄ“Å”anas mēs pārbaudām pakalpojuma statusu:

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).

No izvades mēs varam pārbaudīt, vai pakalpojuma stāvoklis ir aktīvs, neskatoties uz to, ka mūsu skripta izpilde no vienas komandas tika pabeigta, opcija ļāva mums to izdarīt RemainAfterExit=true.

DroŔība. Konteinera privilēģijas ^

Tā kā visi konteineru procesi faktiski darbojas izolēti resursdatora sistēmā, izmantojot tās kodolu, lai vēl vairāk aizsargātu konteineru procesu piekļuvi resursdatora sistēmai, LXD piedāvā procesa privilēģijas, kur:

  • Priviliģēti konteineri - tie ir konteineri, kuros procesi ar UID un GID atbilst vienam un tam paÅ”am Ä«paÅ”niekam kā resursdatora sistēmā. Piemēram, procesam, kas darbojas konteinerā ar UID 0, ir visas tādas paÅ”as piekļuves tiesÄ«bas kā procesam resursdatora sistēmā ar UID 0. Citiem vārdiem sakot, saknes lietotājam konteinerā ir visas tiesÄ«bas ne tikai konteinerā, bet arÄ« resursdatora sistēmā, ja viņŔ var iziet ārpus konteinera izolētās nosaukumvietas.

  • Nepriviliģēti konteineri - tie ir konteineri, kuros procesi pieder UID un GID Ä«paÅ”niekam ar numuru no 0 lÄ«dz 65535, bet saimnieksistēmai Ä«paÅ”nieks tiek maskēts, izmantojot attiecÄ«gi pievienotos SubUID un SubGID bitus. Piemēram, lietotājs ar UID=0 konteinerā tiks rādÄ«ts resursdatora sistēmā kā SubUID + UID. Tas aizsargā resursdatora sistēmu, jo, ja kāds process konteinerā spēj izvairÄ«ties no izolētās nosaukumvietas, tas var sazināties ar resursdatora sistēmu tikai kā process ar nezināmu, ļoti augstu UID/GID.

Pēc noklusējuma jaunizveidotajiem konteineriem ir nepieŔķirts statuss, tāpēc mums ir jādefinē SubUID un SubGID.

Izveidosim divus konfigurācijas failus, kuros iestatīsim attiecīgi SubUID un SubGID masku:

sudo touch /etc{/subuid,/subgid}
sudo usermod --add-subuids 1000000-1065535 root 
sudo usermod --add-subgids 1000000-1065535 root

Lai lietotu izmaiņas, LXD pakalpojums ir jārestartē:

sudo systemctl restart lxd

Virtuālā tīkla slēdža izveide ^

Tā kā mēs iepriekÅ” inicializējām tÄ«klu, izmantojot inicializācijas vedni lxd init un izveidoja tÄ«kla ierÄ«ci lxdbr0, tad Å”ajā sadaļā mēs vienkārÅ”i iepazÄ«simies ar tÄ«klu veidoÅ”anu LXD un kā izveidot virtuālo slēdzi (tiltu), izmantojot klienta komandu.

Šī diagramma parāda, kā slēdzis (tilts) savieno resursdatoru un konteinerus tīklā:

LXD - Linux konteineru sistēmu pamatfunkcijas

Konteineri var sazināties, izmantojot tÄ«klu, ar citiem konteineriem vai resursdatoru, kurā Å”ie konteineri tiek apkalpoti. Lai to izdarÄ«tu, konteineru virtuālās tÄ«kla kartes ir jāsaista ar virtuālo slēdzi. Vispirms mēs izveidosim slēdzi, un konteinera tÄ«kla saskarnes tiks saistÄ«tas nākamajās nodaļās pēc paÅ”a konteinera izveides.

Å Ä« komanda izveido slēdzi ar apakÅ”tÄ«klu 10.0.5.0/24 un IPv4 adrese 10.0.5.1/24, kā arÄ« ietver ipv4.nat lai konteineri varētu piekļūt internetam, izmantojot resursdatoru, izmantojot NAT pakalpojumu:

lxc network create lxdbr0 ipv4.address=10.0.5.1/24 ipv4.nat=true ipv6.address=none

LXD pieejamo tīkla ierīču saraksta pārbaude:

lxc network list

+--------+----------+---------+-------------+---------+
|  NAME  |   TYPE   | MANAGED | DESCRIPTION | USED BY |
+--------+----------+---------+-------------+---------+
| eno1   | physical | NO      |             | 0       |
+--------+----------+---------+-------------+---------+
| lxdbr0 | bridge   | YES     |             | 0       |
+--------+----------+---------+-------------+---------+

Varat arī pārbaudīt, vai tīkla ierīce ir izveidota, izmantojot Linux izplatīŔanas standarta rīku - ip link vai ip addr:

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 0

Konfigurācijas profils ^

Katram konteineram LXD ir sava konfigurācija, un to var paplaÅ”ināt ar globāli deklarētām konfigurācijām, ko sauc konfigurācijas profili. Konfigurācijas profilu pielietoÅ”anai konteineram ir kaskādes modelis. To parāda Ŕāds piemērs:

LXD - Linux konteineru sistēmu pamatfunkcijas

Å ajā piemērā LXD sistēmā ir izveidoti trÄ«s profili: default, hddpool Šø hostfs. Visi trÄ«s profili tiek lietoti konteineram, kuram ir lokāla konfigurācija (pelēkā zona). Profils default ir ierÄ«ce root kam ir parametrs pool ir vienāds ar ssdpool, bet, pateicoties kaskādes konfigurācijas lietojumprogrammas modelim, mēs varam piemērot konteineram profilu hddpool kam ir parametrs pool aizstās to paÅ”u parametru no profila default un konteiners saņems ierÄ«ces konfigurāciju root ar parametru pool vienāds hddpoolun profilu hostfs vienkārÅ”i pievieno konteineram jaunu ierÄ«ci.

Lai skatītu pieejamo konfigurācijas profilu sarakstu, izmantojiet Ŕo komandu:

lxc profile list

+---------+---------+
|  NAME   | USED BY |
+---------+---------+
| default | 1       |
+---------+---------+
| hddroot | 0       |
+---------+---------+
| ssdroot | 1       |
+---------+---------+

Pilnu pieejamo komandu sarakstu darbam ar profilu var iegūt, pievienojot atslēgu --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

Profila rediģēŔana ^

Noklusējuma konfigurācijas profils default nav tÄ«kla kartes konfigurācijas konteineram un visiem jaunizveidotajiem konteineriem nav tÄ«kla, tiem ir nepiecieÅ”ams izveidot lokālās (dedicētas) tÄ«kla ierÄ«ces ar atseviŔķu komandu, bet mēs varam izveidot globālā tÄ«kla ierÄ«ci konfigurācijā profils, kas tiks koplietots starp visiem konteineriem, kas izmanto Å”o profilu. Tādā veidā tÅ«lÄ«t pēc komandas izveidot jaunu konteineru viņiem bÅ«s tÄ«kls ar piekļuvi tÄ«klam. Tajā paŔā laikā nav nekādu ierobežojumu, mēs vienmēr varam izveidot lokālā tÄ«kla ierÄ«ci vēlāk, ja nepiecieÅ”ams.

Šī komanda pievienos ierīci konfigurācijas profilam eth0 tips nic savienots ar tīklu lxdbr0:

lxc profile device add default eth0 nic network=lxdbr0 name=eth0

Ir svarÄ«gi atzÄ«mēt, ka, tā kā mēs faktiski pievienojām ierÄ«ci konfigurācijas profilam, ja ierÄ«cē norādÄ«jām statisku IP adresi, tad visiem konteineriem, kas izmantos Å”o profilu, bÅ«s viena IP adrese. Ja ir nepiecieÅ”ams izveidot konteineru ar konteineram pieŔķirtu statisku IP adresi, tÄ«kla ierÄ«ces konfigurācija ir jāizveido konteinera lÄ«menÄ« (lokālā konfigurācija) ar IP adreses parametru, nevis profila lÄ«menÄ«.

Pārbaudīsim profilu:

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: []

Šajā profilā redzams, ka visiem jaunizveidotajiem konteineriem tiks izveidotas divas ierīces:

  • eth0 ā€” IerÄ«ces veids nic savienots ar slēdzi (tÄ«kla tilts) lxdbr0
  • root ā€” IerÄ«ces veids disk kas izmanto uzglabāŔanas baseinu ssdpool

Jaunu profilu izveide ^

Lai izmantotu iepriekŔ izveidoto UzglabāŔanas baseins konteinerus, izveidojiet konfigurācijas profilu ssdroot kurā pievienosim tādu ierīci kā disk ar stiprinājuma punktu / (sakne), izmantojot iepriekŔ izveidoto UzglabāŔanas baseins Sākot no ssdpool:

lxc profile create ssdroot
lxc profile device add ssdroot root disk path=/ pool=ssdpool

LÄ«dzÄ«gi mēs izveidojam lÄ«dzÄ«gu ierÄ«ci disk, bet Å”ajā gadÄ«jumā izmantojot UzglabāŔanas baseins Sākot no hddpool:

lxc profile create hddroot
lxc profile device add hddroot root disk path=/ pool=hddpool

Konfigurācijas profilu pārbaude:

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: []

Attēlu krātuve ^

Konteineri tiek izveidoti no attēliem, kas ir Ä«paÅ”i samontēti izplatÄ«jumi, kuriem nav Linux kodola. Tāpēc pirms konteinera palaiÅ”anas tas ir jāizvieto no Ŕī attēla. Attēlu avots ir lokāla repozitorija, kurā attēli tiek lejupielādēti no ārējām krātuvēm.

Attālās attēlu krātuves ^

Pēc noklusējuma LXD ir konfigurēts attēlu saņemÅ”anai no trim attāliem avotiem:

  • ubuntu: (stabiliem Ubuntu attēliem)
  • ubuntu-dienas: (ikdienas Ubuntu attēliem)
  • attēli: (vairākiem citiem izplatÄ«Å”anas veidiem)

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    |
+-----------------+------------------------------------------+--------+--------+

Piemēram, repozitorijs ubuntu: ir Ŕādi attēli:

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  |
+----------------------------------------------+--------------+----------+------------+

Lai parādÄ«tu ierobežotu skaitu kolonnu, mēs izmantojām Å”o opciju -c ar parametriem dasut, kā arÄ« ierobežoja saraksta garumu ar komandu head.

Lai parādÄ«tu attēlu sarakstu, ir pieejama filtrÄ“Å”ana. Nākamajā komandā tiks uzskaitÄ«tas visas pieejamās izplatÄ«Å”anas arhitektÅ«ras AlpineLinux:

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        |
+------------------------------+--------------------------------------+--------------+

Vietējā attēlu krātuve ^

Lai sāktu lietot konteineru, vietējam ir jāpievieno attēls no globālās krātuves local:. Tagad vietējā repozitorijs ir tukÅ”s, komanda par to pārliecināsies lxc image list. Ja metode list nenorādiet repozitoriju, tad pēc noklusējuma tiks izmantota vietējā repozitorija - local:

lxc image list local:

+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+

Repozitorijā esoÅ”ie attēli tiek pārvaldÄ«ti, izmantojot Ŕādas metodes:

Komanda
Apraksts

lxc attēls aizstājvārds
Pārvaldīt attēlu aizstājvārdus

lxc attēls kopija
Kopēt attēlus starp serveriem

lxc attēls izdzēst
Dzēst attēlus

lxc attēls rediģēt
Rediģēt attēla rekvizītus

lxc attēls eksportēt
Eksportējiet un lejupielādējiet attēlus

lxc attēls importēt
Importējiet attēlus attēlu veikalā

lxc attēls info
Parādiet noderīgu informāciju par attēliem

lxc attēls saraksts
Saraksta attēlus

lxc attēls atsvaidzināt
Atsvaidziniet attēlus

lxc attēls Rādīt
Rādīt attēla rekvizītus

Kopējiet attēlu uz lokālo repozitoriju no globālā images::

lxc image copy images:alpine/3.11/amd64 local: --alias=alpine3

Image copied successfully!

ParādÄ«sim visu lokālajā repozitorijā paÅ”laik pieejamo attēlu sarakstu local::

lxc image -c lfdatsu list local:

+---------+--------------+------------------------------------+--------------+
|  ALIAS  | FINGERPRINT  |            DESCRIPTION             | ARCHITECTURE |
+---------+--------------+------------------------------------+--------------+
| alpine3 | 73a3093d4a5c | Alpine 3.11 amd64 (20200220_13:00) | x86_64       |
+---------+--------------+------------------------------------+--------------+

LXD konfigurācija ^

Papildus interaktÄ«vajam režīmam LXD atbalsta arÄ« neinteraktÄ«vu konfigurācijas instalÄ“Å”anas režīmu, tas ir, kad konfigurācija tiek norādÄ«ta YAML faila formā, kas ir Ä«paÅ”s formāts, kas ļauj instalēt visu konfigurāciju uzreiz, apejot izpildi. no daudzām interaktÄ«vajām komandām, kas tika apspriestas iepriekÅ” Å”ajā rakstā, tostarp tÄ«kla konfigurācija, konfigurācijas profilu izveide utt. Mēs Å”eit neaptveram Å”o jomu, varat to pārbaudÄ«t pats. dokumentācijā.

Nākamā interaktÄ«vā komanda lxc config kuru mēs apskatÄ«sim, ļauj iestatÄ«t konfigurāciju. Piemēram, lai nodroÅ”inātu, ka lokālajā repozitorijā lejupielādētie attēli netiek automātiski atjaunināti no globālajiem repozitorijiem, mēs varam iespējot Å”o darbÄ«bu ar Ŕādu komandu:

lxc config set images.auto_update_cached=false

Konteinera izveide un pārvaldīŔana ^

Lai izveidotu konteineru, izmantojiet komandu lxc init kam tiek nodotas vērtÄ«bas рŠµŠæŠ¾Š·ŠøтŠ¾Ń€ŠøŠ¹:Š¾Š±Ń€Š°Š· un pēc tam vajadzÄ«go konteinera ID. Repozitoriju var norādÄ«t kā lokālu local: tāpat ir jebkura globāla. Ja repozitorijs nav norādÄ«ts, pēc noklusējuma attēla meklÄ“Å”anai tiek izmantots lokālais repozitorijs. Ja attēls ir norādÄ«ts no globālās repozitorijas, attēls vispirms tiks lejupielādēts lokālajā repozitorijā un pēc tam izmantots konteinera izveidei.

Izpildīsim Ŕo komandu, lai izveidotu savu pirmo konteineru:

lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddroot

ApskatÄ«sim Å”eit izmantotos komandu taustiņus secÄ«bā:

  • alpine3 ā€” Attēlam, kas iepriekÅ” tika augÅ”upielādēts vietējā repozitorijā, ir norādÄ«ts aizstājvārds (alias). Ja Å”im attēlam nav izveidots aizstājvārds, vienmēr varat atsaukties uz attēlu pēc tā pirksta nospiedums kas tiek parādÄ«ts tabulā.
  • alp ā€” Iestata konteinera identifikatoru
  • --storage ā€” Å is taustiņŔ norāda, kurā UzglabāŔanas baseins tiks izveidots konteiners
  • --profile ā€” Å Ä«s atslēgas kaskādes lieto konteinerā konfigurāciju no iepriekÅ” izveidotajiem konfigurācijas profiliem

Mēs palaižam konteineru, kas sāk palaist izplatÄ«Å”anas init sistēmu:

lxc start alp

Varat arÄ« izmantot komandu lxc launch kas ļauj apvienot komandas lxc init Šø lxc start vienā operācijā.

Konteinera stāvokļa pārbaude:

lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME |  STATE  |       IPV4       | IPV6 |   TYPE    | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp  | RUNNING | 10.0.5.46 (eth0) |      | CONTAINER | hddpool      |
+------+---------+------------------+------+-----------+--------------+

Konteinera konfigurācijas pārbaude:

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: ""

Sadaļā profiles mēs varam pārliecināties, ka Å”is konteiners izmanto divus konfigurācijas profilus āˆ’ default Šø hddroot. Sadaļā devices mēs varam noteikt tikai vienu ierÄ«ci, jo tÄ«kla ierÄ«ce tika izveidota profila lÄ«menÄ« default. Lai redzētu visas konteinera izmantotās ierÄ«ces, jāpievieno atslēga --expanded:

lxc config show alp --expanded

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:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic
  root:
    path: /
    pool: hddpool
    type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""

Statiskas IP adreses iestatīŔana ^

Ja mēģinām iestatīt IP adresi tīkla ierīcei eth0 komanda lxc config device set alp paredzēts konteinera konfigurācijai, tad saņemsim kļūdu, kas ziņos, ka ierīce neeksistē, jo ierīce eth0 ko izmanto konteiners pieder profilam default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Mēs, protams, varam iestatÄ«t statisku IP adresi eth0 ierÄ«ces profilā, taču tas bÅ«s vienāds visiem konteineriem, kas izmantos Å”o profilu. Tāpēc pievienosim konteineram paredzētu ierÄ«ci:

lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5

Pēc tam jums ir jārestartē konteiners:

lxc restart alp

Ja mēs tagad skatāmies uz konteinera konfigurāciju, mums Ŕī opcija nav jāizmanto --expanded lai redzētu tÄ«kla ierÄ«ci eth0, jo mēs to izveidojām konteinera lÄ«menÄ«, un tas tika kaskādēts pa to paÅ”u ierÄ«ci no profila 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: ""

Konteinera noņemÅ”ana ^

Lai noņemtu konteineru, izmantojiet komandu lxc delete, bet pirms konteinera izņemÅ”anas tas ir jāaptur, izmantojot komandu lxc stop:

lxc stop alp

lxc list

+------+---------+-------------------+------+-----------+-----------+
| NAME |  STATE  |       IPV4        | IPV6 |   TYPE    | SNAPSHOTS |
+------+---------+-------------------+------+-----------+-----------+
| alp  | STOPPED | 10.0.5.10 (eth0)  |      | CONTAINER | 0         |
+------+---------+-------------------+------+-----------+-----------+

Pēc tam, kad esam pārliecinājuÅ”ies, ka konteinera stāvoklis ir kļuvis STOPPED, to var noņemt no UzglabāŔanas baseins:

lxc delete alp

Piekļuve konteineram ^

Lai izpildÄ«tu komandas konteinerā tieÅ”i, apejot tÄ«kla savienojumus, izmantojiet komandu lxc exec kas izpilda komandas konteinerā, nepalaižot sistēmas čaulu. Ja jums ir jāizpilda komanda čaulā, izmantojot čaulas modeļus, piemēram, mainÄ«gos, failu pāradresācijas (caurule) utt., Jums ir skaidri jāpalaiž apvalks un jānodod komanda kā atslēga, piemēram:

lxc exec alp -- /bin/sh -c "echo $HOME"

Komandā tika izmantota Ä«paÅ”a atkāpÅ”anās rakstzÄ«me par Ä«paÅ”u raksturu $ lai mainÄ«gais $HOME netika interpretēts resursdatorā, bet tika interpretēts tikai konteinera iekÅ”pusē.

Ir iespējams arī sākt interaktīvo čaulas režīmu un pēc tam beigt sesiju, izpildot karsto taustiņu CTRL+D:

lxc exec alp -- /bin/sh

Konteineru resursu pārvaldība ^

Programmā LXD varat pārvaldīt konteinera resursus, izmantojot īpaŔu konfigurācijas kopu. Pilns konteinera konfigurācijas parametru saraksts ir atrodams dokumentācijā.

RAM resursu ierobežojums ^

Parametrs limits.memory ierobežo konteineram pieejamās RAM apjomu. Vērtība ir skaitlis un viens no pieejamie sufiksi.

Iestatīsim konteinera RAM ierobežojumu uz 256 MB:

lxc config set alp limits.memory 256MB

Ir arÄ« citi atmiņas ierobežoÅ”anas parametri:

  • limits.memory.enforce
  • limits.memory.hugepages
  • limits.memory.swap
  • limits.memory.swap.priority

Komanda lxc config show ļauj parādīt visu konteinera konfigurāciju, tostarp lietoto resursu ierobežojumu, kas tika iestatīts:

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: ""

CPU resursu ierobežojums ^

Ir vairāki veidi, kā ierobežot CPU resursus. ierobežojumu veidi:

  • limit.cpu - saista konteineru ar vienu vai vairākiem CPU kodoliem
  • limits.cpu.allowance - pārvalda vai nu CFS plānotāja kvotas, kad ir pagājis laika ierobežojums, vai universālo CPU resursu koplietoÅ”anas mehānismu, kad ir pagājis procents
  • limits.cpu.priority - plānotāja prioritāte, ja vairākiem gadÄ«jumiem, kas koplieto procesoru kopu, tiek pieŔķirts vienāds procesoru procentuālais daudzums

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: ""

Diska vietas ierobežojums ^

Papildus ierobežojumiem, piemēram limits.read, limits.write mēs varam arī ierobežot konteinera patērētās diska vietas daudzumu (darbojas tikai ar ZFS vai BTRFS):

lxc config device set alp root size=2GB

Pēc uzstādÄ«Å”anas parametrā devices.root.size Mēs varam pārbaudÄ«t noteikto limitu:

lxc config show alp
...
devices:
  root:
    path: /
    pool: hddpool
    size: 2GB
    type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""

Lai skatītu izmantotās diska kvotas, mēs varam iegūt no komandas 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

Neskatoties uz to, ka konteinera saknes ierÄ«cei esam iestatÄ«juÅ”i ierobežojumu lÄ«dz 2 GB, sistēmas utilÄ«tas, piemēram, df neredzēs Å”o ierobežojumu. Lai to izdarÄ«tu, mēs veiksim nelielu pārbaudi un uzzināsim, kā tas darbojas.

Izveidosim 2 jaunus identiskus konteinerus tajā paŔā UzglabāŔanas baseins (hddpool):

lxc init alpine3 alp1 --storage=hddpool --profile=default --profile=hddroot
lxc init alpine3 alp2 --storage=hddpool --profile=default --profile=hddroot

lxc 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         |
+------+---------+------------------+------+-----------+-----------+

Izveidosim 1 GB failu vienā no konteineriem:

lxc exec alp1 -- dd if=/dev/urandom of=file.img bs=1M count=1000

Pārliecināsimies, ka fails ir izveidots:

lxc exec alp1 -- ls -lh
total 1000M  
-rw-r--r--    1 root     root     1000.0M Mar 27 10:16 file.img

Ja mēs skatāmies otrajā konteinerā, pārbaudiet, vai tajā paŔā vietā nav faila, tad Ŕī faila tur nebÅ«s, kas ir sagaidāms, jo konteineri tiek izveidoti atseviŔķi. Krātuves apjoms tajā paŔā UzglabāŔanas baseins:

lxc exec alp2 -- ls -lh
total 0

Bet salīdzināsim tās radītās vērtības df uz viena un otra konteinera:

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% /
...

IerÄ«ce /dev/loop1 uzstādÄ«ts kā saknes nodalÄ«jums UzglabāŔanas baseins ko izmanto Å”ie konteineri, tāpēc to tilpums tiek sadalÄ«ts starp diviem.

Resursu patēriņa statistika ^

Varat skatīt konteinera resursu patēriņa statistiku, izmantojot komandu:

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: 0

Darbs ar momentuzņēmumiem ^

LXD ir iespēja izveidot momentuzņēmumus un atjaunot no tiem konteinera stāvokli.

Lai izveidotu momentuzņēmumu, palaidiet Ŕādu komandu:

lxc snapshot alp snapshot1

Komanda lxc snapshot nav pieejama atslēga listtāpēc, lai skatītu momentuzņēmumu sarakstu, ir jāizmanto komanda, kas parāda vispārīgu informāciju par konteineru:

lxc info alp
...
...
Snapshots:
  snapshot1 (taken at 2020/04/08 18:18 UTC) (stateless)

Varat atjaunot konteineru no momentuzņēmuma, izmantojot komandu lxc restore norādot konteineru, kuram tiks veikta atjaunoÅ”ana, un momentuzņēmuma aizstājvārdu:

lxc restore alp snapshot1

Lai dzēstu momentuzņēmumu, tiek izmantota Ŕāda komanda. LÅ«dzu, ņemiet vērā, ka komandu sintakse nav lÄ«dzÄ«ga visām citām; Å”eit pēc konteinera nosaukuma ir jānorāda slÄ«psvÄ«tra. Ja slÄ«psvÄ«tra ir izlaista, momentuzņēmuma dzÄ“Å”anas komanda tiek interpretēta kā konteinera dzÄ“Å”anas komanda!

lxc delete alp/snapshot1

IepriekÅ” minētajā piemērā mēs apskatÄ«jām tā sauktos bezvalstnieku momentuzņēmumus. LXD ir cita veida momentuzņēmumi - statusful, kas saglabā visu konteinerā esoÅ”o procesu paÅ”reizējo stāvokli. Ar statusu saturoÅ”iem momentuzņēmumiem ir saistÄ«tas vairākas interesantas un noderÄ«gas funkcijas.

Kas vēl? ^

  • Python izstrādātājiem ir pieejams modulis PyLXD kas nodroÅ”ina API LXD

ATJAUNINĀJUMS 10.04.2020/15/00 XNUMX:XNUMX: Pievienota navigācija

Avots: www.habr.com

Pievieno komentāru