Az LXD alapvető funkciói — konténer rendszerek Linux alatt

Az LXD alapvető funkciói — konténer rendszerek Linux alatt

LXD — ez a következő generációs konténer menedzser, ahogy mondják forrás. Olyan felhasználói felületet kínál, amely hasonló a virtuális gépekhez, de ehelyett Linux konténereket használ.

Az LXD magja — ez egy privilégiumos daemon (szolgáltatás, amely root jogokkal fut), amely REST API-t biztosít helyi unix socket-en, valamint hálózaton keresztül, ha a megfelelő konfiguráció be van állítva. Olyan kliensek, mint az LXD-vel szállított parancssori eszköz, ezen a REST API-n keresztül küldenek kéréseket. Ez azt jelenti, hogy függetlenül attól, hogy a helyi hoszthoz vagy távolihoz fordulsz, minden ugyanúgy működik.

Ebben a cikkben nem térünk ki részletesen az LXD koncepcióira, és nem vizsgáljuk meg az összes elérhető funkciót, amelyet a dokumentáció tartalmaz, beleértve a legújabb verziók LXD-vel párhuzamosan történő QEMU virtuális gépek támogatását is. Ehelyett csak az alapvető konténerkezelési funkciókat ismerjük meg — beállítjuk a tároló medencéket, a hálózatot, elindítunk egy konténert, alkalmazunk erőforrás limitációkat, és megnézzük, hogyan használhatunk pillanatképeket, hogy alapvető megértést szerezhess a LXD-ről és használhasd a konténereket Linux alatt.

A teljes információért lépj kapcsolatba a hivatalos forrással:

Navigáció

LXD telepítése ^

LXD telepítése Ubuntu disztribúciókon ^

Az Ubuntu 19.10 disztribúcióban a csomag lxd átjáróval rendelkezik a snap-csomaghoz:

apt search lxd

lxd/eoan 1:0.7 all
  Átmeneti csomag - lxd -> snap (lxd)

Ez azt jelenti, hogy két csomag kerül telepítésre, az egyik rendszerszintű, a másik pedig snap-csomag. Két csomag telepítése a rendszerben problémát okozhat, ha a rendszerszintű csomag árvává válik, ha a snap-csomagot eltávolítja a snapcsomag-kezelő.

Csomag keresése lxd a snap-tárban a következő parancs segítségével lehetséges:

snap find lxd

Név              Verzió        Összefoglaló
lxd               3.21           Rendszer konténer kezelő és API
lxd-demo-server   0+git.6d54658  Online szoftverdemó ülések LXD használatával
nova              ocata          OpenStack Compute Szolgáltatás (nova)
nova-hypervisor   ocata          OpenStack Compute Szolgáltatás - KVM Hypervisor (nova)
distrobuilder     1.0            Kép építő LXC és LXD-hez
fabrica           0.1            Snapek építése pusztán egy webformra mutatva...
satellite         0.1.2          Fejlett, méretezhető nyílt forráskódú intelligencia platform

A parancs futtatásával list megbizonyosodhatunk róla, hogy a csomag lxd még nincs telepítve:

snap list

Név  Verzió    Rev   Követés  Kiadó    Megjegyzések
core  16-2.43.3  8689  stabil    canonical✓  core

Bár a LXD egy snap-csomag, a telepítését a rendszerszintű csomaggal szükséges végezni, lxd, amely létrehozza a megfelelő csoportot a rendszerben, szükséges eszközöket a /usr/bin stb.

sudo apt update
sudo apt install lxd

Bizonyosodjunk meg arról, hogy a csomag snap-csomagként van telepítve:

snap list

Név  Verzió    Rev    Követés  Kiadó    Megjegyzések
core  16-2.43.3  8689   stabil    canonical✓  core
lxd   3.21       13474  stabil/…  canonical✓  -

LXD telepítése Arch Linux disztribúciókon ^

A LXD csomag telepítéséhez a rendszerben a következő parancsokat kell futtatni, az első frissíti a csomagok lista, a második pedig ténylegesen telepíti a csomagot:

sudo pacman -Syyu && sudo pacman -S lxd

A csomag telepítése után a LXD kezelése normál felhasználóval, hozzá kell adni a rendszerszintű csoporthoz: lxd:

sudo usermod -a -G lxd user1

Bizonyosodjunk meg arról, hogy a felhasználó user1 hozzá lett adva a csoporthoz lxd:

id -Gn user1

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

Ha a csoport lxd nem látszik a listában, akkor újra kell aktiválni a felhasználó session-t. Ehhez ki kell jelentkezni és ugyanazzal a felhasználóval be kell jelentkezni a rendszerbe.

Aktiváljuk a systemd szolgáltatás LXD betöltését a rendszer indulásakor:

sudo systemctl enable lxd

Indítjuk a szolgáltatást:

sudo systemctl start lxd

Ellenőrizzük a szolgáltatás állapotát:

sudo systemctl status lxd

LXD tároló (Storage) ^

Az inicializálás megkezdése előtt szükséges megértenünk, hogyan van logikailag elrendezve a tároló az LXD-ben.

A tároló (Tárolás) áll egy vagy több Storage Pool amely a ZFS, BTRFS, LVM vagy hagyományos mappák egyikét használja. Minden egy Storage Pool felosztva kötetekre (Storage Volume) amelyek képeket, konténereket vagy egyéb célokra szánt adatokat tartalmaznak.

  • Képek — ez speciálisan összeállított disztribúciók Linux kernel nélkül, amelyek külső forrásokból érhetők el
  • Konténerek — ezek kibővített disztribúciók a képekből, amelyek készen állnak az üzemeltetésre
  • Felvételek — ezek a konténerek állapotának pillanatfelvételei, amelyekhez vissza lehet térni

Az LXD alapvető funkciói — konténer rendszerek Linux alatt

A LXD tároló kezelésére a parancs szolgál lxc storage amelyre segítséget kaphat a következő kulccsal — lxc storage --help

A következő parancs kiírja az összeset Storage Pool a LXD tárolóban:

lxc storage list

+---------+-------------+--------+--------------------------------+---------+
|  NÉV   | LEÍRÁS      | VEZÉRLI |             FORRÁS             | HASZNÁLJÁK |
+---------+-------------+--------+--------------------------------+---------+
| hddpool |             | btrfs  | /dev/loop1                     | 2       |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool |             | btrfs  | /var/lib/lxd/disks/ssdpool.img | 4       |
+---------+-------------+--------+--------------------------------+---------+

Az összes megtekintéséhez Storage Volume a kiválasztott tárolóban Storage Pool a következő parancsot kell használni lxc storage volume list:

lxc storage volume list hddpool

+-------+----------------------------------+-------------+---------+
| TÍPUS |          NÉV                    | LEÍRÁS      | HASZNÁLJÁK |
+-------+----------------------------------+-------------+---------+
| kép   | ebd565585223487526ddb3607f515... |             | 1       |
+-------+----------------------------------+-------------+---------+

lxc storage volume list ssdpool

+-----------+----------------------------------+-------------+---------+
|   TÍPUS   |             NÉV                  | LEÍRÁS      | HASZNÁLJÁK |
+-----------+----------------------------------+-------------+---------+
| konténer  | alp3                             |             | 1       |
+-----------+----------------------------------+-------------+---------+
| konténer  | jupyter                          |             | 1       |
+-----------+----------------------------------+-------------+---------+
| kép      | ebd565585223487526ddb3607f515... |             | 1       |
+-----------+----------------------------------+-------------+---------+

Ezenkívül, ha a BTRFS fájlrendszert választották a létrehozáskor, akkor a listát Storage Pool subvolumes Storage Volume vagy a BTRFS értelmezésében a fájlrendszer eszközeivel lekérheti: 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

A konténerek létrehozása és használata előtt általános inicializálást kell végrehajtani az LXD-n, amely létrehozza és konfigurálja a hálózatot, valamint a tárolót. Ezt manuálisan elvégezheti a standard kliensparancsokkal, amelyek a parancs

LXD inicializálása ^

lxc --help vagy a beállító varázsló segítségével lxd init lxd init válaszolt néhány kérdésre.

Fájlrendszer kiválasztása a tároló medencéhez ^

Az LXD inicializálásakor több kérdést tesz fel, amelyek között szerepel a fájlrendszer típusának meghatározása az alapértelmezetthez. Storage PoolAlapértelmezés szerint a BTRFS fájlrendszert választja. A létrehozás után másik fájlrendszerre váltani nem lesz lehetséges.A fájlrendszer kiválasztásához ajánlott a funkciók összehasonlító táblázat.:

Jellemző
Könyvtár
Btrfs
LVM
ZFS
CEPH

Optimalizált képtárolás
nem
igen
igen
igen
igen

Optimalizált példány létrehozás
nem
igen
igen
igen
igen

Optimalizált pillanatfelvétel létrehozás
nem
igen
igen
igen
igen

Optimalizált képátvitel
nem
igen
nem
igen
igen

Optimalizált példány átvitel
nem
igen
nem
igen
igen

Másolás íráskor
nem
igen
igen
igen
igen

Blokkal alapú
nem
nem
igen
nem
igen

Azonnali klónozás
nem
igen
igen
igen
igen

Tárolókezelő, amely használható egy konténeren belül
igen
igen
nem
nem
nem

Visszaállítás régebbi pillanatfelvételekből (nem a legújabb)
igen
igen
igen
nem
igen

Tárolási kvóták
igen(*)
igen
igen
igen
nem

Hálózat és tároló medence inicializálása varázsló segítségével ^

A következő parancs, amelyet meg fogunk vizsgálni, lehetőséget biztosít a LXD alapvető összetevőinek konfigurálására, egyszerű kérdések megválaszolásával az inicializáló varázsló segítségével.

Futtassa a parancsot lxc init és adja meg a válaszokat a kettőspont után, ahogy az alábbi példában látható, vagy módosítsa azokat a feltételei szerint:

lxd init

Szeretne LXD klasztert használni? (igen/nem) [alapértelmezett=nem]: 
Szeretne új tároló medencét konfigurálni? (igen/nem) [alapértelmezett=igen]: 
Az új tároló medence neve [alapértelmezett=default]: ssdpool         
Melyik tárolóháttér használatát szeretné? (lvm, btrfs, dir) [alapértelmezett=btrfs]: 
Szeretne új BTRFS medencét létrehozni? (igen/nem) [alapértelmezett=igen]: 
Szeretne létező blokkeszközt használni? (igen/nem) [alapértelmezett=nem]: 
Az új hurokeszköz mérete GB-ban (minimum 1GB) [alapértelmezett=15GB]: 10GB
Szeretne csatlakozni egy MAAS szerverhez? (igen/nem) [alapértelmezett=nem]: 
Szeretne új helyi hálózati hidat létrehozni? (igen/nem) [alapértelmezett=igen]: 
Mi legyen az új híd neve? [alapértelmezett=lxdbr0]: 
Milyen IPv4 címet szeretne használni? (CIDR alhálózati jelölés, "auto" vagy "nincs") [alapértelmezett=auto]: 10.0.5.1/24
Szeretné, hogy a LXD NAT-olja az IPv4 forgalmat a hídján? [alapértelmezett=igen]: 
Milyen IPv6 címet szeretne használni? (CIDR alhálózati jelölés, "auto" vagy "nincs") [alapértelmezett=auto]: nincs
Szeretné, hogy a LXD elérhető legyen a hálózaton? (igen/nem) [alapértelmezett=nem]: 
Szeretné, hogy a régi gyorsítótárazott képek automatikusan frissüljenek? (igen/nem) [alapértelmezett=igen] nem
Szeretné, hogy a YAML "lxd init" előkészítése kiírásra kerüljön? (igen/nem) [alapértelmezett=nem]: 

További tároló medence létrehozása ^

Az előző lépésben létrehoztuk Storage Pool amelynek a nevét adtuk ssdpool és a fájlja a rendszerem ezen az elérési címen található. /var/lib/lxd/disks/ssdpool.imgEz a fájlrendszer címe megfelel a fizikai SSD lemeznek a PC-mben.

A következő lépések során, hogy jobban megértsük, milyen szerepet játszik Storage Pool a tárolásban, létrehozunk egy második Storage Pool amely fizikailag egy másik típusú lemezen fog elhelyezkedni, HDD-n. A probléma az, hogy az LXD nem teszi lehetővé Storage Pool a cím megadása nélkül. /var/lib/lxd/disks/ Sőt, a szimbolikus linkek sem fognak működni, lásd a fejlesztő válaszát.Ezt a korlátozást úgy kerülhetjük el, hogy az inicializáláskor/formázáskor Storage Pool blokk-eszközként adjuk meg az értéket a hurokfájl helyett a kulcsban. forrás.

Tehát a létrehozás előtt Storage Pool Meg kell határoznunk a loopback fájlt vagy egy meglévő partíciót, amelyet a fájlrendszerben használni fog. Ehhez létrehozunk és használni fogunk egy fájlt, amelynek méretét 10GB-ra korlátozzuk:

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) átmásolva, 38,4414 s, 260 MB/s

Csatlakoztatjuk a loopback fájlt egy szabad loopback eszközhöz:

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

/dev/loop1

A kulcsnak köszönhetően --show a parancs végrehajtása megjeleníti az eszköz nevét, amelyhez a loopback fájlunk csatlakozott. Szükség esetén megjeleníthetjük az összes foglalt eszköz listáját, hogy megbizonyosodjunk a tevékenységeink helyességéről:

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

A listából látható, hogy az eszközön /dev/loop1 loopback fájl van csatlakoztatva /mnt/work/lxd/hddpool.img, míg az eszközön /dev/loop0 loopback fájl van csatlakoztatva /var/lib/lxd/disks/ssdpool.img amely megfelel az alapértelmezettnek Storage Pool.

A következő parancs új Storage Pool létrehozása LXD-ben a frissen előkészített loopback fájl alapján. Az LXD formázni fogja a loopback fájlt /mnt/work/lxd/hddpool.img az eszközön /dev/loop1 BTRFS fájlrendszer alá:

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

Megjelenítjük az összes Storage Pool listát:

lxc storage list

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

A tároló medence méretének növelése ^

A megadott sablonból való létrehozás után a felhasználó a böngészőn keresztül érheti el a vezérlő Web-GUI-ját a következő címen: httрs://:3443 Storage Pool, szükség esetén bővíthető. BTRFS fájlrendszer alapú számára hajtsa végre a következő parancsokat: Storage Pool 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

Van egy kis problémánk, hogy a gazdagép rendszer újraindításakor a fájl

Loopback fájl automatikus beillesztése a loopback eszközbe ^

"kiesik" az eszközből /mnt/work/lxd/hddpool.img és az LXD szolgáltatás leáll, amint nem találja ezt az eszközt. Ennek a problémának a megoldásához létre kell hoznunk egy rendszer szervizt, amely a fájlt újra beilleszti az eszközbe /dev/loop1 a gazdagép rendszer indításakor. /dev/loop1 Hozzuk létre a

unit fájlt, amely a következő típusú: service a SystemD inicializálási rendszer számára: be. /etc/systemd/system/ 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

Aktiváljuk a szolgáltatást:

Aktiváljuk a szolgáltatást:

sudo systemctl enable lxd-hddpool

Létrehozva a symlink itt: /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.

A gazda rendszer újraindítása után ellenőrizzük a szolgáltatás státuszát:

systemctl status lxd-hddpool.service 

● lxd-hddpool.service - Losetup LXD Tárolómedence (hddpool)
     Betöltve: betöltve (/etc/systemd/system/lxd-hddpool.service; engedélyezve; fabrikált beállítás: letiltva)
     Aktív: aktív (kilépett) 2020. április 08. 03:43:53 MSK óta; 1 perc 37 másodperc telt el
    Folyamat: 711 ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img (kód=kilépett, státusz=0/SIKER)
   Fő PID: 711 (kód=kilépett, státusz=0/SIKER)

ápr 08 03:43:52 manjaro systemd[1]: A Losetup LXD Tárolómedence (hddpool) indítása folyamatban...
ápr 08 03:43:53 manjaro systemd[1]: A Losetup LXD Tárolómedence (hddpool) véget ért.

A kimenetből megerősíthetjük, hogy a szolgáltatás állapota aktív, annak ellenére, hogy a parancsunk egyetlen sorban való végrehajtása befejeződött, ez lehetővé tette számunkra az opciót RemainAfterExit=true.

Biztonság. Konténer privilégiumok ^

Mivel az összes konténerfolyamat valójában a gazdagépen fut, annak magját használva, a gazda rendszerhez való hozzáférés további védelme érdekében az LXD privilégiumokat kínál a folyamatok számára, ahol:

  • Privilegizált konténerek — olyan konténerek, amelyekben a folyamatok UID és GID azonos a gazdára, mint a gazdaszámítógépen. Például egy konténerben indított folyamat, amelynek UID-je 0, ugyanazokkal a hozzáférési jogokkal rendelkezik, mint a gazdaszámítógép 0 UID-jű folyamata. Más szóval, a root felhasználó a konténerben teljes jogokkal rendelkezik, nemcsak a konténerben, hanem a gazda rendszeren is, ha el tudja hagyni a konténer izolált névtérét.

  • Nem privilegizált konténerek — olyan konténerek, amelyekben a folyamatok a 0 és 65535 közötti UID és GID felhasználó tulajdonában állnak, de a gazda rendszer számára a tulajdonos a hozzáadott SubUID és SubGID bit segítségével álcázva van. Például a konténerben lévő UID=0 felhasználó a gazda rendszerben így fog megjelenni: SubUID + UID. Ez védi a gazda rendszert, mivel ha bármelyik folyamat a konténerben ki tud lépni az izolált névtérből, akkor a gazda rendszerrel csak ismeretlen, nagyon magas UID/GID szereplőként tud kölcsönhatásba lépni.

Alapértelmezés szerint az újonnan létrehozott konténerek státusza nem privilegizált, ezért meg kell határoznunk a SubUID és SubGID értékeket.

Két konfigurációs fájlt hozunk létre, amelyekben meghatározzuk a SubUID és SubGID maszkot:

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

A módosítások alkalmazásához az LXD szolgáltatást újra kell indítani:

sudo systemctl restart lxd

Virtuális hálózati kapcsoló létrehozása ^

Mivel korábban a hálózatot a varázsló segítségével inicializáltuk, lxd init és létrehoztunk egy hálózati eszközt, lxdbr0, ebben a fejezetben csak megismerkedünk az LXD hálózattal és azzal, hogyan lehet virtuális kapcsolót (bridge) létrehozni a kliens parancsával.

A következő diagram bemutatja, hogyan kapcsolja össze a switch (hálózati híd) a gazdagépet és a konténereket:

Az LXD alapvető funkciói — konténer rendszerek Linux alatt

A konténerek a hálózaton keresztül kommunikálhatnak más konténerekkel vagy a gazdagéppel, amely ezeket a konténereket kiszolgálja. Ehhez össze kell kötni a konténerek virtuális hálózati kártyáit a virtuális kapcsolóval. Először létrehozzuk a kapcsolót, majd a konténer hálózati interfészeit a következő fejezetekben kötjük össze, miután a konténer létrejött.

A következő parancs létrehozza a kapcsolót a következő alhálózattal, 10.0.5.0/24 és IPv4 címmel, 10.0.5.1/24, és engedélyezi az ipv4.nat lehetőséget, hogy a konténerek a NAT szolgáltatáson keresztül internethez jussanak a gazdagépen:

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

Ellenőrizzük az elérhető LXD hálózati eszközök listáját:

lxc network list

+--------+----------+---------+-------------+---------+
|  NÉV   |   Típus   | KEZELT  | LEÍRÁS     | HASZNÁLJA |
+--------+----------+---------+-------------+---------+
| eno1   | fizikai  | NEM      |             | 0       |
+--------+----------+---------+-------------+---------+
| lxdbr0 | híd      | IGEN     |             | 0       |
+--------+----------+---------+-------------+---------+

A hálózati eszköz létrejöttének ellenőrzéséhez használhatja a Linux disztribúció beépített eszközét — ip link vagy 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

Konfigurációs profil ^

Minden LXD konténer saját konfigurációval rendelkezik, és bővítheti azt globálisan deklarált konfigurációkkal, amelyeket konfigurációs profilok. A konfigurációs profilok alkalmazása a konténerre folytonos modellt követ, a következő példa ezt szemlélteti:

Az LXD alapvető funkciói — konténer rendszerek Linux alatt

Ebben a példában három profilt hoztak létre az LXD rendszerében: alapértelmezett, hddpool és hostfs. Mindhárom profil alkalmazva lett egy olyan konténerre, amelynek helyi konfigurációja van (szürke zóna). A profil alapértelmezett tartalmaz egy eszközt , felhasználó nevében fut, mivel alapvető rendszerbeállításokat módosítanak, de a WordPress közvetlenül egy normál felhasználóként működik. amelynek beállítása pool egyenlő ssdpool, de a konfigurációs alkalmazás folytonos modelle révén alkalmazhatunk egy profilt a konténerre hddpool amelynek beállítása pool felülírja ezt a beállítást a profilból alapértelmezett és a konténer megkapja az eszköz konfigurációját , felhasználó nevében fut, mivel alapvető rendszerbeállításokat módosítanak, de a WordPress közvetlenül egy normál felhasználóként működik. a beállítással pool egyenlő hddpool, míg a profil hostfs csak új eszközt ad hozzá a konténerhez.

A konfigurációs profilok listájának megtekintéséhez használja a következő parancsot:

lxc profile list

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

A profilokkal való munka során elérhető parancsok teljes listáját a következő kulcs hozzáadásával kaphatja meg: --help:

lxc profile --help

Description:
  Profilok kezelése

Usage:
  lxc profile [command]

Available Commands:
  add         Profilok hozzáadása az instanciákhoz
  assign      Profilok készletének hozzárendelése az instanciákhoz
  copy        Profilok másolása
  create      Profilok létrehozása
  delete      Profilok törlése
  device      Példányeszközök kezelése
  edit        Profilok konfigurációinak szerkesztése YAML formátumban
  get         Értékek lekérése profil konfigurációs kulcsokhoz
  list        Profilok felsorolása
  remove      Profilok eltávolítása az instanciákból
  rename      Profilok átnevezése
  set         Profil konfigurációs kulcsok beállítása
  show        Profil konfigurációk megjelenítése
  unset       Profil konfigurációs kulcsok eltávolítása

Profil szerkesztése ^

Alapértelmezett konfigurációs profil alapértelmezett nem rendelkezik hálózati kártya konfigurációval a konténerhez, és minden újonnan létrehozott konténernek nincs hálózata, ezért szükséges, hogy helyi (dedikált) hálózati eszközöket hozzunk létre külön parancs segítségével. Azonban létrehozhatunk egy globális hálózati eszközt a konfigurációs profilban, amelyet minden konténer megoszt, amely ezt a profilt használja. Így, közvetlenül az új konténer létrehozásának parancsát követően hálózattal rendelkeznek a hálózatra való hozzáféréssel. Emellett nincsenek korlátozások, mindig létrehozhatunk később helyi hálózati eszközt, ha szükség van rá.

A következő parancs eszközt ad hozzá a konfigurációs profilhoz eth0 típusú nic a következő hálózathoz csatlakozva lxdbr0:

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

Fontos megjegyezni, hogy mivel valójában hozzáadtunk egy eszközt a konfigurációs profilhoz, ha statikus IP címet állítottunk volna be az eszközön, minden konténer, amely ezt a profilt alkalmazza, osztozna ugyanazon IP címen. Ha van igény egy konténerhez dedikált statikus IP cím létrehozására, akkor konténer szintű hálózati eszköz konfigurációt kell létrehozni (helyi konfiguráció) az IP cím paraméterével, nem pedig a profil szinten.

Nézzük meg a profilt:

lxc profile show default

config: {}
description: Alapértelmezett LXD profil
devices:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic
  root:
    path: / 
    pool: ssdpool
    type: disk
name: default
used_by: []

Ebben a profilban látható, hogy minden újonnan létrehozott konténerhez két eszköz (devices) kerül létrehozásra:

  • eth0 — Eszköz típusa nic kapcsolódik a switch-hez (hálózati híd) lxdbr0
  • , felhasználó nevében fut, mivel alapvető rendszerbeállításokat módosítanak, de a WordPress közvetlenül egy normál felhasználóként működik. — Eszköz típusa disk amely a tároló pool-t használja ssdpool

Új profilok létrehozása ^

A korábban létrehozott Storage Pool konténerekhez létrehozunk egy konfigurációs profilt ssdroot amelyben egy eszköztípust adunk hozzá disk a csatolási ponttal / (root), amely a korábban létrehozott Storage Pool — ssdpool:

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

Hasonló módon létrehozunk egy eszköztípust, diskde ebben az esetben Storage Pool — hddpool:

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

Ellenőrizzük a konfigurációs profilokat:

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

Képgyűjtemény ^

A konténerek olyan képekből készülnek, amelyek speciálisan összeállított disztribúciók, amelyek nem tartalmaznak Linux kernelt. Ezért a konténer elindítása előtt az adott képből ki kell bontani.

Távoli képgyűjtemények ^

Alapértelmezés szerint az LXD három távoli forrásból szerzi be a képeket:

  • ubuntu: (stabil Ubuntu képekhez)
  • ubuntu-daily: (napi Ubuntu képekhez)
  • images: (más disztribúciók csoportjához)

lxc remote list

+-----------------+------------------------------------------+--------+--------+
|      NÉV       |                   URL                    | NYILVÁNOS | STATIKUS |
+-----------------+------------------------------------------+--------+--------+
| képek          | https://images.linuxcontainers.org       | IGEN    | NEM     |
+-----------------+------------------------------------------+--------+--------+
| helyi (alapértelmezett) | unix://                                  | NEM     | IGEN    |
+-----------------+------------------------------------------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | IGEN    | IGEN    |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-napi    | https://cloud-images.ubuntu.com/daily    | IGEN    | IGEN    |
+-----------------+------------------------------------------+--------+--------+

Például a tároló ubuntu: a következő képeket tartalmazza:

lxc image -c dasut list ubuntu: | head -n 11

+----------------------------------------------+--------------+----------+------------+
|                   LEÍRÁS                    | ARCHITEKTÚRA |   MÉRET  |   TÍPUS   |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150728)  | x86_64       | 153.72MB | TARTÁLY    |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150819)  | x86_64       | 152.91MB | TARTÁLY    |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150906)  | x86_64       | 154.69MB | TARTÁLY    |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150930)  | x86_64       | 153.86MB | TARTÁLY    |
+----------------------------------------------+--------------+----------+------------+

A korlátozott oszlopok megjelenítéséhez az alábbi opciót használtuk -c paraméterekkel dasut, és korlátoztuk a lista hosszát a következő paranccsal head.

A képek listájának megjelenítéséhez elérhető a szűrés. A következő parancs megjeleníti a disztribúció összes elérhető architektúráját AlpineLinux:

lxc image -c ldast list images:alpine/3.11

+------------------------------+--------------------------------------+--------------+
|            ALIAS             |             LEÍRÁS                  | ARCHITEKTÚRA |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11 (3 további)      | Alpine 3.11 amd64 (20200220_13:00)   | x86_64       |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/arm64 (1 további) | Alpine 3.11 arm64 (20200220_13:00)   | aarch64      |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/armhf (1 további) | Alpine 3.11 armhf (20200220_13:00)   | armv7l       |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/i386 (1 további)  | Alpine 3.11 i386 (20200220_13:01)    | i686         |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/ppc64el (1 további) | Alpine 3.11 ppc64el (20200220_13:00) | ppc64le      |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/s390x (1 további)  | Alpine 3.11 s390x (20200220_13:00)   | s390x        |
+------------------------------+--------------------------------------+--------------+

Helyi képgyűjtemény ^

A konténer használatának megkezdéséhez először a globális tárolóból a helyi tárolóba kell adni egy képet. helyi:Jelenleg a helyi tároló üres, ezt a parancs mutatja meg nekünk: lxc image listHa a módszernél list nem adjuk meg a tárolót, akkor alapértelmezés szerint a helyi tárolót használjuk: helyi:

lxc image list local:

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

A tárolóban lévő képek kezelésére a következő módszereket használjuk:

A parancs
Leírás

lxc image alias
Képként azonosítók kezelése

lxc image másolás
Képek másolása szerverek között

lxc image törlés
Képek törlése

lxc image szerkesztés
Kép tulajdonságainak szerkesztése

lxc image exportálás
Képek exportálása és letöltése

lxc image importálás
Képek importálása a képtárba

lxc image info
Hasznos információk megjelenítése a képekről

lxc image list
Képek felsorolása

lxc image frissítés
Képek frissítése

lxc image mutat
Kép tulajdonságainak megjelenítése

A képet a globális tárolóból a helyi tárolóba másoljuk: images::

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

A kép sikeresen másolva!

Megjelenítjük az összes képet, amely jelenleg elérhető a helyi tárolóban: helyi::

lxc image -c lfdatsu list local:

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

LXD konfiguráció ^

Az interaktív mód mellett az LXD nem-interaktív konfigurációs módot is támogat, amelyben a konfigurációt YAML fájl formájában adjuk meg, ez egy speciális formátum, amely lehetővé teszi, hogy egyszerre állítsuk be az egész konfigurációt, elkerülve a fenti cikkben tárgyalt több interaktív parancs végrehajtását, beleértve a hálózati konfigurációt, a profilok létrehozását stb. Ezt a területet itt nem tárgyaljuk, önállóan ismerkedhet meg vele. a dokumentációban..

A következő interaktív parancs: lxc config amit megvizsgálunk, lehetővé teszi a konfiguráció beállítását. Például, ha azt szeretnénk, hogy a helyi tárolóba töltött képek ne frissüljenek automatikusan a globális tárolókból, akkor ezt a viselkedést a következő parancs bekapcsolásával érhetjük el:

lxc config set images.auto_update_cached=false

Konténer létrehozása és kezelése ^

A konténer létrehozásához a következő parancsot használjuk: lxc init amely a következő értékeket veszi fel: tároló:kép és ezután a kívánt azonosítót a konténerhez. A tároló megadható helyiként. helyi: ez és bármely globális. Ha a tároló nincs megadva, akkor alapértelmezés szerint a képet a helyi tárolóból keresi. Ha a kép egy globális tárolóból van megadva, akkor először a képet a helyi tárolóba töltik le, majd felhasználják a konténer létrehozásához.

Futtassuk a következő parancsot az első konténerünk létrehozásához:

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

Részletezzük sorra a parancs kulcsszavait, amelyeket itt használunk:

  • alpine3 — A korábban a helyi tárolóba letöltött kép álnévét (pseudonym) adja meg. Ha az álnév nem jött létre ehhez a képhez, akkor mindig lehet a képre hivatkozni annak Fingerprint amely a táblázatban jelenik meg.
  • alp — A konténer azonosítóját adja meg
  • --storage — Ez a kulcs megmutatja, hogy hol Storage Pool lesz létrehozva a konténer
  • --profile — Ezek a kulcsok láncolt módon alkalmazzák a konfigurációt a korábban létrehozott profilokból a konténerre

Elindítjuk a konténert, amely kezdi elindítani a disztribúció init-rendszerét:

lxc start alp

Ezen kívül használhatjuk a parancsot lxc launch amely lehetővé teszi a parancsok összekapcsolását lxc init és lxc start egy műveletben.

Ellenőrizzük a konténer állapotát:

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

Ellenőrizzük a konténer konfigurációját:

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

A szakaszban profiles megbizonyosodhatunk arról, hogy ez a konténer két konfigurációs profilt használ — alapértelmezett és hddroot. A szakaszban devices csak egy eszközt találhatunk, mivel a hálózati eszközt a profil szintjén hozták létre. alapértelmezettAhhoz, hogy lássuk az összes eszközt, amelyet a konténer használ, hozzá kell adnunk a kulcsot --bővített:

lxc config show alp --bővített

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

Statikus IP cím beállítása ^

Ha megpróbáljuk beállítani az IP-címet a hálózati eszköz számára eth0 parancsot lxc config device set alp amely a konténer konfigurálására szolgál, akkor hibát fogunk kapni, ami azt jelenti, hogy az eszköz nem létezik, mert az eszköz eth0 amelyet a konténer használ, a profilhoz tartozik. alapértelmezett:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: Az eszköz nem létezik

Természetesen beállíthatunk statikus IP-címet az eth0 eszköz számára a profilban, de az minden konténer számára ugyanaz lesz, amely ezt a profilt használja. Ezért adjunk hozzá egy dedikált eszközt a konténerhez:

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

Ezután újra kell indítanunk a konténert:

lxc restart alp

Ha most megnézzük a konténer konfigurációját, akkor nincs szükségünk a --bővített opcióra, hogy láthatjuk a hálózati eszközt eth0, mivel létrehoztuk azt a konténer szintjén, és ez felülírta a profilon található ugyanazt az eszközt. alapértelmezett:

lxc config show alp

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine 3.11 amd64 (20200326_13:39)
  image.os: Alpine
  image.release: "3.11"
  image.serial: "20200326_13:39"
  image.type: squashfs
  volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
  volatile.eth0.host_name: veth2a1dc59d
  volatile.eth0.hwaddr: 00:16:3e:0e:e2:71
  volatile.idmap.base: "0"
  volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.power: RUNNING
devices:
  eth0:
    ipv4.address: 10.0.5.5
    name: eth0
    nictype: bridged
    parent: lxdbr0
    type: nic
  root:
    path: \/
    pool: hddpool
    type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""

Konténer eltávolítása ^

A konténer törlésére szolgáló parancs lxc delete, de mielőtt törölnénk a konténert, le kell állítani a lxc stop:

lxc stop alp

lxc list

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

Miután megbizonyosodtunk arról, hogy a konténer állapota STOPPED, eltávolíthatjuk a Storage Pool:

lxc delete alp

Hozzáférés a konténerhez ^

A parancsok közvetlen végrehajtására a konténerben, a hálózati kapcsolatok megkerülésével, a következő parancs szolgál lxc exec , amely parancsokat hajt végre a konténeren belül anélkül, hogy rendszerhéjat indítana. Ha a parancsot shell mintázatokkal szeretnénk futtatni, mint például változók, fájlátirányítás (pipe) stb., akkor kifejezetten el kell indítani a shellt, és a parancsot kulcsként átadni, például:

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

A parancsban speciális escape karaktert használtunk a speciális karakterhez $ hogy a változó $HOME ne a hosztgépen interpretálódjon, hanem csak a konténeren belül.

Ezenkívül indítható interaktív shell mód is, majd a munkaidő végeztével befejezhetjük a munkát a hotkey megnyomásával CTRL+D:

lxc exec alp -- \/bin\/sh

Konténer erőforrásainak kezelése ^

Az LXD-ben a konténer erőforrásai egy speciális konfigurációs készlettel kezelhetők. A konténer konfigurálási paramétereinek teljes listáját itt találhatja a dokumentációban..

RAM (MEMÓRIA) erőforrás korlátozása ^

A parameter limits.memory korlátozza a konténerhez elérhető RAM mennyiségét. Az értékként egy számot és az egyik elérhető utótagot.

adunk meg. Korlátozzuk a konténert 256 MB RAM-ra:

lxc config set alp limits.memory 256MB

Továbbá, léteznek más paraméterek a memória korlátozására:

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

A parancs lxc config show lehetőséget ad az összes konteiner konfigurációjának megjelenítésére, beleértve az alkalmazott erőforrás-korlátozást is:

lxc config show alp

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine 3.11 amd64 (20200220_13:00)
  image.os: Alpine
  image.release: "3.11"
  image.serial: "20200220_13:00"
  image.type: squashfs
  limits.memory: 256MB
  volatile.base_image: 73a3093d4a5ce0148fd84b95369b3fbecd19a537ddfd2e2d20caa2eef0e8fd60
  volatile.eth0.host_name: veth75b6df07
  volatile.eth0.hwaddr: 00:16:3e:a1:e7:46
  volatile.idmap.base: "0"
  volatile.idmap.current: '[]'
  volatile.idmap.next: '[]'
  volatile.last_state.idmap: '[]'
  volatile.last_state.power: RUNNING
devices: {}
ephemeral: false
profiles:
- default
stateful: false
description: ""

CPU (PROCESSZOR) erőforrás korlátozása ^

A CPU erőforrások korlátozására több lehetőség áll rendelkezésre korlátozási típusok:

  • limit.cpu — a konténert egy vagy több CPU maghoz köt
  • limits.cpu.allowance — kezeli a CFS ütemező időkereteit, amikor a időkorlát lejárt, vagy egy általános erőforrás-megosztási mechanizmust, amikor elérte a százalékos értéket
  • limits.cpu.priority — az ütemező prioritása, amikor több példány egy csoport CPU-t használ egyenlő százalékos arányban

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

Lemezterület korlátozása ^

Az olyan korlátozások mellett, mint limits.read, limits.write a konténer számára a tárolóhely használatát is korlátozhatjuk (csak ZFS vagy BTRFS-sel működik):

lxc config device set alp root size=2GB

A beállítás után, a paraméterben devices.root.size megbizonyosodhatunk a beállított korlátozásról:

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

A használt lemezkorlátok megtekintéséhez a következő parancsot használhatjuk: 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

Bár korlátozást állítottunk be a konténer gyökérfelületére 2GB-ra, a rendszeres utilitások, mint például df nem fogják látni ezt a korlátozást. Ehhez egy kisebb tesztet végzünk, hogy kiderítsük, hogyan működik ez.

Két új, azonos konténert hozunk létre ugyanabban a Storage Pool (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         |
+------+---------+------------------+------+-----------+-----------+

Az egyik konténerben létrehozunk egy 1GB méretű fájlt:

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

Győződjünk meg arról, hogy a fájl létrejött:

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

Ha megnézzük a második konténerben, és ellenőrizzük a fájl létezését ugyanazon a helyen, akkor nem lesz fájl, ami várható, mivel a konténerek saját Storage Volume ebben az Storage Pool:

lxc exec alp2 -- ls -lh
total 0

De nézzük meg az értékeket, amelyeket az df az egyik és a másik konténerben ad ki:

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

A készülék /dev/loop1 amely gyökérpartként van felszerelve az Storage Pool ezeket a konténereket alkalmazza, ezért megosztják a térfogatot.

Erőforrás-felhasználási statisztika ^

A konténer erőforrás-felhasználásának statisztikáit a következő parancs segítségével lehet megnézni:

lxc info alp

Name: alp
Location: none
Remote: unix:\/\/ 
Architecture: x86_64
Created: 2020\/04\/08 18:05 UTC
Status: Running
Type: container
Profiles: default, hddroot
Pid: 19219
Ips:
  eth0: inet    10.0.5.5        veth2a1dc59d
  eth0: inet6   fe80::216:3eff:fe0e:e271        veth2a1dc59d
  lo:   inet    127.0.0.1
  lo:   inet6   ::1
Resources:
  Processes: 5
  Disk usage:
    root: 495.62kB
  CPU usage:
    CPU usage (in seconds): 1
  Memory usage:
    Memory (current): 4.79MB
  Network usage:
    eth0:
      Bytes received: 730B
      Bytes sent: 1.59kB
      Packets received: 3
      Packets sent: 14
    lo:
      Bytes received: 0B
      Bytes sent: 0B
      Packets received: 0
      Packets sent: 0

Pillanatképekkel való munka ^

Az LXD lehetőséget biztosít pillanatfelvételek készítésére és a konténer állapotának visszaállítására.

A pillanatfelvétel létrehozásához hajtsa végre a következő parancsot:

lxc snapshot alp snapshot1

A parancsnak lxc snapshot nincs kapcsolója list, ezért a pillanatfelvételek listájának megtekintéséhez a konténer összesített információs parancsát kell használnia:

lxc info alp
...
...
Pillanatfelvételek:
  snapshot1 (felvéve: 2020/04/08 18:18 UTC) (állapot nélküli)

A konténer visszaállítása egy pillanatfelvételből a következő paranccsal lehetséges: lxc restore megjelölve a visszaállítandó konténert és a pillanatfelvétel aliasát:

lxc restore alp snapshot1

A következő parancs a pillanatfelvétel törlésére szolgál. Kérjük, vegye figyelembe, hogy a parancs szintaxisa eltér a többitől; itt közvetlen perjelet kell megadni a konténer neve után. Ha a perjelet elhagyja, a pillanatfelvétel törlése parancs konténer törléseként kerül értelmezésre!

lxc delete alp/snapshot1

A fent említett példában a úgynevezett állapot nélküli pillanatfelvételeket vizsgáltuk. Az LXD-nek van egy másik pillanatfelvétel típusa is - állapot megőrző, amely a konténer összes folyamatának aktuális állapotát tárolja. Az állapot megőrző pillanatfelvételekhez számos érdekes és hasznos funkció kapcsolódik.

Mi mást? ^

  • A Python fejlesztők számára elérhető a PyLXD amely API-t biztosít az LXD-hez.

FRISSÍTÉS 2020.04.10 15:00: Navigációt adtam hozzá

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster