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.
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✓ -
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:
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ť
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
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.
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]:
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:
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:
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:
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:
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.
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:
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:
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:
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:
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
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
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:
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.
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:
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::
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:
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 |
+------+---------+------------------+------+-----------+--------------+
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:
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:
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:
V LXD môžete spravovať prostriedky kontajnera pomocou špeciálnej sady konfigurácií. Úplný zoznam parametrov konfigurácie kontajnera nájdete v dokumentácii.
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
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 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.
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í.