
LXD je systémový správce kontejnerů nové generace, jak se říká . Nabízí uživatelské rozhraní podobné virtuálním strojům, avšak místo toho využívá kontejnery Linuxu.
Jádro LXD je privilegovaný démon (služba spuštěná s právy root), který poskytuje REST API přes místní unix socket, stejně jako přes síť, pokud je nastavena odpovídající konfigurace. Klienti, jako je příkazový nástroj dodávaný s LXD, posílají požadavky přes toto REST API. To znamená, že bez ohledu na to, zda se obracíte na místní hostitel nebo na vzdáleného, vše funguje stejně.
V tomto článku se nebudeme podrobně zabývat koncepty LXD, nebudeme zkoumat všechny dostupné možnosti uvedené v dokumentaci, včetně nedávné implementace v posledních verzích LXD podpory virtuálních strojů QEMU paralelně s kontejnery. Místo toho se seznámíme pouze se základními funkcemi správy kontejnerů — nastavíme úložiště, síť, spustíme kontejner, aplikujeme limity na zdroje a podíváme se, jak používat snapshoty, abyste získali základní přehled o LXD a mohli používat kontejnery v Linuxu.
Pro získání úplných informací se obraťte na oficiální zdroj:
Navigace
Instalace LXD
Instalace LXD v distribucích Ubuntu
V distribuci Ubuntu 19.10 balíček lxd má přenos na :
apt search lxd
lxd/eoan 1:0.7 all
Přechodný balíček - lxd -> snap (lxd)To znamená, že budou nainstalovány hned dva balíčky, jeden systémový a druhý jako snap balíček. Instalace dvou balíčků v systému může způsobit určité problémy, při kterých se systémový balíček může stát sirotkem, pokud odstraníte snap balíček pomocí správce snap balíčků.
Najít balíček lxd v snap repozitáři lze následujícími příkazy:
snap find lxd
Název Verze Souhrn
lxd 3.21 Správce systémových kontejnerů a API
lxd-demo-server 0+git.6d54658 Online softwarové demo relace používající LXD
nova ocata OpenStack Compute Service (nova)
nova-hypervisor ocata OpenStack Compute Service - KVM Hypervisor (nova)
distrobuilder 1.0 Nástroj pro vytváření obrazů pro LXC a LXD
fabrica 0.1 Vytvářejte snapy jednoduchým nasměrováním webového formuláře na...
satellite 0.1.2 Pokročlá škálovatelná platforma pro open source inteligenciSpuštěním příkazu list se můžeme ujistit, že balíček lxd je ještě nenainstalován:
snap list
Název Verze Rev Sledování Publikátor Poznámky
core 16-2.43.3 8689 stable canonical✓ coreI když je LXD snap balíčkem, je třeba jej nainstalovat prostřednictvím systémového balíčku lxd, který vytvoří v systému odpovídající skupinu a potřebné nástroje v /usr/bin atd.
sudo apt update
sudo apt install lxdUjistíme se, že je balíček nainstalován jako snap balíček:
snap list
Název Verze Rev Sledování Publikátor Poznámky
core 16-2.43.3 8689 stable canonical✓ core
lxd 3.21 13474 stable/... canonical✓ -Instalace LXD v distribucích Arch Linux
Pro instalaci balíčku LXD v systému je nutné spustit následující příkazy, první — aktualizuje seznam dostupných balíčků v repozitáři, druhý — přímo nainstaluj balíček:
sudo pacman -Syyu && sudo pacman -S lxdPo instalaci balíčku, pro správu LXD běžným uživatelem, jej je třeba přidat do systémové skupiny lxd:
sudo usermod -a -G lxd user1Ujistíme se, že uživatel user1 byl přidán do skupiny lxd:
id -Gn user1
user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxdPokud skupina lxd není viditelná v seznamu, je potřeba aktivovat relaci uživatele znovu. K tomu se musí uživatel odhlásit a přihlásit zpět.
Aktivujeme v systemd nahrání služby LXD při spuštění systému:
sudo systemctl enable lxdSpouštíme službu:
sudo systemctl start lxdKontrolujeme stav služby:
sudo systemctl status lxdÚložiště LXD (Storage)
Před zahájením inicializace musíme pochopit, jak logicky funguje úložiště v LXD.
Úložiště (Úložiště) z jednoho nebo více Úložiště které používá jeden z podporovaných souborových systémů, jako jsou ZFS, BTRFS, LVM nebo běžné adresáře. Každé Úložiště je dělěno na objemy (Storage Volume) které obsahují obrazy, kontejnery nebo data pro jiné účely.
- Obrázky — to jsou speciálně sestavené distribuce bez jádra Linux, dostupné z externích zdrojů
- Kontejnery — to jsou nasazené distribuce z obrazů, připravené k použití
- Snapshoty — to jsou snímky stavu kontejnerů, ke kterým se lze vrátit

Pro správu úložiště v LXD slouží příkaz lxc storage o němž se lze dozvědět více zadáním klíče — lxc storage --help
Následující příkaz zobrazuje seznam všech Úložiště v LXD úložištích:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 2 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 4 |
+---------+-------------+--------+--------------------------------+---------+Pro zobrazení seznamu všech Storage Volume v zvoleném Úložiště slouží příkaz 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 |
+-----------+----------------------------------+-------------+---------+Také, pokud byla při vytváření zvolena souborový systém BTRFS, lze získat seznam Úložiště subvolumes Storage Volume nebo v rámci BTRFS pomocí nástrojů tohoto souborového systému: sudo btrfs subvolume list -p /var/lib/lxd/storage-pools/hddpoolID 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/alp3Před vytvořením a použitím kontejnerů je nutné provést základní inicializaci LXD, která vytváří a nastavuje síť i úložiště. To lze provést ručně pomocí standardních příkazů klienta, které jsou dostupné v seznamu po vyvolání příkazuInicializace LXD
lxc --help nebo pomocí iniciačního průvodce lxd init odpovězením na několik otázek. odpověděl na několik otázek.
Výběr souborového systému pro úložní pool
Během inicializace LXD se položí několik otázek, mezi nimiž bude určení typu souborového systému pro výchozí Úložiště. Výchozím zvoleným souborovým systémem je BTRFS. Změnit na jiný FS po vytvoření nebude možné. K výběru FS je k dispozici :
Funkce
Directory
Btrfs
LVM
ZFS
CEPH
Optimalizované ukládání obrazu
ne
ano
ano
ano
ano
Optimalizovaná tvorba instancí
ne
ano
ano
ano
ano
Optimalizovaná tvorba snapshotů
ne
ano
ano
ano
ano
Optimalizovaný přenos obrazu
ne
ano
ne
ano
ano
Optimalizovaný přenos instancí
ne
ano
ne
ano
ano
Kopírovaní při zápisu
ne
ano
ano
ano
ano
Na úrovni bloků
ne
ne
ano
ne
ano
Okamžité klonování
ne
ano
ano
ano
ano
Ovladač úložiště použitelný uvnitř kontejneru
ano
ano
ne
ne
ne
Obnova ze starších snapshotů (ne posledních)
ano
ano
ano
ne
ano
Úložné kvóty
ano(*)
ano
ano
ano
ne
Inicializace sítě a úložního poolu pomocí průvodce
Následující příkaz, který projednáme, nabízí nastavit hlavní komponenty LXD odpověďmi na jednoduché otázky pomocí průvodce inicializace.
Spusťte příkaz lxc init a zadejte odpovědi na otázky za dvojtečkou, jak je ukázáno níže, nebo je změňte podle svých podmínek:
lxd init
Chcete použít clustering LXD? (ano/ne) [výchozí=ne]:
Chcete konfigurovat nové úložné pool? (ano/ne) [výchozí=ano]:
Název nového úložného poolu [výchozí=default]: ssdpool
Název použitého úložného backendu (lvm, btrfs, dir) [výchozí=btrfs]:
Chcete vytvořit nový BTRFS pool? (ano/ne) [výchozí=ano]:
Chcete použít existující blokové zařízení? (ano/ne) [výchozí=ne]:
Velikost nového smyčkového zařízení v GB (minimum 1GB) [výchozí=15GB]: 10GB
Chcete se připojit k serveru MAAS? (ano/ne) [výchozí=ne]:
Chcete vytvořit nový lokální síťový most? (ano/ne) [výchozí=ano]:
Jak se má jmenovat nový most? [výchozí=lxdbr0]:
Jaká IPv4 adresa má být použita? (CIDR subnet notace, „auto“ nebo „none“) [výchozí=auto]: 10.0.5.1/24
Chcete, aby LXD NATovala IPv4 provoz na vašem mostě? [výchozí=ano]:
Jaká IPv6 adresa má být použita? (CIDR subnet notace, „auto“ nebo „none“) [výchozí=auto]: none
Chcete, aby LXD byl dostupný přes síť? (ano/ne) [výchozí=ne]:
Chcete, aby byly zastaralé mezipaměťové obrazy aktualizovány automaticky? (ano/ne) [výchozí=ano] ne
Chcete vytisknout YAML "lxd init" preseed? (ano/ne) [výchozí=ne]: Vytvoření dalšího úložního poolu
V předchozím kroku jsme vytvořili Úložiště kterému jsme dali název ssdpool a jehož soubor se nachází v mém systému na adrese /var/lib/lxd/disks/ssdpool.img. Tato adresa souborového systému odpovídá fyzickému SSD disku v mém PC.
V následujících krocích, abychom rozšířili chápání toho, jakou roli hraje Úložiště v úložišti, vytvoříme druhý Úložiště který bude fyzicky umístěn na jiném typu disku, na HDD. Problém spočívá v tom, že LXD neumožňuje vytváření Úložiště mimo adresu /var/lib/lxd/disks/ a dokonce ani symbolické odkazy nebudou fungovat, . Toto omezení můžeme obejít při inicializaci/formátování Úložiště tak, že uvedeme hodnotu jako blokové zařízení místo cesty k souboru smyčky uvedením toho v klíči source.
Takže k vytvoření Úložiště Je nutné určit soubor loopback nebo existující oddíl ve vašem souborovém systému, který bude používat. K tomu vytvoříme soubor s omezenou velikostí 10 GB:
dd if=\/dev\/zero of=\/mnt\/work\/lxd\/hddpool.img bs=1MB count=10000
10000+0 záznamů v
10000+0 záznamů ven
10000000000 bajtů (10 GB, 9,3 GiB) zkopírováno, 38,4414 s, 260 MB\/sPřipojíme soubor loopback k volnému zařízení loopback:
sudo losetup --find --show \/mnt\/work\/lxd\/hddpool.img
\/dev\/loop1Díky klíči --show provádění příkazu vrací na obrazovku název zařízení, ke kterému byl náš soubor loopback připojen. V případě potřeby můžeme na obrazovku vypsat seznam všech obsazených zařízení tohoto typu, abychom se ujistili o správnosti našich kroků:
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 512Z seznamu lze zjistit, že v zařízení /dev/loop1 je připojen soubor loopback /mnt/work/lxd/hddpool.img, a v zařízení /dev/loop0 je připojen soubor loopback /var/lib/lxd/disks/ssdpool.img které odpovídá výchozímu Úložiště.
Následující příkaz vytvoří nový Úložiště v LXD na základě právě připraveného souboru loopback. LXD naformátuje soubor loopback /mnt/work/lxd/hddpool.img v zařízení /dev/loop1 do souborového systému BTRFS:
lxc storage create hddpool btrfs size=10GB source=\/dev\/loop1Zobrazíme seznam všech Úložiště 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ětšení velikosti úložního poolu
Po vytvoření Úložiště, v případě potřeby, jej lze rozšířit. Pro Úložiště na základě souborového systému BTRFS proveďte následující pří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\/hddpoolAutomatické vložení loopback souboru do slotu zařízení loopback
Máme jeden malý problém, při restartu systému hostitele, soubor /mnt/work/lxd/hddpool.img "vypadne" z zařízení /dev/loop1 a služba LXD se při spuštění zastaví, protože jej v tomto zařízení neuvidí. Pro řešení tohoto problému je třeba vytvořit systémovou službu, která tento soubor připojí do zařízení /dev/loop1 při spuštění systému hostitele.
Vytvoříme unit soubor typu service v /etc/systemd/system/ pro init system 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
EOFAktivujeme službu:
sudo systemctl enable lxd-hddpool
Vytvořena symbolická cesta /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.Po restartu hostitelského systému zkontrolujeme stav služby:
systemctl status lxd-hddpool.service
● lxd-hddpool.service - Losetup LXD Storage Pool (hddpool)
Načteno: načteno (/etc/systemd/system/lxd-hddpool.service; povoleno; výchozí nastavení dodavatele: zakázáno)
Aktivní: aktivní (ukončeno) od Stř 2020-04-08 03:43:53 MSK; před 1min 37s
Proces: 711 ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img (kód=ukončeno, stav=0/ÚSPĚCH)
Hlavní PID: 711 (kód=ukončeno, stav=0/ÚSPĚCH)
08. dub 03:43:52 manjaro systemd[1]: Spouštění Losetup LXD Storage Pool (hddpool)...
08. dub 03:43:53 manjaro systemd[1]: Dokončeno Losetup LXD Storage Pool (hddpool).Z výstupu můžeme potvrdit, že stav služby je aktivní, přestože vykonání našeho skriptu z jedné příkazu skončilo, umožnila nám to volba RemainAfterExit=true.
Zabezpečení. Práva kontejnerů
Jelikož všechny procesy kontejneru vlastně běží v izolaci na hostitelském systému pomocí jeho jádra, LXD nabízí privilegovanost procesů pro dodatečnou ochranu přístupu procesů kontejneru k systému hostitele, kde:
Privilegované kontejnery — to jsou kontejnery, ve kterých procesy s UID a GID odpovídají stejnému vlastníkovi jako na hostitelském systému. Například proces spuštěný v kontejneru s UID rovným 0 má stejná práva jako proces hostitelského systému s UID rovným 0. Jinými slovy, uživatel root v kontejneru má všechna práva nejen v kontejneru, ale i na hostitelském systému, pokud se mu podaří překročit hranice izolovaného jmenného prostoru kontejneru.
Nepivilgieované kontejnery — to jsou kontejnery, ve kterých procesy patří vlastníkovi s UID a GID od 0 do 65535, ale pro hostitelský systém je vlastník maskován přidaným bitem SubUID a SubGID. Například, uživatel s UID=0 v kontejneru bude v hostitelském systému zaznamenán jako
SubUID + UID. To chrání hostitelský systém, protože pokud nějaký proces v kontejneru překročí své izolované jmenné prostory, může interagovat s hostitelským systémem pouze jako proces s neznámým, velmi vysokým UID/GID.
Ve výchozím nastavení mají nově vytvářené kontejnery status neprivilegovaných, a proto musíme definovat SubUID a SubGID.
Vytvoříme dva konfigurační soubory, ve kterých nastavíme masku pro SubUID a SubGID:
sudo touch /etc{/subuid,/subgid}
sudo usermod --add-subuids 1000000-1065535 root
sudo usermod --add-subgids 1000000-1065535 rootAby se změny projevily, musíte restartovat službu LXD:
sudo systemctl restart lxdVytvoření virtuálního síťového přepínače
Jelikož jsme dříve inicializovali síť pomocí instalačního průvodce odpovězením na několik otázek. a vytvořili síťové zařízení lxdbr0, v této části se jen seznámíme se sítí v LXD a s tím, jak vytvořit virtuální přepínač (síťový most, bridge) pomocí klientské příkazové řádky.
Následující schéma ukazuje, jak přepínač (síťový most, bridge) spojuje hostitele a kontejnery do sítě:

Kontejnery mohou komunikovat prostřednictvím sítě s jinými kontejnery nebo hostitelem, na kterém jsou tyto kontejnery provozovány. K tomu je nutné propojit virtuální síťové karty kontejnerů s virtuálním přepínačem. Nejprve vytvoříme přepínač a síťové rozhraní kontejneru budou propojena v dalších kapitolách, poté co bude kontejner vytvořen.
Následující příkaz vytvoří přepínač s podsítí 10.0.5.0/24 a IPv4 adresou 10.0.5.1/24, a také povolí ipv4.nat aby kontejnery mohly přistupovat k internetu přes hostitele pomocí služby NAT:
lxc network create lxdbr0 ipv4.address=10.0.5.1/24 ipv4.nat=true ipv6.address=noneZkontrolujte seznam síťových zařízení dostupných v LXD:
lxc network list
+--------+----------+---------+-------------+---------+
| NAME | TYPE | MANAGED | DESCRIPTION | USED BY |
+--------+----------+---------+-------------+---------+
| eno1 | physical | NO | | 0 |
+--------+----------+---------+-------------+---------+
| lxdbr0 | bridge | YES | | 0 |
+--------+----------+---------+-------------+---------+Také se ujistěte, že síťové zařízení bylo vytvořeno pomocí standardního nástroje Linuxového distribuce — ip link nebo ip addr:
ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether bc:ee:7b:5a:6b:44 brd ff:ff:ff:ff:ff:ff
altname enp0s25
inet6 fe80::9571:11f3:6e0c:c07b/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: lxdbr0: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether c2:38:90:df:cb:59 brd ff:ff:ff:ff:ff:ff
inet 10.0.5.1/24 scope global lxdbr0
valid_lft forever preferred_lft forever
inet6 fe80::c038:90ff:fedf:cb59/64 scope link
valid_lft forever preferred_lft forever
5: veth3ddab174@if4: mtu 1500 qdisc noqueue master lxdbr0 state UP group default qlen 1000
link/ether ca:c3:5c:1d:22:26 brd ff:ff:ff:ff:ff:ff link-netnsid 0Profil konfigurace
Každý kontejner v LXD má svou vlastní konfiguraci a může ji rozšiřovat pomocí globálně deklarovaných konfigurací, které se nazývají konfigurační profily. Použití konfiguračních profilů na kontejneru má kaskádový model, následující příklad to ukazuje:

V tomto příkladu byly v systému LXD vytvořeny tři profily: default, hddpool a hostfs. Všechny tři profily byly aplikovány na kontejner, který má místní konfiguraci (šedá zóna). Profil default má zařízení root u kterého je parametr pool , pak tato funkce nakonfiguruje soket s možností ssdpool, ale díky kaskádovému modelu aplikace konfigurace můžeme použít pro kontejner profil hddpool u kterého je parametr pool který překryje tento stejný parametr z profilu default a kontejner získá konfiguraci zařízení root s parametrem pool rovným hddpool, zatímco profil hostfs jednoduše přidává nové zařízení do kontejneru.
Pro zobrazení seznamu dostupných konfiguračních profilů slouží následující příkaz:
lxc profile list
+---------+---------+
| NAME | USED BY |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+Úplný seznam dostupných příkazů pro práci s profilem můžete získat přidáním příznaku --help:
lxc profile --help
Description:
Správa profilů
Usage:
lxc profile [command]
Available Commands:
add Přidat profily k instancím
assign Přiřadit sady profilů k instancím
copy Zkopírovat profily
create Vytvořit profily
delete Smazat profily
device Správa zařízení instancí
edit Upravit konfigurace profilů jako YAML
get Získat hodnoty pro klíče konfigurace profilu
list Seznam profilů
remove Odebrat profily z instancí
rename Přejmenovat profily
set Nastavit klíče konfigurace profilu
show Zobrazit konfigurace profilů
unset Zrušit klíče konfigurace profiluÚprava profilu
Výchozí profil konfigurace default nemá konfiguraci síťové karty pro kontejner a všechny nově vytvářené kontejnery nemají síť, pro ně je nutné vytvářet místní (dedikovaná) síťová zařízení zvláštním příkazem, ale můžeme vytvořit v profilu konfigurace globální síťové zařízení, které bude sdíleno mezi všemi kontejnery používajícími tento profil. Tímto způsobem ihned po příkazu pro vytvoření nového kontejneru budou mít síť s přístupem na internet. Přitom nejsou žádná omezení, vždy můžeme později vytvořit místní síťové zařízení, pokud to bude potřeba.
Následující příkaz přidá do profilu konfigurace zařízení eth0 typu nic připojeného k síti lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0Je důležité poznamenat, že protože jsme zařízení fakticky přidali do profilu konfigurace, tak pokud bychom v zařízení uvedli statickou IP adresu, všechny kontejnery, které budou používat tento profil, budou sdílet stejnou IP adresu. Pokud je třeba vytvořit kontejner se statickou IP adresou vyhrazenou pro kontejner, pak je třeba vytvořit konfiguraci síťového zařízení na úrovni kontejneru (lokální konfigurace) s parametrem IP adresy, a nikoli na úrovni profilu.
Zkontrolujeme profil:
lxc profile show default
config: {}
description: Výchozí LXD profil
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: \/
pool: ssdpool
type: disk
name: default
used_by: []V tomto profilu vidíme, že pro všechny nově vytvářené kontejnery budou vytvořena dvě zařízení (devices):
eth0— Zařízení typunicpřipojené ke switchi (síťovému mostu)lxdbr0root— Zařízení typudiskkteré využívá úložištěssdpool
Vytvoření nových profilů
Pro využití dříve vytvořených Úložiště kontejnerů vytvoříme profil konfigurace ssdroot ve kterém přidáme zařízení typu disk s bodem připojení / (root) používající dříve vytvořené Úložiště — ssdpool:
lxc profile create ssdroot
lxc profile device add ssdroot root disk path=\/ pool=ssdpoolPodobně vytvoříme zařízení typu disk, ale v tomto případě využívající Úložiště — hddpool:
lxc profile create hddroot
lxc profile device add hddroot root disk path=\/ pool=hddpoolKontrolujeme profily konfigurace:
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: []Repozitář obrazů
Kontejnery se vytvářejí z obrazů, které jsou speciálně sestavené distribuce, nemající jádro Linuxu. Proto, než spustíte kontejner, musí být rozbalen z tohoto obrazu. Zdrojem obrazů je lokální repozitář, do kterého se obrazy nahrávají z externích repozitářů.
Vzdálené repozitáře obrazů
Ve výchozím nastavení je LXD nakonfigurován na získávání obrazů ze tří vzdálených zdrojů:
- ubuntu: (pro stabilní obrazy Ubuntu)
- ubuntu-daily: (pro denní obrazy Ubuntu)
- images: (pro spoustu dalších distribucí)
lxc remote list
+-----------------+------------------------------------------+--------+--------+
| NÁZEV | URL | VEŘEJNÝ | STATICKÝ |
+-----------------+------------------------------------------+--------+--------+
| images | https://images.linuxcontainers.org | ANO | NE |
+-----------------+------------------------------------------+--------+--------+
| místní (výchozí) | unix:// | NE | ANO |
+-----------------+------------------------------------------+--------+--------+
| ubuntu | https://cloud-images.ubuntu.com/releases | ANO | ANO |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-daily | https://cloud-images.ubuntu.com/daily | ANO | ANO |
+-----------------+------------------------------------------+--------+--------+Například, repozitář ubuntu: má následující obrazy:
lxc image -c dasut list ubuntu: | head -n 11
+----------------------------------------------+--------------+----------+------------+
| POPIS | ARCHITEKTURA | VELIKOST | TYP |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150728) | x86_64 | 153.72MB | KONTAJNER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150819) | x86_64 | 152.91MB | KONTAJNER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150906) | x86_64 | 154.69MB | KONTAJNER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150930) | x86_64 | 153.86MB | KONTAJNER |
+----------------------------------------------+--------------+----------+------------+Pro omezení počtu sloupců jsme použili volbu -c s parametry dasut, a také jsme omezili délku seznamu příkazem head.
Pro výpis seznamu obrazů je k dispozici filtr. Následující příkaz vypíše seznam všech dostupných architektur distribuce :
lxc image -c ldast list images:alpine/3.11
+------------------------------+--------------------------------------+--------------+
| ALIAS | POPIS | ARCHITEKTURA |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11 (3 více) | Alpine 3.11 amd64 (20200220_13:00) | x86_64 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/arm64 (1 více) | Alpine 3.11 arm64 (20200220_13:00) | aarch64 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/armhf (1 více) | Alpine 3.11 armhf (20200220_13:00) | armv7l |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/i386 (1 více) | Alpine 3.11 i386 (20200220_13:01) | i686 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/ppc64el (1 více) | Alpine 3.11 ppc64el (20200220_13:00) | ppc64le |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/s390x (1 více) | Alpine 3.11 s390x (20200220_13:00) | s390x |
+------------------------------+--------------------------------------+--------------+Místní repozitář obrazů
Než začnete používat kontejner, je nutné přidat obraz z globálního repozitáře do lokálního. local:. V současnosti je lokální repozitář prázdný, o čemž nás přesvědčí příkaz lxc image list. Pokud není repozitář uveden, bude ve výchozím nastavení použit lokální repozitář — list lxc image list local:+-------+-------------+--------+-------------+--------------+------+------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE | +-------+-------------+--------+-------------+--------------+------+------+ local:
Správa obrazů v repozitáři se provádí následujícími metodami:lxc image
Tým
Popis
alias Spravovat aliasy obrazů
Kopírovat obrazy mezi servery
alias smazat
Smazat obrazy
alias odstranit
Upravit vlastnosti obrazů
alias edit
Exportovat a stáhnout obrazy
alias export
Importovat obrazy do úložiště obrazů
alias import
info
alias Zobrazit užitečné informace o obrazech
Seznam obrazů
alias list
obnovit
alias Obnovit obrazy
ukázat
alias Zobrazit vlastnosti obrazu
Kopírujeme obraz do lokálního repozitáře z globálního
lxc image copy images:alpine/3.11/amd64 local: --alias=alpine3Obraz byl úspěšně zkopírován! images::
Zobrazíme seznam všech obrazů, které jsou nyní k dispozici v lokálním repozitáři.lxc image -c lfdatsu list local:+---------+--------------+------------------------------------+--------------+ | ALIAS | FINGERPRINT | DESCRIPTION | ARCHITECTURE | +---------+--------------+------------------------------------+--------------+ | alpine3 | 73a3093d4a5c | Alpine 3.11 amd64 (20200220_13:00) | x86_64 | +---------+--------------+------------------------------------+--------------+ local::
Kromě interaktivního režimu LXD podporuje také neinteraktivní režim nastavení konfigurace, což znamená, že konfigurace je stanovena ve formátu YAML, který umožňuje nastavit celou konfiguraci najednou, a to bez nutnosti vykonávat řadu interaktivních příkazů uvedených výše v tomto článku, včetně nastavení sítě, vytváření profilů konfigurace atd. Tento aspekt zde nebudeme rozebírat, můžete se s ním seznámit sami.Konfigurace LXD
Další interaktivní příkaz .
lxc config který probereme, umožňuje nastavovat konfiguraci. Například, abychom zabránili automatickému aktualizování stažených obrazů v lokálním repozitáři z globálních repozitářů, můžeme tuto funkci aktivovat následujícím příkazem: lxc config set images.auto_update_cached=false
Pro vytvoření kontejneru slouží příkazVytváření a správa kontejneru
k němuž se předávají hodnoty lxc init repozitář:obraz a poté požadovaný identifikátor kontejneru. Repozitář může být uveden jako lokální. a poté požadovaný identifikátor pro kontejner. Repozitář může být uveden jako místní local: a jakýkoliv globální. Pokud není uveden repozitář, používá se pro vyhledávání obrazu lokální repozitář jako výchozí. Pokud je obraz uveden z globálního repozitáře, bude na začátku obraz stažen do lokálního repozitáře a poté použit k vytvoření kontejneru.
Provedeme následující příkaz, abychom vytvořili náš první kontejner:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddrootPodíváme se podrobně na klíče příkazu, které zde používáme:
alpine3— Uvádí alias (pseudonym) pro obraz, který byl dříve stažen do lokálního repozitáře. Kdyby alias pro tento obraz nebyl vytvořen, vždy se lze na obraz odkazovat podle jeho Fingerprint , který je zobrazen v tabulce.alp— Určuje identifikátor pro kontejner.--storage— Tento klíč udává, v jakém Úložiště bude kontejner vytvořen.--profile— Tyto klíče kaskádově aplikují na kontejner konfiguraci z dříve vytvořených profilů konfigurace.
Spouštíme kontejner, který začíná spouštět init systém distribuce:
lxc start alpTaké můžeme použít příkaz lxc launch , který umožňuje sloučit příkazy lxc init a lxc start do jedné operace.
Zkontrolujeme stav kontejneru:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME | STATE | IPV4 | IPV6 | TYPE | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | hddpool |
+------+---------+------------------+------+-----------+--------------+Zkontrolujeme konfiguraci kontejneru:
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 sekci profiles můžeme se ujistit, že tento kontejner používá dva profily konfigurace — default a hddroot. V sekci devices můžeme objevit pouze jedno zařízení, protože síťové zařízení bylo vytvořeno na úrovni profilu. default. Abyste viděli všechna zařízení používaná kontejnerem, je nutné přidat klíč --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: ""Nastavení statické IP adresy
Pokud se pokusíme nastavit IP adresu pro síťové zařízení eth0 příkazem lxc config device set alp určené pro konfiguraci kontejneru, obdržíme chybu, která oznámí, že zařízení neexistuje, protože zařízení eth0 které je používáno kontejnerem, patří do profilu default:
lxc config device set alp eth0 ipv4.address 10.0.5.5
Chyba: Zařízení neexistujeMůžeme samozřejmě nastavit statickou IP adresu pro eth0 zařízení v profilu, ale ta bude jediná pro všechny kontejnery, které tento profil použijí. Proto přidáme dedikované zařízení pro kontejner:
lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5Poté je potřeba restartovat kontejner:
lxc restart alpPokud se nyní podíváme na konfiguraci kontejneru, nemusíme aplikovat volbu --expanded abychom viděli síťové zařízení eth0, protože jsme ho vytvořili na úrovni kontejneru a to přepsalo totéž zařízení z profilu default:
lxc config show alp
architektura: x86_64
konfigurace:
image.architektura: amd64
image.popis: Alpine 3.11 amd64 (20200326_13:39)
image.os: Alpine
image.verze: "3.11"
image.serial: "20200326_13:39"
image.typ: 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.adresa: 10.0.5.5
jméno: eth0
nictype: bridged
parent: lxdbr0
typ: nic
root:
cesta: \
pool: hddpool
typ: disk
ephemeral: false
profily:
- default
- hddroot
stavový: false
description: ""Odstranění kontejneru
K odstranění kontejneru slouží příkaz lxc delete, ale předtím je nutné zastavit kontejner pomocí příkazu lxc stop:
lxc stop alplxc list
+------+---------+-------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+-------------------+------+-----------+-----------+
| alp | STOPPED | 10.0.5.10 (eth0) | | KONTEJNER | 0 |
+------+---------+-------------------+------+-----------+-----------+Jakmile se ujistíme, že stav kontejneru je STOPPED, může být odstraněn pomocí Úložiště:
lxc delete alpPřístup ke kontejneru
Pro provádění příkazů v kontejneru přímo, mimo síťová připojení, slouží příkaz lxc exec který provádí příkazy v kontejneru bez spouštění systémového shellu. Pokud potřebujete vykonat příkaz v shellu, používající vzory shellu, jako jsou proměnné, přesměrování souborů (pipe) atd., je nutné explicitně spustit shell a předat příkaz jako argument, například:
lxc exec alp -- /bin/sh -c "echo $HOME"V příkazu byl použit speciální symbol pro escapování pro speciální symbol $ aby proměnná $HOME nebyla interpretována na hostitelské mašině, ale byla interpretována pouze uvnitř kontejneru.
Také je možné spustit interaktivní režim shellu a po jeho ukončení dokončit relaci pomocí hotkey CTRL+D:
lxc exec alp -- /bin/shSpráva zdrojů kontejneru
V LXD lze spravovat prostředky kontejneru pomocí speciální sady konfigurace. Úplný seznam konfiguračních parametrů kontejneru lze nalézt .
Omezení zdrojů RAM (operační paměť)
Parameter limits.memory omezuje objem RAM dostupný pro kontejner. Jako hodnotu se uvádí číslo a jeden z .
Nastavíme kontejneru omezení na objem RAM rovnající se 256 MB:
lxc config set alp limits.memory 256MBExistují také další parametry pro omezení paměti:
limits.memory.enforcelimits.memory.hugepageslimits.memory.swaplimits.memory.swap.priority
Tým lxc config show umožňuje zobrazit veškeré nastavení kontejneru, včetně aplikovaného omezení zdrojů, které bylo nastaveno:
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: ""Omezení zdrojů CPU (procesor)
Pro omezení zdrojů CPU existuje několik :
limit.cpu— přiřazuje kontejneru jedno nebo více jader CPUlimits.cpu.allowance— spravuje buď kvóty plánovače CFS, když dojde k překročení časového limitu, nebo univerzální mechanismus sdílení zdrojů CPU, když dojde k procentnímu omezenílimits.cpu.priority— priorita plánovače, když je stejný procentní podíl CPU přidělen více instancím, které sdílejí sadu procesorů
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: ""Omezení diskového prostoru
Kromě omezení jako jsou limits.read, limits.write můžeme také omezit množství diskového prostoru, které kontejner může používat (funguje pouze s ZFS nebo BTRFS):
lxc config device set alp root size=2GBPo nastavení v parametru devices.root.size můžeme zkontrolovat nastavené omezení:
lxc config show alp
...
devices:
root:
path: \/
pool: hddpool
size: 2GB
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""Pro zobrazení použitých kvót na disk můžeme použít příkaz 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: 0I když jsme nastavili omezení pro kořenové zařízení kontejneru na 2GB, systémové utilitky jako df to omezení neuvidí. Proto provedeme malý test a zjistíme, jak to funguje.
Vytvoříme 2 nové identické kontejnery ve stejném Úložiště (hddpool):
lxc init alpine3 alp1 --storage=hddpool --profile=default --profile=hddroot
lxc init alpine3 alp2 --storage=hddpool --profile=default --profile=hddrootlxc 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 kontejnerů vytvoříme soubor o velikosti 1GB:
lxc exec alp1 -- dd if=\/dev\/urandom of=file.img bs=1M count=1000Ujistíme se, že soubor byl vytvořen:
lxc exec alp1 -- ls -lh
total 1000M
-rw-r--r-- 1 root root 1000.0M Mar 27 10:16 file.imgPokud se podíváme do druhého kontejneru a zkontrolujeme existenci souboru na stejném místě, tento soubor zde nebude, což je očekávané, protože kontejnery jsou vytvářeny ve vlastních Storage Volume v tom samém Úložiště:
lxc exec alp2 -- ls -lh
total 0Ale pojďme porovnat hodnoty, které ukazuje df v jednom a druhém kontejneru:
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% \/
...Zařízení /dev/loop1 Namontované jako kořenové oddělení je Úložiště které tyto kontejnery používají, takže se dělí o jeho objem.
Statistika spotřeby zdrojů
Statistiku o spotřebě zdrojů pro kontejner lze zjistit pomocí příkazu:
lxc info alp
Name: alp
Location: none
Remote: unix:\/\nArchitecture: 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: 0Práce se snapshoty
V LXD je možné vytvářet snímky a obnovovat je do stavu kontejneru.
Chcete-li vytvořit snímek, spusťte následující příkaz:
lxc snapshot alp snapshot1Příkaz lxc snapshot nemá žádnou volbu list, takže pro zobrazení seznamu snímků je nutné použít příkaz, který vrátí obecné informace o kontejneru:
lxc info alp
...
...
Snapshots:
snapshot1 (pořízeno 2020/04/08 18:18 UTC) (bez stavu)Obnovit kontejner ze snapshotu lze pomocí příkazu lxc restore uvedením kontejneru, pro který bude obnova provedena, a aliasu snapshotu:
lxc restore alp snapshot1Následující příkaz slouží k odstranění snapshotu. Všimněte si, že syntaxe příkazu se neliší od ostatních. Je třeba uvést přímou lomítko po názvu kontejneru. Pokud lomítko vynecháte, příkaz pro odstranění snapshotu bude interpretován jako příkaz pro odstranění kontejneru!
lxc delete alp/snapshot1V uvedeném příkladu jsme se zaměřili na takzvané stateless snapshoty. V LXD existuje i jiný typ snapshotů — stateful, ve kterých se uchovává aktuální stav všech procesů v kontejneru. Se stateful snapshoty souvisí řada zajímavých a užitečných funkcí.
Co dál?
- Pro Python vývojáře je k dispozici modul který poskytuje API pro LXD
AKTUALIZACE 10.04.2020 15:00: Přidal jsem navigaci
Zdroj: habr.com
