Základné vlastnosti kontajnerových systémov LXD - Linux

Základné vlastnosti kontajnerových systémov LXD - Linux

LXD je správca kontajnerov systému novej generácie, ako sa hovorí zdroj. Ponúka používateľské rozhranie podobné virtuálnym strojom, ale namiesto toho používa kontajnery Linux.

jadro LXD je privilegovaný démon (služba bežiaca s právami root), ktorý poskytuje REST API prostredníctvom lokálneho unixového soketu, ako aj cez sieť, ak je nainštalovaná vhodná konfigurácia. Klienti, ako napríklad nástroj príkazového riadka dodávaný s LXD, zadávajú požiadavky prostredníctvom tohto REST API. To znamená, že či už pristupujete k lokálnemu hostiteľovi alebo k vzdialenému hostiteľovi, všetko funguje rovnako.

V tomto článku sa nebudeme podrobne zaoberať konceptmi LXD, nebudeme brať do úvahy všetky dostupné možnosti uvedené v dokumentácii, vrátane nedávnej implementácie podpory virtuálnych strojov QEMU v najnovších verziách LXD súbežne s kontajnermi. Namiesto toho sa naučíme len základy správy kontajnerov – nastavenie úložných oblastí, vytváranie sietí, spustenie kontajnera, uplatňovanie limitov zdrojov a ako používať snímky, aby ste mohli získať základné informácie o LXD a používať kontajnery v systéme Linux.

Úplné informácie nájdete v oficiálnom zdroji:

Navigácia

Inštalácia LXD ^

Inštalácia LXD na distribúcie Ubuntu ^

V distribučnom balíku Ubuntu 19.10 lxd má zapnuté vysielanie snap balíček:

apt search lxd

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

To znamená, že sa nainštalujú dva balíky naraz, jeden ako systémový balík a druhý ako snap balík. Inštalácia dvoch balíkov do systému môže spôsobiť problém, pri ktorom sa systémový balík môže stať sirotou, ak ho odstráni správca balíkov snap.

Nájsť balíček lxd v úložisku snap môžete použiť nasledujúci príkaz:

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

Spustením príkazu list môžete sa uistiť, že balík lxd ešte nenainštalované:

snap list

Name  Version    Rev   Tracking  Publisher   Notes
core  16-2.43.3  8689  stable    canonical✓  core

Napriek tomu, že LXD je snap balík, musí byť nainštalovaný cez systémový balík lxd, ktorý vytvorí v systéme zodpovedajúcu skupinu, potrebné utility v /usr/bin atď

sudo apt update
sudo apt install lxd

Uistite sa, že balík je nainštalovaný ako balík snap:

snap list

Name  Version    Rev    Tracking  Publisher   Notes
core  16-2.43.3  8689   stable    canonical✓  core
lxd   3.21       13474  stable/…  canonical✓  -

Inštalácia LXD na distribúcie Arch Linux ^

Ak chcete nainštalovať balík LXD do systému, musíte spustiť nasledujúce príkazy, prvý aktualizuje zoznam balíkov v systéme dostupných v úložisku, druhý priamo nainštaluje balík:

sudo pacman -Syyu && sudo pacman -S lxd

Po nainštalovaní balíka, aby mohol LXD spravovať bežný používateľ, musí byť pridaný do systémovej skupiny lxd:

sudo usermod -a -G lxd user1

Uistime sa, že používateľ user1 pridané do skupiny lxd:

id -Gn user1

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

Ak skupina lxd sa v zozname nezobrazuje, potom musíte znova aktivovať reláciu používateľa. Ak to chcete urobiť, musíte sa odhlásiť a prihlásiť pod rovnakým používateľom.

Aktivovať v systemd načítanie služby LXD pri štarte systému:

sudo systemctl enable lxd

Začnime službu:

sudo systemctl start lxd

Kontrola stavu služby:

sudo systemctl status lxd

Úložisko LXD (úložisko) ^

Pred začatím inicializácie musíme pochopiť, ako je úložisko v LXD logicky usporiadané.

Úložisko (Uskladnenie) pozostáva z z jedného alebo viacerých Skladovací bazén ktorý používa jeden z podporovaných súborových systémov ako ZFS, BTRFS, LVM alebo bežné adresáre. Každý Skladovací bazén je rozdelená na zväzky (Objem úložiska), ktoré obsahujú obrázky, kontajnery alebo údaje na iné účely.

  • obraznosť - sú to špeciálne zostavené distribúcie bez linuxového jadra a dostupné z externých zdrojov
  • kontajnery - toto sú nasadené distribúcie z obrázkov, pripravené na použitie
  • Snímky - toto sú snímky stavu kontajnerov, do ktorých sa môžete vrátiť

Základné vlastnosti kontajnerových systémov LXD - Linux

Ak chcete spravovať úložisko v LXD, použite príkaz lxc storage certifikát, ktorý môžete získať zadaním kľúča - lxc storage --help

Nasledujúci príkaz zobrazí zoznam všetkých Skladovací bazén v úložisku LXD:

lxc storage list

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

Ak chcete zobraziť zoznam všetkých Objem úložiska vo vybranom Skladovací bazén slúži tímu 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       |
+-----------+----------------------------------+-------------+---------+

Tiež, ak pre Skladovací bazén Pri vytváraní bol vybratý súborový systém BTRFS a potom získať zoznam Objem úložiska alebo čiastkové zväzky v interpretácii BTRFS môžete použiť sadu nástrojov tohto súborového systému:

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

Inicializuje sa LXD ^

Pred vytvorením a použitím kontajnerov musíte vykonať všeobecnú inicializáciu LXD, ktorá vytvorí a nakonfiguruje sieť a úložný priestor. Toto je možné vykonať manuálne pomocou štandardných klientskych príkazov, ktoré sú dostupné v zozname vyvolaním príkazu lxc --help alebo pomocou sprievodcu inicializáciou lxd init zodpovedanie niekoľkých otázok.

Výber systému súborov pre úložnú oblasť ^

Počas inicializácie sa LXD pýta na niekoľko otázok vrátane určenia predvoleného typu systému súborov Skladovací bazén. Štandardne je preň vybraný súborový systém BTRFS. Po vytvorení nebude možné prejsť na iný FS. Na výber FS sa odporúča porovnávacia tabuľka funkcií:

Vlastnosti
adresár
Btrfs
LVM
ZFS
CEPH

Optimalizované ukladanie obrázkov
žiadny
Áno
Áno
Áno
Áno

Optimalizované vytváranie inštancií
žiadny
Áno
Áno
Áno
Áno

Optimalizované vytváranie snímok
žiadny
Áno
Áno
Áno
Áno

Optimalizovaný prenos obrazu
žiadny
Áno
žiadny
Áno
Áno

Optimalizovaný prenos inštancií
žiadny
Áno
žiadny
Áno
Áno

Kopírovať pri zápise
žiadny
Áno
Áno
Áno
Áno

Na základe bloku
žiadny
žiadny
Áno
žiadny
Áno

Okamžité klonovanie
žiadny
Áno
Áno
Áno
Áno

Ovládač úložiska použiteľný v kontajneri
Áno
Áno
žiadny
žiadny
žiadny

Obnoviť zo starších snímok (nie najnovších)
Áno
Áno
Áno
žiadny
Áno

Kvóty úložiska
Áno(*)
Áno
Áno
Áno
žiadny

Inicializácia siete a úložnej oblasti pomocou sprievodcu ^

Ďalší príkaz, na ktorý sa pozrieme, navrhuje nastavenie hlavných komponentov LXD zodpovedaním jednoduchých otázok pomocou sprievodcu inicializáciou.

Spustiť príkaz lxc init a zadajte odpovede na otázky za dvojbodkou, ako je uvedené v príklade nižšie, alebo ich zmeňte podľa svojich podmienok:

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

Vytvorenie ďalšej úložnej oblasti ^

V predchádzajúcom kroku sme vytvorili Skladovací bazén ktorý dostal meno ssdpool a ktorého súbor sa nachádza v mojom systéme na adrese /var/lib/lxd/disks/ssdpool.img. Táto adresa systému súborov zodpovedá fyzickému disku SSD v mojom počítači.

Nasledujúce akcie na rozšírenie pochopenia úlohy, ktorú zohrávajú Skladovací bazén v úložisku vytvoríme druhý Skladovací bazén ktorý bude fyzicky umiestnený na inom type disku, HDD. Problém je, že LXD vám neumožňuje vytvárať Skladovací bazén mimo adresy /var/lib/lxd/disks/ a dokonca ani symbolické odkazy nebudú fungovať, pozri odpoveď vývojára. Toto obmedzenie môžeme obísť pri inicializácii/formátovaní Skladovací bazén zadaním hodnoty ako blokového zariadenia namiesto cesty k súboru spätnej slučky zadaním tejto hodnoty v kľúči source.

Takže pred vytvorením Skladovací bazén musíte definovať súbor spätnej slučky alebo existujúci oddiel vo vašom súborovom systéme, ktorý bude používať. Na tento účel vytvoríme a použijeme súbor, ktorého veľkosť obmedzíme na 10 GB:

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

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

Pripojme súbor spätnej slučky k voľnému zariadeniu so spätnou slučkou:

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

/dev/loop1

Vďaka kľúču --show vykonaním príkazu sa na obrazovku vráti názov zariadenia, ku ktorému je pripojený náš súbor so spätnou väzbou. V prípade potreby môžeme zobraziť zoznam všetkých zaneprázdnených zariadení tohto typu, aby sme sa uistili, že naše akcie sú správne:

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

Zo zoznamu môžete zistiť, že zariadenie má /dev/loop1 zahrnutý súbor so spätnou slučkou /mnt/work/lxd/hddpool.imga v zariadení /dev/loop0 zahrnutý súbor so spätnou slučkou /var/lib/lxd/disks/ssdpool.img čo zodpovedá predvolenému Skladovací bazén.

Nasledujúci príkaz vytvorí nový Skladovací bazén v LXD na základe súboru spätnej slučky, ktorý sme práve pripravili. LXD naformátuje súbor spätnej slučky /mnt/work/lxd/hddpool.img v zariadení /dev/loop1 pre súborový systém BTRFS:

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

Ukážme si zoznam všetkých Skladovací bazén na obrazovku:

lxc storage list

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

Zväčšenie veľkosti úložného priestoru ^

Po vytvorení Skladovací bazén, v prípade potreby je možné ho rozšíriť. Pre Skladovací bazén na základe súborového systému BTRFS spustite nasledujúce príkazy:

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

Automatické vloženie súboru so spätnou slučkou do slotu zariadenia so spätnou slučkou ^

Máme jeden malý problém, pri reštarte hostiteľského systému, súbor /mnt/work/lxd/hddpool.img "vyletí" zo zariadenia /dev/loop1 a služba LXD pri načítaní spadne, pretože ju v tomto zariadení neuvidí. Na vyriešenie tohto problému musíte vytvoriť systémovú službu, ktorá vloží tento súbor do zariadenia /dev/loop1 pri zavádzaní hostiteľského systému.

Poďme tvoriť jednotka typ súboru služba в /etc/systemd/system/ pre inicializačný systém SystemD:

cat << EOF | sudo tee -a /etc/systemd/system/lxd-hddpool.service
[Unit]
Description=Losetup LXD Storage Pool (hddpool)
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img
RemainAfterExit=true

[Install]
WantedBy=local-fs.target
EOF

Aktivujte si službu:

sudo systemctl enable lxd-hddpool

Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.

Po reštarte hostiteľského systému skontrolujeme stav služby:

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

Z výstupu môžeme overiť, či je stav služby aktívny, napriek tomu, že spustenie nášho skriptu z jedného príkazu bolo dokončené, možnosť nám to umožnila RemainAfterExit=true.

Bezpečnosť. Kontajnerové privilégiá ^

Keďže všetky kontajnerové procesy skutočne bežia izolovane na hostiteľskom systéme pomocou jeho jadra, na ďalšiu ochranu prístupu kontajnerových procesov k hostiteľskému systému ponúka LXD privilégium procesu, kde:

  • Privilegované kontajnery - ide o kontajnery, v ktorých procesy s UID a GID zodpovedajú rovnakému vlastníkovi ako na hostiteľskom systéme. Napríklad proces spustený v kontajneri s UID 0 má všetky rovnaké prístupové práva ako proces na hostiteľskom systéme s UID 0. Inými slovami, užívateľ root v kontajneri má všetky práva nielen v kontajnera, ale aj na hostiteľskom systéme, ak môže ísť mimo izolovaného menného priestoru kontajnera.

  • Neprivilegované kontajnery - ide o kontajnery, v ktorých procesy patria vlastníkovi UID a GID s číslom od 0 do 65535, ale pre hostiteľský systém je vlastník maskovaný pomocou pridaných bitov SubUID a SubGID. Napríklad používateľ s UID=0 v kontajneri bude na hostiteľskom systéme videný ako SubUID + UID. To chráni hostiteľský systém, pretože ak niektorý proces v kontajneri dokáže uniknúť zo svojho izolovaného priestoru názvov, môže komunikovať s hostiteľským systémom iba ako proces s neznámym, veľmi vysokým UID/GID.

V predvolenom nastavení majú novovytvorené kontajnery neprivilegovaný stav, a preto musíme definovať SubUID a SubGID.

Vytvorme dva konfiguračné súbory, v ktorých nastavíme masku pre SubUID a SubGID:

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

Ak chcete použiť zmeny, musíte reštartovať službu LXD:

sudo systemctl restart lxd

Vytvorenie virtuálneho sieťového prepínača ^

Keďže sme predtým inicializovali sieť pomocou sprievodcu inicializáciou lxd init a vytvorili sieťové zariadenie lxdbr0, potom sa v tejto časti jednoducho zoznámime so sieťovaním v LXD a ako vytvoriť virtuálny switch (bridge) pomocou príkazu client.

Nasledujúci diagram ukazuje, ako prepínač (most) spája hostiteľa a kontajnery do siete:

Základné vlastnosti kontajnerových systémov LXD - Linux

Kontajnery môžu komunikovať cez sieť s inými kontajnermi alebo hostiteľom, na ktorom sa tieto kontajnery obsluhujú. Ak to chcete urobiť, musíte prepojiť virtuálne sieťové karty kontajnerov s virtuálnym prepínačom. Najprv vytvoríme prepínač a sieťové rozhrania kontajnera budú prepojené v nasledujúcich kapitolách po vytvorení samotného kontajnera.

Nasledujúci príkaz vytvorí prepínač s podsieťou 10.0.5.0/24 a IPv4 adresu 10.0.5.1/24, a tiež zahŕňa ipv4.nat aby kontajnery mohli pristupovať na internet cez hostiteľa pomocou služby NAT:

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

Kontrola zoznamu sieťových zariadení dostupných v LXD:

lxc network list

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

Môžete tiež overiť, že sieťové zariadenie bolo vytvorené pomocou štandardného nástroja distribúcie Linux - ip link alebo 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

Konfiguračný profil ^

Každý kontajner v LXD má svoju vlastnú konfiguráciu a môže ju rozšíriť o globálne deklarované konfigurácie tzv konfiguračné profily. Použitie konfiguračných profilov na kontajner má kaskádový model, čo ukazuje nasledujúci príklad:

Základné vlastnosti kontajnerových systémov LXD - Linux

V tomto príklade boli v systéme LXD vytvorené tri profily: default, hddpool и hostfs. Všetky tri profily sa aplikujú na kontajner, ktorý má lokálnu konfiguráciu (sivá oblasť). Profil default má zariadenie root ktorý má parameter pool je ssdpool, ale vďaka aplikačnému modelu kaskádovej konfigurácie môžeme na kontajner aplikovať profil hddpool ktorý má parameter pool prepíše rovnaký parameter z profilu default a kontajner dostane konfiguráciu zariadenia root s parametrom pool rovný hddpoola profil hostfs jednoducho pridá do kontajnera nové zariadenie.

Ak chcete zobraziť zoznam dostupných konfiguračných profilov, použite nasledujúci príkaz:

lxc profile list

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

Úplný zoznam dostupných príkazov na prácu s profilom možno získať pridaním kľúča --help:

lxc profile --help

Description:
  Manage profiles

Usage:
  lxc profile [command]

Available Commands:
  add         Add profiles to instances
  assign      Assign sets of profiles to instances
  copy        Copy profiles
  create      Create profiles
  delete      Delete profiles
  device      Manage instance devices
  edit        Edit profile configurations as YAML
  get         Get values for profile configuration keys
  list        List profiles
  remove      Remove profiles from instances
  rename      Rename profiles
  set         Set profile configuration keys
  show        Show profile configurations
  unset       Unset profile configuration keys

Úprava profilu ^

Predvolený konfiguračný profil default nemá konfiguráciu sieťovej karty pre kontajner a všetky novovytvorené kontajnery nemajú sieť, pre ne je potrebné vytvoriť lokálne (dedikované) sieťové zariadenia samostatným príkazom, ale v konfigurácii môžeme vytvoriť globálne sieťové zariadenie profil, ktorý bude zdieľaný medzi všetkými kontajnermi používajúcimi tento profil. Takto hneď po príkaze na vytvorenie nového kontajnera budú mať sieť so sieťovým prístupom. Zároveň neexistujú žiadne obmedzenia, v prípade potreby môžeme kedykoľvek neskôr vytvoriť lokálne sieťové zariadenie.

Nasledujúci príkaz pridá zariadenie do konfiguračného profilu eth0 typ nic pripojený k sieti lxdbr0:

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

Je dôležité poznamenať, že keďže sme zariadenie skutočne pridali do konfiguračného profilu, ak sme v zariadení zadali statickú IP adresu, všetky kontajnery, ktoré budú tento profil používať, budú zdieľať rovnakú IP adresu. Ak je potrebné vytvoriť kontajner so statickou IP adresou pridelenou kontajneru, potom by ste mali vytvoriť konfiguráciu sieťového zariadenia na úrovni kontajnera (lokálna konfigurácia) s parametrom IP adresa, a nie na úrovni profilu.

Pozrime sa na profil:

lxc profile show default

config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic
  root:
    path: /
    pool: ssdpool
    type: disk
name: default
used_by: []

V tomto profile vidíme, že pre všetky novovytvorené kontajnery sa vytvoria dve zariadenia:

  • eth0 - Typ zariadenia nic pripojený k prepínaču (sieťový most) lxdbr0
  • root - Typ zariadenia disk ktorá využíva skladový bazén ssdpool

Vytváranie nových profilov ^

Ak chcete použiť predtým vytvorené Skladovací bazén kontajnerov, vytvorte konfiguračný profil ssdroot do ktorého pridáme zariadenie ako disk s montážnym bodom / (root) pomocou predtým vytvoreného Skladovací bazén - ssdpool:

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

Podobne vytvoríme zariadenie ako disk, ale v tomto prípade pomocou Skladovací bazén - hddpool:

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

Kontrola konfiguračných profilov:

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

Úložisko obrázkov ^

Kontajnery sú vytvorené z obrazov, ktoré sú špeciálne zostavenými distribúciami, ktoré nemajú linuxové jadro. Preto pred spustením kontajnera musí byť nasadený z tohto obrazu. Zdrojom obrázkov je lokálne úložisko, do ktorého sa obrázky sťahujú z externých úložisk.

Vzdialené úložiská obrázkov ^

Štandardne je LXD nakonfigurovaný na príjem obrázkov z troch vzdialených zdrojov:

  • ubuntu: (pre stabilné obrázky Ubuntu)
  • ubuntu-denne: (pre denné obrázky Ubuntu)
  • snímky: (pre kopu iných distribúcií)

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

Napríklad úložisko ubuntu: má nasledujúce obrázky:

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

Na zobrazenie obmedzeného počtu stĺpcov sme použili túto možnosť -c s parametrami dasut, a tiež obmedzil dĺžku zoznamu pomocou príkazu head.

Na zobrazenie zoznamu obrázkov je k dispozícii filtrovanie. Nasledujúci príkaz zobrazí zoznam všetkých dostupných distribučných architektúr 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        |
+------------------------------+--------------------------------------+--------------+

Lokálne úložisko obrázkov ^

Ak chcete začať používať kontajner, musíte pridať obrázok z globálneho úložiska do lokálneho local:. Teraz je miestne úložisko prázdne, príkaz sa o to postará lxc image list. Ak metóda list nešpecifikujte úložisko, potom sa štandardne použije lokálne úložisko - local:

lxc image list local:

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

Obrázky v úložisku sa spravujú pomocou nasledujúcich metód:

Tím
Popis

lxc obrázok prezývka
Spravujte aliasy obrázkov

lxc obrázok kópie
Skopírujte obrázky medzi servermi

lxc obrázok vymazať
Odstrániť obrázky

lxc obrázok editovať
Upravte vlastnosti obrázka

lxc obrázok export
Exportujte a sťahujte obrázky

lxc obrázok import
Importujte obrázky do úložiska obrázkov

lxc obrázok Info
Zobrazte užitočné informácie o obrázkoch

lxc obrázok zoznam
Zoznam obrázkov

lxc obrázok Obnoviť
Obnoviť obrázky

lxc obrázok Ukázať
Zobraziť vlastnosti obrázka

Skopírujte obrázok do lokálneho úložiska z globálneho images::

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

Image copied successfully!

Zobrazme zoznam všetkých obrázkov, ktoré sú momentálne dostupné v lokálnom úložisku local::

lxc image -c lfdatsu list local:

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

Konfigurácia LXD ^

Okrem interaktívneho režimu podporuje LXD aj režim inštalácie neinteraktívnej konfigurácie, kedy je konfigurácia špecifikovaná vo forme súboru YAML, čo je špeciálny formát, ktorý vám umožňuje nainštalovať celú konfiguráciu naraz a obísť spustenie. z mnohých interaktívnych príkazov, o ktorých sa hovorilo vyššie v tomto článku, vrátane konfigurácie siete, vytvárania konfiguračných profilov atď. Tejto oblasti sa tu nebudeme venovať, môžete si to overiť sami. v dokumentácii.

Ďalší interaktívny príkaz lxc config na ktorý sa pozrieme vám umožňuje nastaviť konfiguráciu. Aby sme napríklad zabezpečili, že stiahnuté obrázky do lokálneho úložiska nebudú automaticky aktualizované z globálnych úložisk, môžeme toto správanie povoliť pomocou nasledujúceho príkazu:

lxc config set images.auto_update_cached=false

Vytvorenie a správa kontajnera ^

Na vytvorenie kontajnera použite príkaz lxc init ktorým sa odovzdávajú hodnoty репозиторий:образ a potom požadované ID pre kontajner. Úložisko môže byť špecifikované ako lokálne local: taký je každý globálny. Ak úložisko nie je zadané, potom sa na vyhľadávanie obrázka štandardne použije lokálny úložisko. Ak je obrázok zadaný z globálneho úložiska, obrázok sa najprv stiahne do lokálneho úložiska a potom sa použije na vytvorenie kontajnera.

Spustite nasledujúci príkaz na vytvorenie nášho prvého kontajnera:

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

Pozrime sa na príkazové klávesy, ktoré tu používame:

  • alpine3 — Pre obrázok, ktorý bol predtým nahraný do lokálneho úložiska, je zadaný alias (alias). Ak pre tento obrázok nebol vytvorený alias, môžete na obrázok vždy odkazovať jeho pomocou Odtlačok prsta ktorý je zobrazený v tabuľke.
  • alp — Nastaví identifikátor kontajnera
  • --storage — Toto tlačidlo označuje, v ktorom Skladovací bazén vytvorí sa kontajner
  • --profile — Táto kaskáda kľúčov aplikuje konfiguráciu z predtým vytvorených konfiguračných profilov na kontajner

Spúšťame kontajner, ktorý začína spúšťať init systém distribúcie:

lxc start alp

Môžete tiež použiť príkaz lxc launch čo umožňuje kombinovať tímy lxc init и lxc start v jednej operácii.

Kontrola stavu kontajnera:

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

Kontrola konfigurácie kontajnera:

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

V sekcii profiles môžeme sa uistiť, že tento kontajner používa dva konfiguračné profily − default и hddroot. V sekcii devices môžeme zistiť iba jedno zariadenie, pretože sieťové zariadenie bolo vytvorené na úrovni profilu default. Ak chcete zobraziť všetky zariadenia používané kontajnerom, musíte pridať kľúč --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: ""

Nastavenie statickej IP adresy ^

Ak sa pokúsime nastaviť IP adresu pre sieťové zariadenie eth0 tímom lxc config device set alp určené pre konfiguráciu kontajnera, potom dostaneme chybu, ktorá bude hlásiť, že zariadenie neexistuje, pretože zariadenie eth0 ktorý používa kontajner patrí do profilu default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Môžeme samozrejme nastaviť statickú IP adresu eth0 zariadení v profile, ale bude rovnaký pre všetky kontajnery, ktoré budú tento profil používať. Preto pridajme zariadenie určené pre kontajner:

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

Potom musíte reštartovať kontajner:

lxc restart alp

Ak sa teraz pozrieme na konfiguráciu kontajnera, nemusíme túto možnosť použiť --expanded aby ste videli sieťové zariadenie eth0, keďže sme ho vytvorili na úrovni kontajnera a z profilu sa kaskádovito prelínalo cez rovnaké zariadenie 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: ""

Odstránenie kontajnera ^

Na odstránenie kontajnera použite príkaz lxc delete, ale pred odstránením kontajnera sa musí zastaviť pomocou príkazu lxc stop:

lxc stop alp

lxc list

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

Potom, čo sme overili, že stav kontajnera sa stal Zastavené, môže byť odstránený z Skladovací bazén:

lxc delete alp

Prístup ku kontajnerom ^

Ak chcete vykonať príkazy v kontajneri priamo a obísť sieťové pripojenia, použite príkaz lxc exec ktorý vykonáva príkazy v kontajneri bez spustenia systémového shellu. Ak potrebujete vykonať príkaz v shelle pomocou vzorov shellu, ako sú premenné, presmerovania súborov (pipe) atď., potom musíte explicitne spustiť shell a odovzdať príkaz ako kľúč, napríklad:

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

Príkaz používal špeciálny únikový znak pre špeciálny charakter $ takže premenná $HOME nebol interpretovaný na hostiteľskom počítači, ale bol interpretovaný iba vo vnútri kontajnera.

Je tiež možné spustiť interaktívny režim shellu a potom ukončiť reláciu vykonaním klávesovej skratky CTRL+D:

lxc exec alp -- /bin/sh

Správa kontajnerových zdrojov ^

V LXD môžete spravovať prostriedky kontajnera pomocou špeciálnej sady konfigurácií. Úplný zoznam parametrov konfigurácie kontajnera nájdete v dokumentácii.

Obmedzenie zdrojov RAM ^

Parameter limits.memory obmedzuje množstvo pamäte RAM dostupnej pre kontajner. Hodnota je číslo a jedna z dostupné prípony.

Nastavme limit RAM kontajnera na 256 MB:

lxc config set alp limits.memory 256MB

Existujú aj ďalšie parametre na obmedzenie pamäte:

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

Tím lxc config show umožňuje zobraziť celú konfiguráciu kontajnera vrátane použitého limitu prostriedkov, ktorý bol nastavený:

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

Limit zdrojov CPU ^

Existuje niekoľko spôsobov, ako obmedziť zdroje CPU. typy obmedzení:

  • limit.cpu - viaže kontajner na jedno alebo viac jadier CPU
  • limits.cpu.allowance - spravuje buď kvóty plánovača CFS, keď uplynie časový limit, alebo mechanizmus zdieľania prostriedkov univerzálneho CPU po uplynutí percenta
  • limits.cpu.priority - priorita plánovača, keď viacerým inštanciám zdieľajúcim sadu procesorov je priradené rovnaké percento procesorov

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

Obmedzenie miesta na disku ^

Okrem obmedzení napr limits.read, limits.write môžeme tiež obmedziť množstvo miesta na disku spotrebovaného kontajnerom (funguje iba so ZFS alebo BTRFS):

lxc config device set alp root size=2GB

Po inštalácii v parametri devices.root.size Môžeme overiť nastavený limit:

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

Na zobrazenie použitých diskových kvót môžeme získať z príkazu 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

Napriek tomu, že sme nastavili limit pre koreňové zariadenie kontajnera na 2GB, systémové utility ako napr df toto obmedzenie neuvidí. Za týmto účelom vykonáme malý test a zistíme, ako to funguje.

V tom istom vytvoríme 2 nové rovnaké kontajnery Skladovací bazén (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         |
+------+---------+------------------+------+-----------+-----------+

V jednom z kontajnerov vytvoríme súbor s veľkosťou 1 GB:

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

Uistite sa, že súbor je vytvorený:

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

Ak sa pozrieme do druhého kontajnera, skontrolujeme existenciu súboru na rovnakom mieste, potom tam tento súbor nebude, čo sa očakáva, pretože kontajnery sú vytvorené vo vlastnom Objem úložiska v rovnakom Skladovací bazén:

lxc exec alp2 -- ls -lh
total 0

Ale porovnajme hodnoty, ktoré produkuje df na jednej a druhej nádobe:

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

zariadenie /dev/loop1 pripojený ako koreňový oddiel Skladovací bazén ktoré tieto nádoby využívajú, takže svoj objem zdieľajú medzi dvoma.

Štatistika spotreby zdrojov ^

Štatistiku spotreby zdrojov pre kontajner môžete zobraziť pomocou príkazu:

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

Práca so snímkami ^

LXD má schopnosť vytvárať snímky a obnovovať z nich stav kontajnera.

Ak chcete vytvoriť snímku, spustite nasledujúci príkaz:

lxc snapshot alp snapshot1

Tím lxc snapshot nie je k dispozícii žiadny kľúč list, preto na zobrazenie zoznamu snímok musíte použiť príkaz, ktorý zobrazuje všeobecné informácie o kontajneri:

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

Pomocou príkazu môžete obnoviť kontajner zo snímky lxc restore s uvedením kontajnera, pre ktorý sa obnova vykoná, a aliasu snímky:

lxc restore alp snapshot1

Nasledujúci príkaz sa používa na odstránenie snímky. Upozorňujeme, že syntax príkazu nie je podobná všetkým ostatným; tu musíte zadať lomku za názvom kontajnera. Ak je lomka vynechaná, príkaz na odstránenie snímky sa interpretuje ako príkaz na odstránenie kontajnera!

lxc delete alp/snapshot1

Vo vyššie uvedenom príklade sme sa pozreli na takzvané bezstavové snímky. LXD má aj ďalší typ snapshotu – stavový, ktorý ukladá aktuálny stav všetkých procesov v kontajneri. So stavovými snímkami je spojených množstvo zaujímavých a užitočných funkcií.

Čo ešte? ^

  • Pre vývojárov Pythonu je k dispozícii modul PyLXD ktorý poskytuje API pre LXD

AKTUALIZÁCIA 10.04.2020 15:00: Pridaná navigácia

Zdroj: hab.com

Pridať komentár