Základní možnosti LXD — systém kontejnerů v Linuxu

Základní možnosti LXD — systém kontejnerů v Linuxu

LXD je systémový správce kontejnerů nové generace, jak se říká zdroj. 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 snap-paket:

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 inteligenci

Spuš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✓  core

I 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 lxd

Ujistí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 lxd

Po 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 user1

Ujistí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 lxd

Pokud 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 lxd

Spouštíme službu:

sudo systemctl start lxd

Kontrolujeme 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ě) se skládá 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

Základní možnosti LXD — systém kontejnerů v Linuxu

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/alp3

Př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říkazu

Inicializace 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 tabulka srovnání funkcí:

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, viz odpověď vývojáře. 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\/s

Připojíme soubor loopback k volnému zařízení loopback:

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

\/dev\/loop1

Dí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     512

Z 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\/loop1

Zobrazí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\/hddpool

Automatické 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
EOF

Aktivujeme 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 root

Aby se změny projevily, musíte restartovat službu LXD:

sudo systemctl restart lxd

Vytvoř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ě:

Základní možnosti LXD — systém kontejnerů v Linuxu

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=none

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

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

Základní možnosti LXD — systém kontejnerů v Linuxu

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=eth0

Je 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í typu nic připojené ke switchi (síťovému mostu) lxdbr0
  • root — Zařízení typu disk které 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=ssdpool

Podobně 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=hddpool

Kontrolujeme 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 AlpineLinux:

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 v dokumentaci.

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říkaz

Vytvář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=hddroot

Podí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 alp

Také 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í neexistuje

Můž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.5

Poté je potřeba restartovat kontejner:

lxc restart alp

Pokud 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 alp

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

Pří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/sh

Sprá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 v dokumentaci.

Omezení zdrojů RAM (operační paměť) ^

Parameter limits.memory omezuje objem RAM dostupný pro kontejner. Jako hodnotu se uvádí číslo a jeden z dostupných přípon.

Nastavíme kontejneru omezení na objem RAM rovnající se 256 MB:

lxc config set alp limits.memory 256MB

Existují také další parametry pro omezení paměti:

  • limits.memory.enforce
  • limits.memory.hugepages
  • limits.memory.swap
  • limits.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 typů omezení:

  • limit.cpu — přiřazuje kontejneru jedno nebo více jader CPU
  • limits.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=2GB

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

I 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=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 kontejnerů vytvoříme soubor o velikosti 1GB:

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

Ujistí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.img

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

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

Prá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 snapshot1

Pří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 snapshot1

Ná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/snapshot1

V 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 PyLXD který poskytuje API pro LXD

AKTUALIZACE 10.04.2020 15:00: Přidal jsem navigaci

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster