Osnovne značilnosti LXD - Linux kontejnerskih sistemov

Osnovne značilnosti LXD - Linux kontejnerskih sistemov

LXD je naslednja generacija upravitelja sistemskih vsebnikov, tako piše Vir. Ponuja uporabniški vmesnik, podoben virtualnim strojem, vendar namesto tega uporablja vsebnike Linux.

LXD jedro je privilegiran demon (storitev, ki se izvaja s korenskimi pravicami), ki zagotavlja API REST prek lokalne vtičnice unix in tudi prek omrežja, če je nameščena ustrezna konfiguracija. Odjemalci, kot je orodje ukazne vrstice, ki je na voljo z LXD, postavljajo zahteve prek tega API-ja REST. To pomeni, da ne glede na to, ali dostopate do lokalnega ali oddaljenega gostitelja, vse deluje enako.

V tem članku se ne bomo podrobno ukvarjali s koncepti LXD, ne bomo upoštevali vseh razpoložljivih zmogljivosti, opisanih v dokumentaciji, vključno z nedavno implementacijo podpore za virtualne stroje QEMU vzporedno s kontejnerji v najnovejših različicah LXD. Namesto tega se bomo naučili le osnov upravljanja vsebnikov – nastavitev pomnilniških bazenov, mreženje, izvajanje vsebnika, uporaba omejitev virov in kako uporabljati posnetke, da boste lahko pridobili osnovno razumevanje LXD in uporabljali vsebnike v Linuxu.

Za popolne informacije glejte uradni vir:

Navigacija

Namestitev LXD ^

Namestitev LXD na distribucije Ubuntu ^

V distribucijskem paketu Ubuntu 19.10 lxd ima oddajo snap paket:

apt search lxd

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

To pomeni, da bosta hkrati nameščena dva paketa, eden kot sistemski paket in drugi kot snap paket. Namestitev dveh paketov v sistem lahko povzroči težave, ko sistemski paket lahko osirote, če upravitelj snap paketov odstrani paket snap.

Najdi paket lxd v repozitoriju snap lahko uporabite naslednji ukaz:

snap find lxd

Name             Version        Summary
lxd              3.21           System container manager and API
lxd-demo-server  0+git.6d54658  Online software demo sessions using LXD
nova             ocata          OpenStack Compute Service (nova)
nova-hypervisor  ocata          OpenStack Compute Service - KVM Hypervisor (nova)
distrobuilder    1.0            Image builder for LXC and LXD
fabrica          0.1            Build snaps by simply pointing a web form to...
satellite        0.1.2          Advanced scalable Open source intelligence platform

Z izvajanjem ukaza list se lahko prepričate, da paket lxd še ni nameščen:

snap list

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

Kljub temu, da je LXD snap paket, ga je treba namestiti prek sistemskega paketa lxd, ki bo ustvaril ustrezno skupino v sistemu, potrebne pripomočke v /usr/bin itd

sudo apt update
sudo apt install lxd

Prepričajmo se, da je paket nameščen kot snap paket:

snap list

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

Namestitev LXD na distribucije Arch Linux ^

Če želite namestiti paket LXD v sistem, morate zagnati naslednje ukaze, prvi bo posodobil seznam paketov v sistemu, ki so na voljo v repozitoriju, drugi pa bo neposredno namestil paket:

sudo pacman -Syyu && sudo pacman -S lxd

Po namestitvi paketa, da bi LXD lahko upravljal navaden uporabnik, ga je treba dodati v sistemsko skupino lxd:

sudo usermod -a -G lxd user1

Prepričajmo se, da uporabnik user1 dodan v skupino lxd:

id -Gn user1

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

Če skupina lxd ni viden na seznamu, potem morate znova aktivirati uporabniško sejo. Če želite to narediti, se morate odjaviti in prijaviti pod istim uporabnikom.

Aktivirajte v systemd nalaganje storitve LXD ob zagonu sistema:

sudo systemctl enable lxd

Začnimo s storitvijo:

sudo systemctl start lxd

Preverjanje statusa storitve:

sudo systemctl status lxd

Storage LXD (Shranjevanje) ^

Preden se začne inicializacija, moramo razumeti, kako je shramba v LXD logično urejena.

Shranjevanje (skladiščenje) sestavljajo od enega ali več Bazen za shranjevanje ki uporablja enega od podprtih datotečnih sistemov, kot so ZFS, BTRFS, LVM ali navadne imenike. vsak Bazen za shranjevanje je razdeljen na zvezke (Prostor za shranjevanje), ki vsebujejo slike, vsebnike ali podatke za druge namene.

  • Slike - to so posebej sestavljene distribucije brez jedra Linuxa in na voljo iz zunanjih virov
  • Zabojniki - to so razporejene distribucije iz slik, pripravljene za uporabo
  • Posnetki - to so posnetki stanja vsebnikov, na katere se lahko vrnete

Osnovne značilnosti LXD - Linux kontejnerskih sistemov

Za upravljanje pomnilnika v LXD uporabite ukaz lxc storage certifikat, ki ga pridobite z vnosom ključa - lxc storage --help

Naslednji ukaz prikaže seznam vseh Bazen za shranjevanje v shrambi LXD:

lxc storage list

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

Za ogled seznama vseh Prostor za shranjevanje v izbranem Bazen za shranjevanje služi ekipi 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       |
+-----------+----------------------------------+-------------+---------+

Tudi, če za Bazen za shranjevanje Pri ustvarjanju je bil izbran datotečni sistem BTRFS, nato pridobite seznam Prostor za shranjevanje ali podštevilke v interpretaciji BTRFS lahko uporabite komplet orodij tega datotečnega sistema:

sudo btrfs subvolume list -p /var/lib/lxd/storage-pools/hddpool

ID 257 gen 818 parent 5 top level 5 path images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3

sudo btrfs subvolume list -p /var/lib/lxd/storage-pools/ssdpool

ID 257 gen 1820 parent 5 top level 5 path images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
ID 260 gen 1819 parent 5 top level 5 path containers/jupyter
ID 263 gen 1820 parent 5 top level 5 path containers/alp3

Inicializacija LXD ^

Preden ustvarite in uporabite vsebnike, morate izvesti splošno inicializacijo LXD, ki ustvari in konfigurira omrežje in shrambo. To je mogoče storiti ročno z uporabo standardnih odjemalskih ukazov, ki so na voljo na seznamu s klicem ukaza lxc --help ali s pomočjo čarovnika za inicializacijo lxd init odgovori na nekaj vprašanj.

Izbira datotečnega sistema za pomnilniško področje ^

Med inicializacijo LXD postavi več vprašanj, vključno z določitvijo vrste datotečnega sistema za privzeto Bazen za shranjevanje. Privzeto je zanj izbran datotečni sistem BTRFS. Po ustvarjanju ne bo mogoče spremeniti drugega FS. Priporočljivo je, da izberete FS primerjalno tabelo funkcij:

Feature
Imenik
Btrfs
LVM
ZFS
CEPH

Optimizirano shranjevanje slik
št
ja
ja
ja
ja

Optimizirano ustvarjanje primerkov
št
ja
ja
ja
ja

Optimizirano ustvarjanje posnetkov
št
ja
ja
ja
ja

Optimiziran prenos slike
št
ja
št
ja
ja

Optimiziran prenos primerkov
št
ja
št
ja
ja

kopiraj na pisanje
št
ja
ja
ja
ja

Na podlagi blokov
št
št
ja
št
ja

Takojšnje kloniranje
št
ja
ja
ja
ja

Gonilnik za shranjevanje, ki se lahko uporablja znotraj vsebnika
ja
ja
št
št
št

Obnovi iz starejših posnetkov (ne najnovejših)
ja
ja
ja
št
ja

Kvote za shranjevanje
da(*)
ja
ja
ja
št

Inicializacija omrežja in pomnilniškega bazena s čarovnikom ^

Naslednji ukaz, ki si ga bomo ogledali, predlaga nastavitev glavnih komponent LXD z odgovori na preprosta vprašanja s čarovnikom za inicializacijo.

Zaženi ukaz lxc init in vnesite odgovore na vprašanja za dvopičjem, kot je prikazano v spodnjem primeru, ali jih spremenite glede na svoje pogoje:

lxd init

Would you like to use LXD clustering? (yes/no) [default=no]: 
Do you want to configure a new storage pool? (yes/no) [default=yes]: 
Name of the new storage pool [default=default]: ssdpool         
Name of the storage backend to use (lvm, btrfs, dir) [default=btrfs]: 
Create a new BTRFS pool? (yes/no) [default=yes]: 
Would you like to use an existing block device? (yes/no) [default=no]: 
Size in GB of the new loop device (1GB minimum) [default=15GB]: 10GB
Would you like to connect to a MAAS server? (yes/no) [default=no]: 
Would you like to create a new local network bridge? (yes/no) [default=yes]: 
What should the new bridge be called? [default=lxdbr0]: 
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 10.0.5.1/24
Would you like LXD to NAT IPv4 traffic on your bridge? [default=yes]: 
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none
Would you like LXD to be available over the network? (yes/no) [default=no]: 
Would you like stale cached images to be updated automatically? (yes/no) [default=yes] no
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: 

Ustvarjanje dodatnega pomnilniškega področja ^

V prejšnjem koraku smo ustvarili Bazen za shranjevanje ki je dobil ime ssdpool in katere datoteka se nahaja v mojem sistemu na /var/lib/lxd/disks/ssdpool.img. Ta naslov datotečnega sistema ustreza fizičnemu pogonu SSD v mojem računalniku.

Naslednji ukrepi za razširitev razumevanja vloge, ki jo igra Bazen za shranjevanje v repozitoriju bomo ustvarili drugo Bazen za shranjevanje ki bo fizično nameščen na drugi vrsti diska, HDD. Težava je v tem, da vam LXD ne dovoljuje ustvarjanja Bazen za shranjevanje iz naslova /var/lib/lxd/disks/ in celo simbolne povezave ne bodo delovale, glejte odgovor razvijalca. To omejitev lahko zaobidemo med inicializacijo/formatiranjem Bazen za shranjevanje z navedbo vrednosti kot blokovne naprave namesto poti do datoteke povratne zanke tako, da to navedete v ključu source.

Torej, pred ustvarjanjem Bazen za shranjevanje v vašem datotečnem sistemu morate definirati datoteko povratne zanke ali obstoječo particijo, ki jo bo uporabljala. Za to bomo ustvarili in uporabili datoteko, katere velikost bomo omejili na 10 GB:

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

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

Povežimo datoteko povratne zanke z brezplačno napravo za povratno zanko:

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

/dev/loop1

Zahvaljujoč ključu --show izvajanje ukaza vrne na zaslon ime naprave, v katero je povezana naša povratna datoteka. Po potrebi lahko prikažemo seznam vseh zasedenih naprav te vrste, da se prepričamo, ali so naša dejanja pravilna:

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

Na seznamu lahko ugotovite, da ima naprava /dev/loop1 vključena povratna datoteka /mnt/work/lxd/hddpool.img, in v napravi /dev/loop0 vključena povratna datoteka /var/lib/lxd/disks/ssdpool.img ki ustreza privzetku Bazen za shranjevanje.

Naslednji ukaz ustvari novega Bazen za shranjevanje v LXD na podlagi datoteke povratne zanke, ki smo jo pravkar pripravili. LXD bo formatiral datoteko povratne zanke /mnt/work/lxd/hddpool.img v napravi /dev/loop1 za datotečni sistem BTRFS:

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

Prikažimo seznam vseh Bazen za shranjevanje na zaslon:

lxc storage list

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

Povečanje velikosti pomnilniškega bazena ^

Po ustvarjanju Bazen za shranjevanje, če je potrebno, se lahko razširi. Za Bazen za shranjevanje na podlagi datotečnega sistema BTRFS zaženite naslednje ukaze:

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

Samodejno vstavljanje datoteke povratne zanke v režo naprave za povratno zanko ^

Imamo eno majhno težavo, pri ponovnem zagonu gostiteljskega sistema, datoteko /mnt/work/lxd/hddpool.img bo "odletel" iz naprave /dev/loop1 in storitev LXD se bo zrušila pri nalaganju, ker je ne bo videla v tej napravi. Za rešitev te težave morate ustvariti sistemsko storitev, ki bo to datoteko vstavila v napravo /dev/loop1 ko se gostiteljski sistem zažene.

Ustvarjajmo Enota vrsta datoteke Storitev в /etc/systemd/system/ za inicializacijski sistem 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

Aktivirajte storitev:

sudo systemctl enable lxd-hddpool

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

Po ponovnem zagonu gostiteljskega sistema preverimo status storitve:

systemctl status lxd-hddpool.service 

● lxd-hddpool.service - Losetup LXD Storage Pool (hddpool)
     Loaded: loaded (/etc/systemd/system/lxd-hddpool.service; enabled; vendor preset: disabled)
     Active: active (exited) since Wed 2020-04-08 03:43:53 MSK; 1min 37s ago
    Process: 711 ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img (code=exited, status=0/SUCCESS)
   Main PID: 711 (code=exited, status=0/SUCCESS)

апр 08 03:43:52 manjaro systemd[1]: Starting Losetup LXD Storage Pool (hddpool)...
апр 08 03:43:53 manjaro systemd[1]: Finished Losetup LXD Storage Pool (hddpool).

Iz izhoda lahko preverimo, ali je stanje storitve aktivna, kljub dejstvu, da je bila izvedba našega skripta iz enega ukaza končana, nam je možnost to omogočila RemainAfterExit=true.

Varnost. Privilegiji vsebnika ^

Ker se vsi procesi vsebnika dejansko izvajajo izolirano v gostiteljskem sistemu z uporabo njegovega jedra, za dodatno zaščito dostopa procesov vsebnika do gostiteljskega sistema LXD ponuja privilegij procesa, kjer:

  • Privilegirani kontejnerji - to so vsebniki, v katerih procesi z UID in GID ustrezajo istemu lastniku kot na gostiteljskem sistemu. Na primer, proces, ki se izvaja v vsebniku z UID 0, ima vse enake pravice dostopa kot proces v gostiteljskem sistemu z UID 0. Z drugimi besedami, korenski uporabnik v vsebniku ima vse pravice ne le v vsebniku, temveč tudi v gostiteljskem sistemu, če lahko gre zunaj izoliranega imenskega prostora vsebnika.

  • Neprivilegirani vsebniki - to so vsebniki, v katerih procesi pripadajo lastniku UID in GID s številko od 0 do 65535, vendar je za gostiteljski sistem lastnik zamaskiran z dodanimi biti SubUID oziroma SubGID. Na primer, uporabnik z UID=0 v vsebniku bo v gostiteljskem sistemu viden kot SubUID + UID. To ščiti gostiteljski sistem, ker če lahko kateri koli proces v vsebniku uide svojemu izoliranemu imenskemu prostoru, lahko z gostiteljskim sistemom komunicira le kot proces z neznanim, zelo visokim UID/GID.

Privzeto imajo na novo ustvarjeni vsebniki neprivilegiran status, zato moramo definirati SubUID in SubGID.

Ustvarimo dve konfiguracijski datoteki, v katerih bomo nastavili masko za SubUID oziroma SubGID:

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

Za uveljavitev sprememb je treba storitev LXD znova zagnati:

sudo systemctl restart lxd

Ustvarjanje navideznega omrežnega stikala ^

Ker smo predhodno inicializirali omrežje s čarovnikom za inicializacijo lxd init in ustvaril omrežno napravo lxdbr0, potem se bomo v tem razdelku preprosto seznanili z omreženjem v LXD in kako ustvariti virtualno stikalo (most) z ukazom odjemalca.

Naslednji diagram prikazuje, kako stikalo (most) povezuje gostitelja in vsebnike v omrežje:

Osnovne značilnosti LXD - Linux kontejnerskih sistemov

Vsebniki lahko prek omrežja komunicirajo z drugimi vsebniki ali gostiteljem, na katerem so ti vsebniki na voljo. Če želite to narediti, morate navidezne omrežne kartice vsebnikov povezati z navideznim stikalom. Najprej bomo ustvarili stikalo, omrežni vmesniki vsebnika pa bodo povezani v naslednjih poglavjih, potem ko bo ustvarjen sam vsebnik.

Naslednji ukaz ustvari stikalo s podomrežjem 10.0.5.0/24 in naslov IPv4 10.0.5.1/24, in vključuje tudi ipv4.nat tako da lahko vsebniki dostopajo do interneta prek gostitelja s storitvijo NAT:

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

Preverjanje seznama omrežnih naprav, ki so na voljo v LXD:

lxc network list

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

Prav tako lahko preverite, ali je bila omrežna naprava ustvarjena s standardnim orodjem distribucije Linux - ip link ali ip addr:

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:ee:7b:5a:6b:44 brd ff:ff:ff:ff:ff:ff
    altname enp0s25
    inet6 fe80::9571:11f3:6e0c:c07b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: lxdbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether c2:38:90:df:cb:59 brd ff:ff:ff:ff:ff:ff
    inet 10.0.5.1/24 scope global lxdbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::c038:90ff:fedf:cb59/64 scope link 
       valid_lft forever preferred_lft forever
5: veth3ddab174@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master lxdbr0 state UP group default qlen 1000
    link/ether ca:c3:5c:1d:22:26 brd ff:ff:ff:ff:ff:ff link-netnsid 0

Konfiguracijski profil ^

Vsak vsebnik v LXD ima svojo konfiguracijo in jo lahko razširi z globalno deklariranimi konfiguracijami, imenovanimi konfiguracijski profili. Uporaba konfiguracijskih profilov za vsebnik ima kaskadni model, naslednji primer to prikazuje:

Osnovne značilnosti LXD - Linux kontejnerskih sistemov

V tem primeru so bili v sistemu LXD ustvarjeni trije profili: default, hddpool и hostfs. Vsi trije profili so uporabljeni za vsebnik, ki ima lokalno konfiguracijo (sivo območje). Profil default ima napravo root ki ima parameter pool je enako ssdpool, toda zahvaljujoč modelu aplikacije kaskadne konfiguracije lahko na vsebnik uporabimo profil hddpool ki ima parameter pool bo preglasil isti parameter iz profila default in vsebnik bo prejel konfiguracijo naprave root s parametrom pool enako hddpoolin profil hostfs preprosto doda novo napravo v vsebnik.

Če si želite ogledati seznam razpoložljivih konfiguracijskih profilov, uporabite naslednji ukaz:

lxc profile list

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

Popoln seznam razpoložljivih ukazov za delo s profilom lahko dobite z dodajanjem ključa --help:

lxc profile --help

Description:
  Manage profiles

Usage:
  lxc profile [command]

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

Urejanje vašega profila ^

Privzeti konfiguracijski profil default nima konfiguracije omrežne kartice za vsebnik in vsi novo ustvarjeni kontejnerji nimajo omrežja, zanje je potrebno ustvariti lokalne (namenske) omrežne naprave z ločenim ukazom, lahko pa ustvarimo globalno omrežno napravo v konfiguraciji profil, ki bo v skupni rabi med vsemi vsebniki, ki uporabljajo ta profil. Tako bodo takoj po ukazu za ustvarjanje novega kontejnerja imeli omrežje z dostopom do omrežja. Hkrati pa ni nobenih omejitev, po potrebi lahko lokalno omrežno napravo vedno ustvarimo pozneje.

Naslednji ukaz bo dodal napravo v konfiguracijski profil eth0 tip nic povezan z omrežjem lxdbr0:

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

Pomembno je omeniti, da ker smo napravo dejansko dodali konfiguracijskemu profilu, če smo v napravi podali statični naslov IP, bodo vsi vsebniki, ki bodo uporabljali ta profil, delili isti naslov IP. Če je treba ustvariti vsebnik s statičnim naslovom IP, dodeljenim vsebniku, morate ustvariti konfiguracijo omrežne naprave na ravni vsebnika (lokalna konfiguracija) s parametrom naslova IP in ne na ravni profila.

Preverimo profil:

lxc profile show default

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

V tem profilu lahko vidimo, da bosta za vse novo ustvarjene vsebnike ustvarjeni dve napravi:

  • eth0 — Vrsta naprave nic priključen na stikalo (omrežni most) lxdbr0
  • root — Vrsta naprave disk ki uporablja shranjevalni bazen ssdpool

Ustvarjanje novih profilov ^

Za uporabo predhodno ustvarjenega Bazen za shranjevanje vsebnike, ustvarite konfiguracijski profil ssdroot v katerega bomo dodali napravo, kot je disk s točko pritrditve / (root) z uporabo predhodno ustvarjenega Bazen za shranjevanje - ssdpool:

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

Podobno ustvarimo napravo, kot je disk, vendar v tem primeru z uporabo Bazen za shranjevanje - hddpool:

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

Preverjanje konfiguracijskih profilov:

lxc profile show ssdroot

config: {}
description: ""
devices:
  root:
    path: /
    pool: ssdpool
    type: disk
name: ssdroot
used_by: []

lxc profile show hddroot

config: {}
description: ""
devices:
  root:
    path: /
    pool: hddpool
    type: disk
name: hddroot
used_by: []

Repozitorij slik ^

Vsebniki so ustvarjeni iz slik, ki so posebej sestavljene distribucije, ki nimajo jedra Linuxa. Zato je treba pred zagonom vsebnika razmestiti iz te slike. Vir slik je lokalni repozitorij, v katerega se slike nalagajo iz zunanjih repozitorijev.

Repozitoriji oddaljenih slik ^

LXD je privzeto konfiguriran za prejemanje slik iz treh oddaljenih virov:

  • ubuntu: (za stabilne slike Ubuntu)
  • ubuntu-daily: (za dnevne slike Ubuntuja)
  • slike: (za kup drugih distribucij)

lxc remote list

+-----------------+------------------------------------------+--------+--------+
|      NAME       |                   URL                    | PUBLIC | STATIC |
+-----------------+------------------------------------------+--------+--------+
| images          | https://images.linuxcontainers.org       | YES    | NO     |
+-----------------+------------------------------------------+--------+--------+
| local (default) | unix://                                  | NO     | YES    |
+-----------------+------------------------------------------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | YES    | YES    |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily    | YES    | YES    |
+-----------------+------------------------------------------+--------+--------+

Na primer skladišče ubuntu: ima naslednje slike:

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

+----------------------------------------------+--------------+----------+------------+
|                   DESCRIPTION                | ARCHITECTURE |   SIZE   |   TYPE     |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150728)  | x86_64       | 153.72MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150819)  | x86_64       | 152.91MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150906)  | x86_64       | 154.69MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150930)  | x86_64       | 153.86MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+

Za prikaz omejenega števila stolpcev smo uporabili možnost -c s parametri dasut, z ukazom pa tudi omejil dolžino seznama head.

Za prikaz seznama slik je na voljo filtriranje. Naslednji ukaz bo prikazal seznam vseh razpoložljivih distribucijskih arhitektur AlpineLinux:

lxc image -c ldast list images:alpine/3.11

+------------------------------+--------------------------------------+--------------+
|            ALIAS             |             DESCRIPTION              | ARCHITECTURE |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11 (3 more)         | Alpine 3.11 amd64 (20200220_13:00)   | x86_64       |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/arm64 (1 more)   | Alpine 3.11 arm64 (20200220_13:00)   | aarch64      |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/armhf (1 more)   | Alpine 3.11 armhf (20200220_13:00)   | armv7l       |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/i386 (1 more)    | Alpine 3.11 i386 (20200220_13:01)    | i686         |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/ppc64el (1 more) | Alpine 3.11 ppc64el (20200220_13:00) | ppc64le      |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/s390x (1 more)   | Alpine 3.11 s390x (20200220_13:00)   | s390x        |
+------------------------------+--------------------------------------+--------------+

Lokalno skladišče slik ^

Če želite začeti uporabljati vsebnik, morate dodati sliko iz globalnega repozitorija v lokalno local:. Zdaj je lokalno skladišče prazno, ukaz bo poskrbel za to lxc image list. Če metoda list ne določite repozitorija, potem bo privzeto uporabljen lokalni repozitorij - local:

lxc image list local:

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

Slike v repozitoriju se upravljajo z naslednjimi metodami:

Ekipa
Opis

lxc slika alias
Upravljanje vzdevkov slik

lxc slika copy
Kopirajte slike med strežniki

lxc slika odstrani
Izbriši slike

lxc slika Uredi
Uredi lastnosti slike

lxc slika izvoz
Izvoz in prenos slik

lxc slika uvoz
Uvozite slike v shrambo slik

lxc slika info
Pokaži uporabne informacije o slikah

lxc slika Seznam
Seznam slik

lxc slika osvežitev
Osveži slike

lxc slika Prikaži
Pokaži lastnosti slike

Kopirajte sliko v lokalni repozitorij iz globalnega images::

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

Image copied successfully!

Prikažimo seznam vseh slik, ki so trenutno na voljo v lokalnem skladišču local::

lxc image -c lfdatsu list local:

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

Konfiguracija LXD ^

Poleg interaktivnega načina LXD podpira tudi neinteraktivni način namestitve konfiguracije, ko je konfiguracija določena v obliki datoteke YAML, posebnega formata, ki vam omogoča namestitev celotne konfiguracije naenkrat, mimo izvajanja številnih interaktivnih ukazov, ki so bili obravnavani zgoraj v tem članku, vključno s konfiguracijo omrežja, ustvarjanjem konfiguracijskih profilov itd. Tukaj ne bomo obravnavali tega področja, preverite ga lahko sami. v dokumentaciji.

Naslednji interaktivni ukaz lxc config ki si ga bomo ogledali, omogoča nastavitev konfiguracije. Na primer, da zagotovimo, da se slike, prenesene v lokalni repozitorij, ne posodobijo samodejno iz globalnih repozitorijev, lahko to vedenje omogočimo z naslednjim ukazom:

lxc config set images.auto_update_cached=false

Ustvarjanje in upravljanje vsebnika ^

Če želite ustvariti vsebnik, uporabite ukaz lxc init na katerega se posredujejo vrednosti репозиторий:образ in nato želeni ID vsebnika. Repozitorij je mogoče določiti kot lokalni local: prav tako vsaka globalna. Če repozitorij ni določen, se za iskanje slike privzeto uporablja lokalni repozitorij. Če je slika podana iz globalnega repozitorija, bo slika najprej prenesena v lokalni repozitorij in nato uporabljena za ustvarjanje vsebnika.

Zaženimo naslednji ukaz, da ustvarimo naš prvi vsebnik:

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

Oglejmo si ukazne tipke, ki jih tukaj uporabljamo po vrstnem redu:

  • alpine3 — Vzdevek (vzdevek) je določen za sliko, ki je bila predhodno naložena v lokalni repozitorij. Če vzdevek ni bil ustvarjen za to sliko, se lahko vedno sklicujete na sliko z njenim Prstni odtis ki je prikazana v tabeli.
  • alp — Nastavi identifikator za vsebnik
  • --storage — Ta ključ označuje, v katerem Bazen za shranjevanje ustvarjen bo vsebnik
  • --profile — Ti ključi kaskadno uporabljajo konfiguracijo iz predhodno ustvarjenih konfiguracijskih profilov v vsebniku

Zaženemo vsebnik, ki začne zagnati sistem inicializacije distribucije:

lxc start alp

Uporabite lahko tudi ukaz lxc launch ki vam omogoča združevanje ekip lxc init и lxc start v eni operaciji.

Preverjanje stanja posode:

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

Preverjanje konfiguracije vsebnika:

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 razdelku profiles zagotovimo lahko, da ta vsebnik uporablja dva konfiguracijska profila − default и hddroot. V razdelku devices zaznamo lahko le eno napravo, ker je bila omrežna naprava ustvarjena na ravni profila default. Če želite videti vse naprave, ki jih uporablja vsebnik, morate dodati ključ --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: ""

Nastavitev statičnega naslova IP ^

Če poskušamo nastaviti naslov IP za omrežno napravo eth0 ekipa lxc config device set alp namenjen konfiguraciji vsebnika, potem bomo prejeli napako, ki bo poročala, da naprava ne obstaja, ker naprava eth0 ki ga uporablja zabojnik spada v profil default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Seveda lahko nastavimo statični naslov IP za eth0 naprav v profilu, vendar bo enako za vse vsebnike, ki bodo uporabljali ta profil. Zato dodajmo napravo, namenjeno vsebniku:

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

Nato morate znova zagnati posodo:

lxc restart alp

Če zdaj pogledamo konfiguracijo vsebnika, nam možnosti ni treba uporabiti --expanded da vidite omrežno napravo eth0, saj smo ga ustvarili na ravni vsebnika in se je kaskadno povezal prek iste naprave iz profila default:

lxc config show alp

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

Odstranjevanje posode ^

Če želite odstraniti vsebnik, uporabite ukaz lxc delete, vendar ga je treba pred odstranitvijo vsebnika ustaviti z ukazom lxc stop:

lxc stop alp

lxc list

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

Ko smo preverili, ali je stanje vsebnika postalo STOPPED, ga je mogoče odstraniti iz Bazen za shranjevanje:

lxc delete alp

Dostop do kontejnerja ^

Za neposredno izvajanje ukazov v vsebniku, mimo omrežnih povezav, uporabite ukaz lxc exec ki izvaja ukaze v vsebniku brez zagona sistemske lupine. Če morate izvesti ukaz v lupini z uporabo vzorcev lupine, kot so spremenljivke, preusmeritve datotek (cev) itd., morate izrecno zagnati lupino in posredovati ukaz kot ključ, na primer:

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

Ukaz je uporabil poseben ubežni znak za poseben značaj $ tako da spremenljivka $HOME ni bil interpretiran na gostiteljskem stroju, ampak je bil interpretiran le znotraj vsebnika.

Možno je tudi zagnati način interaktivne lupine in nato končati sejo z izvajanjem bližnjične tipke CTRL+D:

lxc exec alp -- /bin/sh

Upravljanje virov vsebnika ^

V LXD lahko upravljate vire vsebnika s posebnim naborom konfiguracij. Najdete lahko celoten seznam konfiguracijskih parametrov vsebnika v dokumentaciji.

Omejitev virov RAM-a ^

Parameter limits.memory omejuje količino RAM-a, ki je na voljo vsebniku. Vrednost je število in eden od razpoložljive pripone.

Nastavimo omejitev RAM-a vsebnika na 256 MB:

lxc config set alp limits.memory 256MB

Obstajajo tudi drugi parametri za omejevanje pomnilnika:

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

Ekipa lxc config show omogoča prikaz celotne konfiguracije vsebnika, vključno z uporabljeno omejitvijo virov, ki je bila nastavljena:

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

Omejitev virov procesorja ^

Obstaja več načinov za omejitev virov procesorja. vrste omejitev:

  • limit.cpu - veže vsebnik na eno ali več jeder procesorja
  • limits.cpu.allowance - upravlja kvote razporejevalnika CFS, ko je potekla časovna omejitev, ali univerzalni mehanizem za skupno rabo virov CPE, ko je potekel odstotek
  • limits.cpu.priority - prednost planerja, ko je več primerkom, ki si delijo nabor procesorjev, dodeljen enak odstotek procesorjev

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

Omejitev prostora na disku ^

Poleg takšnih omejitev limits.read, limits.write omejimo lahko tudi količino prostora na disku, ki ga porabi vsebnik (deluje samo z ZFS ali BTRFS):

lxc config device set alp root size=2GB

Po namestitvi v parametru devices.root.size Nastavljeno omejitev lahko preverimo:

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

Za ogled porabljenih diskovnih kvot, ki jih lahko dobimo z ukazom 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

Kljub temu, da smo za korensko napravo vsebnika postavili omejitev na 2 GB, sistemski pripomočki, kot je npr. df ne bo videl te omejitve. Da bi to naredili, bomo izvedli majhen test in ugotovili, kako deluje.

Ustvarimo 2 nova enaka vsebnika v istem Bazen za shranjevanje (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         |
+------+---------+------------------+------+-----------+-----------+

Ustvarimo datoteko velikosti 1 GB v enem od vsebnikov:

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

Prepričajmo se, da je datoteka ustvarjena:

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

Če pogledamo v drugi vsebnik, preverimo obstoj datoteke na istem mestu, potem te datoteke tam ne bo, kar je pričakovano, saj so vsebniki ustvarjeni v svojih Prostor za shranjevanje v istem Bazen za shranjevanje:

lxc exec alp2 -- ls -lh
total 0

Toda primerjajmo vrednosti, ki jih proizvaja df na eni in drugi posodi:

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

Naprava /dev/loop1 nameščen kot korenska particija Bazen za shranjevanje ki jih te posode uporabljajo, tako da si njihovo prostornino delijo med dvema.

Statistika porabe virov ^

Statistiko porabe virov za vsebnik si lahko ogledate z ukazom:

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

Delo s posnetki ^

LXD ima možnost ustvarjanja posnetkov in obnavljanja stanja vsebnika iz njih.

Če želite ustvariti posnetek, zaženite naslednji ukaz:

lxc snapshot alp snapshot1

Ekipa lxc snapshot ključ ni na voljo list, zato morate za ogled seznama posnetkov uporabiti ukaz, ki prikaže splošne informacije o vsebniku:

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

Z ukazom lahko obnovite vsebnik iz posnetka lxc restore z določitvijo vsebnika, za katerega bo izvedena obnova, in vzdevka posnetka:

lxc restore alp snapshot1

Naslednji ukaz se uporablja za brisanje posnetka. Upoštevajte, da sintaksa ukaza ni podobna vsem drugim; tukaj morate za imenom vsebnika določiti poševnico. Če je poševnica izpuščena, se ukaz za brisanje posnetka interpretira kot ukaz za brisanje vsebnika!

lxc delete alp/snapshot1

V zgornjem primeru smo si ogledali tako imenovane posnetke brez stanja. LXD ima še eno vrsto posnetkov - stateful, ki shrani trenutno stanje vseh procesov v vsebniku. S posnetki stanja so povezane številne zanimive in uporabne funkcije.

Kaj drugega? ^

  • Za razvijalce Pythona je na voljo modul PyLXD ki zagotavlja API za LXD

POSODOBITEV 10.04.2020. 15. 00 XNUMX:XNUMX: Dodana navigacija

Vir: www.habr.com

Dodaj komentar