Osnovne karakteristike LXD - Linux kontejnerskih sustava

Osnovne karakteristike LXD - Linux kontejnerskih sustava

LXD je sljedeća generacija upravitelja spremnika sustava, tako kaže izvor. Nudi korisničko sučelje slično virtualnim strojevima, ali umjesto toga koristi Linux spremnike.

LXD jezgra je povlašteni demon (usluga koja radi s root pravima) koji pruža REST API putem lokalnog unix socketa, kao i putem mreže ako je instalirana odgovarajuća konfiguracija. Klijenti, kao što je alat naredbenog retka koji se isporučuje uz LXD, postavljaju zahtjeve putem ovog REST API-ja. To znači da bez obzira pristupate li lokalnom ili udaljenom računalu, sve radi isto.

U ovom se članku nećemo detaljno baviti konceptima LXD-a, nećemo razmatrati sve dostupne mogućnosti navedene u dokumentaciji, uključujući nedavnu implementaciju u najnovijim verzijama LXD-a podrške za QEMU virtualne strojeve paralelno sa spremnicima. Umjesto toga, naučit ćemo samo osnove upravljanja spremnikom - postavljanje spremišta, umrežavanje, pokretanje spremnika, primjena ograničenja resursa i kako koristiti snimke tako da možete steći osnovno razumijevanje LXD-a i koristiti spremnike na Linuxu.

Za sve informacije pogledajte službeni izvor:

Navigacija

Instalacija LXD ^

Instaliranje LXD-a na Ubuntu distribucije ^

U distribucijskom paketu Ubuntu 19.10 lxd ima emitiranje na snap paket:

apt search lxd

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

To znači da će dva paketa biti instalirana odjednom, jedan kao sistemski paket, a drugi kao snap paket. Instaliranje dvaju paketa na sustav može stvoriti određeni problem pri čemu sistemski paket može postati siroče ako snap paket ukloni upravitelj snap paketa.

Pronađi paket lxd u snap repozitoriju možete koristiti sljedeću naredbu:

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

Pokretanjem naredbe list možete se uvjeriti da paket lxd još nije instaliran:

snap list

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

Unatoč činjenici da je LXD snap paket, mora se instalirati kroz sistemski paket lxd, koji će stvoriti odgovarajuću grupu u sustavu, potrebne uslužne programe u /usr/bin itd.

sudo apt update
sudo apt install lxd

Provjerite je li paket instaliran kao brzi paket:

snap list

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

Instaliranje LXD-a na Arch Linux distribucije ^

Da biste instalirali LXD paket na sustav, trebate pokrenuti sljedeće naredbe, prva će ažurirati popis paketa na sustavu dostupnih u repozitoriju, druga će izravno instalirati paket:

sudo pacman -Syyu && sudo pacman -S lxd

Nakon instaliranja paketa, kako bi običan korisnik mogao upravljati LXD-om, potrebno ga je dodati u grupu sustava lxd:

sudo usermod -a -G lxd user1

Uvjerimo se da korisnik user1 dodan u grupu lxd:

id -Gn user1

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

Ako grupa lxd nije vidljiv na popisu, tada morate ponovo aktivirati korisničku sesiju. Da biste to učinili, morate se odjaviti i prijaviti pod istim korisnikom.

Aktiviraj u systemd učitavanje LXD usluge pri pokretanju sustava:

sudo systemctl enable lxd

Pokrenimo uslugu:

sudo systemctl start lxd

Provjera statusa usluge:

sudo systemctl status lxd

Pohrana LXD (Pohrana) ^

Prije početka inicijalizacije, moramo razumjeti kako je pohrana u LXD-u logično raspoređena.

Pohrana (skladištenje) sastoji se od od jednog ili više Bazen za pohranu koji koristi jedan od podržanih datotečnih sustava kao što su ZFS, BTRFS, LVM ili obične direktorije. Svaki Bazen za pohranu podijeljen je na sveske (Volumen skladišta) koji sadrže slike, spremnike ili podatke za druge svrhe.

  • lik - ovo su posebno sastavljene distribucije bez Linux kernela i dostupne iz vanjskih izvora
  • spremnici - ovo su raspoređene distribucije iz slika, spremne za upotrebu
  • Snimke - ovo su snimke stanja spremnika na koje se možete vratiti

Osnovne karakteristike LXD - Linux kontejnerskih sustava

Za upravljanje pohranom u LXD-u upotrijebite naredbu lxc storage certifikat za koji možete dobiti navođenjem ključa - lxc storage --help

Sljedeća naredba prikazuje popis svih Bazen za pohranu u LXD pohrani:

lxc storage list

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

Za pregled popisa svih Volumen skladišta u odabranom Bazen za pohranu služi timu 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       |
+-----------+----------------------------------+-------------+---------+

Također, ako za Bazen za pohranu Prilikom izrade odabran je datotečni sustav BTRFS, a zatim dohvatite popis Volumen skladišta ili podvolovi u interpretaciji BTRFS-a, možete koristiti alat ovog datotečnog sustava:

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

Inicijalizacija LXD-a ^

Prije stvaranja i korištenja spremnika, morate izvršiti opću LXD inicijalizaciju koja stvara i konfigurira mrežu i pohranu. To se može učiniti ručno pomoću standardnih klijentskih naredbi koje su dostupne na popisu pozivom naredbe lxc --help ili pomoću čarobnjaka za inicijalizaciju lxd init odgovorivši na nekoliko pitanja.

Odabir datotečnog sustava za skladište za pohranu ^

Tijekom inicijalizacije, LXD postavlja nekoliko pitanja, uključujući određivanje tipa datotečnog sustava za zadani Bazen za pohranu. Prema zadanim postavkama za njega je odabran datotečni sustav BTRFS. Bit će nemoguće promijeniti na drugi FS nakon izrade. Predlaže se odabir FS-a tablica usporedbe karakteristika:

svojstvo
Imenik
Btrfs
LVM
ZFS
CEPH

Optimizirana pohrana slika
Ne
Da
Da
Da
Da

Optimizirano stvaranje instance
Ne
Da
Da
Da
Da

Optimizirano stvaranje snimke
Ne
Da
Da
Da
Da

Optimizirani prijenos slike
Ne
Da
Ne
Da
Da

Optimiziran prijenos instanci
Ne
Da
Ne
Da
Da

kopirati na pisanje
Ne
Da
Da
Da
Da

Na temelju blokova
Ne
Ne
Da
Ne
Da

Instant kloniranje
Ne
Da
Da
Da
Da

Upravljački program za pohranu koji se može koristiti unutar spremnika
Da
Da
Ne
Ne
Ne

Vraćanje sa starijih snimaka (ne najnovijih)
Da
Da
Da
Ne
Da

Kvote za pohranu
Da(*)
Da
Da
Da
Ne

Inicijalizacija mreže i skladišnog prostora pomoću čarobnjaka ^

Sljedeća naredba koju ćemo pogledati predlaže postavljanje glavnih komponenti LXD-a odgovarajućim na jednostavna pitanja pomoću čarobnjaka za inicijalizaciju.

Naredba za pokretanje lxc init i unesite odgovore na pitanja iza dvotočke kao što je prikazano u donjem primjeru ili ih promijenite prema svojim uvjetima:

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

Stvaranje dodatnog skladišnog prostora ^

U prethodnom koraku smo stvorili Bazen za pohranu koji je dobio ime ssdpool i čija se datoteka nalazi na mom sustavu na adresi /var/lib/lxd/disks/ssdpool.img. Ova adresa datotečnog sustava odgovara fizičkom SSD disku na mom računalu.

Sljedeće radnje, proširiti razumijevanje uloge igra Bazen za pohranu u repozitoriju, mi ćemo stvoriti drugi Bazen za pohranu koji će se fizički nalaziti na drugoj vrsti diska, HDD. Problem je što vam LXD ne dopušta stvaranje Bazen za pohranu izvan adrese /var/lib/lxd/disks/ čak ni simboličke veze neće raditi, pogledajte odgovor programera. Ovo ograničenje možemo zaobići tijekom inicijalizacije/formatiranja Bazen za pohranu navođenjem vrijednosti kao blok uređaja umjesto staze do datoteke povratne petlje navođenjem ovoga u ključu source.

Dakle, prije stvaranja Bazen za pohranu trebate definirati povratnu datoteku ili postojeću particiju na vašem datotečnom sustavu koju će koristiti. Da bismo to učinili, izradit ćemo i koristiti datoteku čiju ćemo veličinu ograničiti 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 datoteku povratne petlje s besplatnim uređajem povratne petlje:

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

/dev/loop1

Zahvaljujući ključu --show izvršavanje naredbe vraća na ekran naziv uređaja na koji je spojena naša povratna datoteka. Ako je potrebno, možemo prikazati popis svih zauzetih uređaja ove vrste kako bismo bili sigurni da su naše radnje ispravne:

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 popisu možete saznati da uređaj ima /dev/loop1 uključena povratna datoteka /mnt/work/lxd/hddpool.img, i u uređaju /dev/loop0 uključena povratna datoteka /var/lib/lxd/disks/ssdpool.img što odgovara zadanom Bazen za pohranu.

Sljedeća naredba stvara novu Bazen za pohranu u LXD-u na temelju povratne datoteke koju smo upravo pripremili. LXD će formatirati povratnu datoteku /mnt/work/lxd/hddpool.img u uređaju /dev/loop1 za BTRFS datotečni sustav:

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

Prikažimo popis svih Bazen za pohranu na ekran:

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 veličine spremišta ^

Nakon stvaranja Bazen za pohranu, po potrebi se može proširiti. Za Bazen za pohranu na temelju BTRFS datotečnog sustava, pokrenite sljedeće naredbe:

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

Automatsko umetanje povratne datoteke u utor za povratni uređaj ^

Imamo jedan mali problem, prilikom ponovnog pokretanja glavnog sustava, datoteka /mnt/work/lxd/hddpool.img će "izletjeti" iz uređaja /dev/loop1 a LXD servis će se srušiti pri učitavanju jer ga neće vidjeti u ovom uređaju. Da biste riješili ovaj problem morate stvoriti uslugu sustava koja će umetnuti ovu datoteku u uređaj /dev/loop1 kada se podiže glavni sustav.

Kreirajmo jedinica Vrsta datoteke usluga в /etc/systemd/system/ za sustav inicijalizacije 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 uslugu:

sudo systemctl enable lxd-hddpool

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

Nakon ponovnog pokretanja glavnog sustava, provjeravamo status usluge:

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 izlaza možemo potvrditi da je stanje usluge aktivan, unatoč činjenici da je izvršenje naše skripte iz jedne naredbe završeno, opcija nam je omogućila da to učinimo RemainAfterExit=true.

Sigurnost. Privilegije spremnika ^

Budući da se svi procesi spremnika zapravo izvode izolirano na glavnom sustavu koristeći njegovu jezgru, za dodatnu zaštitu pristupa spremničkih procesa glavnom sustavu, LXD nudi privilegiju procesa, gdje:

  • Privilegirani spremnici - to su spremnici u kojima procesi s UID-om i GID-om odgovaraju istom vlasniku kao i na host sustavu. Na primjer, proces koji se izvodi u spremniku s UID-om 0 ima sva prava pristupa kao i proces na glavnom sustavu s UID-om 0. Drugim riječima, root korisnik u spremniku ima sva prava ne samo u spremniku, ali također i na glavnom sustavu ako može izaći izvan izoliranog imenskog prostora spremnika.

  • Neprivilegirani spremnici - to su spremnici u kojima procesi pripadaju vlasniku UID-a i GID-a s brojem od 0 do 65535, ali za host sustav vlasnik je maskiran pomoću dodanih SubUID odnosno SubGID bitova. Na primjer, korisnik s UID=0 u spremniku bit će vidljiv na glavnom sustavu kao SubUID + UID. Ovo štiti sustav domaćina jer ako bilo koji proces u spremniku može pobjeći svom izoliranom prostoru imena, on može komunicirati sa sustavom domaćina samo kao proces s nepoznatim, vrlo visokim UID/GID-om.

Prema zadanim postavkama, novostvoreni spremnici imaju neprivilegirani status i stoga moramo definirati SubUID i SubGID.

Kreirajmo dvije konfiguracijske datoteke u kojima ćemo postaviti masku za SubUID odnosno SubGID:

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

Da biste primijenili promjene, LXD uslugu morate ponovno pokrenuti:

sudo systemctl restart lxd

Stvaranje virtualne mrežne sklopke ^

Budući da smo prethodno inicijalizirali mrežu pomoću čarobnjaka za inicijalizaciju lxd init i stvorio mrežni uređaj lxdbr0, tada ćemo se u ovom dijelu jednostavno upoznati s umrežavanjem u LXD-u i kako stvoriti virtualni preklopnik (most) pomoću naredbe klijenta.

Sljedeći dijagram pokazuje kako preklopnik (most) povezuje host i spremnike u mrežu:

Osnovne karakteristike LXD - Linux kontejnerskih sustava

Spremnici mogu komunicirati putem mreže s drugim spremnicima ili hostom na kojem se ti spremnici poslužuju. Da biste to učinili, morate povezati virtualne mrežne kartice spremnika s virtualnim prekidačem. Prvo ćemo izraditi preklopnik, a mrežna sučelja spremnika povezat ćemo u narednim poglavljima, nakon što se sam spremnik izradi.

Sljedeća naredba stvara prekidač s podmrežom 10.0.5.0/24 i IPv4 adresu 10.0.5.1/24, a također uključuje ipv4.nat tako da spremnici mogu pristupiti internetu putem hosta koristeći NAT uslugu:

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

Provjera popisa mrežnih uređaja dostupnih u LXD-u:

lxc network list

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

Također možete provjeriti je li mrežni uređaj stvoren pomoću standardnog alata distribucije Linuxa - ip link ili 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 ^

Svaki spremnik u LXD-u ima vlastitu konfiguraciju i može je proširiti globalno deklariranim konfiguracijama tzv konfiguracijski profili. Primjena konfiguracijskih profila na spremnik ima kaskadni model, sljedeći primjer to pokazuje:

Osnovne karakteristike LXD - Linux kontejnerskih sustava

U ovom primjeru u LXD sustavu kreirana su tri profila: default, hddpool и hostfs. Sva tri profila primjenjuju se na spremnik koji ima lokalnu konfiguraciju (sivo područje). Profil default ima uređaj root koji ima parametar pool jednako je ssdpool, ali zahvaljujući modelu aplikacije kaskadne konfiguracije, možemo primijeniti profil na spremnik hddpool koji ima parametar pool će nadjačati isti parametar iz profila default a spremnik će primiti konfiguraciju uređaja root s parametrom pool jednak hddpool, i profil hostfs jednostavno dodaje novi uređaj u spremnik.

Da biste vidjeli popis dostupnih konfiguracijskih profila, koristite sljedeću naredbu:

lxc profile list

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

Potpuni popis dostupnih naredbi za rad s profilom može se dobiti dodavanjem 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

Uređivanje vašeg profila ^

Zadani konfiguracijski profil default nema konfiguraciju mrežne kartice za kontejner i svi novokreirani kontejneri nemaju mrežu, za njih je potrebno kreirati lokalne (dedicirane) mrežne uređaje posebnom naredbom, ali možemo kreirati globalni mrežni uređaj u konfiguraciji profil koji će se dijeliti između svih spremnika koji koriste ovaj profil. Tako će odmah nakon naredbe za izradu novog spremnika imati mrežu s mrežnim pristupom. Istodobno, nema ograničenja, uvijek možemo kasnije stvoriti uređaj lokalne mreže ako je potrebno.

Sljedeća naredba će dodati uređaj konfiguracijskom profilu eth0 vrsta nic spojen na mrežu lxdbr0:

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

Važno je napomenuti da budući da smo zapravo dodali uređaj konfiguracijskom profilu, ako smo naveli statičku IP adresu u uređaju, tada će svi spremnici koji će koristiti ovaj profil dijeliti istu IP adresu. Ako postoji potreba za stvaranjem spremnika sa statičkom IP adresom dodijeljenom za spremnik, tada biste trebali izraditi konfiguraciju mrežnog uređaja na razini spremnika (lokalna konfiguracija) s parametrom IP adrese, a ne na razini profila.

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

U ovom profilu možemo vidjeti da će za sve novostvorene spremnike biti kreirana dva uređaja:

  • eth0 - Tip uređaja nic spojen na prekidač (mrežni most) lxdbr0
  • root - Tip uređaja disk koji koristi skladišni bazen ssdpool

Izrada novih profila ^

Za korištenje prethodno stvorenog Bazen za pohranu spremnike, izradite konfiguracijski profil ssdroot u koji ćemo dodati uređaj poput disk s točkom montiranja / (root) korištenjem prethodno stvorenog Bazen za pohranu - ssdpool:

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

Slično tome, stvaramo uređaj poput disk, ali u ovom slučaju pomoću Bazen za pohranu - hddpool:

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

Provjera konfiguracijskih profila:

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

Spremište slika ^

Spremnici se izrađuju iz slika koje su posebno sastavljene distribucije koje nemaju Linux kernel. Stoga, prije pokretanja spremnika, on se mora implementirati iz ove slike. Izvor slika je lokalni repozitorij u koji se slike preuzimaju iz vanjskih repozitorija.

Udaljena spremišta slika ^

Prema zadanim postavkama, LXD je konfiguriran za primanje slika iz tri udaljena izvora:

  • ubuntu: (za stabilne Ubuntu slike)
  • ubuntu-daily: (za dnevne Ubuntu slike)
  • slika: (za hrpu drugih distribucija)

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 primjer, spremište ubuntu: ima sljedeće 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 ograničenog broja stupaca upotrijebili smo opciju -c s parametrima dasut, a također je naredbom ograničio duljinu popisa head.

Filtriranje je dostupno za prikaz popisa slika. Sljedeća naredba izlistat će sve dostupne distribucijske arhitekture 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 spremište slika ^

Da biste počeli koristiti spremnik, trebate dodati sliku iz globalnog repozitorija u lokalni local:. Sada je lokalno spremište prazno, naredba će se pobrinuti za to lxc image list. Ako se metoda list nemojte navesti spremište, tada će se prema zadanim postavkama koristiti lokalno spremište - local:

lxc image list local:

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

Slikama u repozitoriju upravlja se pomoću sljedećih metoda:

Momčad
Opis

lxc slika pseudonim
Upravljanje aliasima slika

lxc slika kopija
Kopirajte slike između poslužitelja

lxc slika izbrisati
Izbriši slike

lxc slika uredi
Uredi svojstva slike

lxc slika izvoz
Izvoz i preuzimanje slika

lxc slika uvoz
Uvezite slike u pohranu slika

lxc slika info
Pokažite korisne informacije o slikama

lxc slika popis
Popis slika

lxc slika osvježiti
Osvježi slike

lxc slika predstava
Prikaži svojstva slike

Kopirajte sliku u lokalno spremište iz globalnog images::

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

Image copied successfully!

Prikažimo popis svih trenutno dostupnih slika u lokalnom repozitoriju local::

lxc image -c lfdatsu list local:

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

LXD konfiguracija ^

Uz interaktivni način, LXD također podržava neinteraktivni način instalacije konfiguracije, to je kada je konfiguracija navedena u obliku YAML datoteke, posebnog formata koji vam omogućuje da instalirate cijelu konfiguraciju odjednom, zaobilazeći izvršenje mnogih interaktivnih naredbi o kojima je bilo riječi u ovom članku, uključujući mrežnu konfiguraciju, stvaranje konfiguracijskih profila itd. Ovdje nećemo pokrivati ​​ovo područje, možete ga sami provjeriti. u dokumentaciji.

Sljedeća interaktivna naredba lxc config koji ćemo pogledati omogućuje vam postavljanje konfiguracije. Na primjer, kako bismo osigurali da se slike preuzete u lokalno spremište ne ažuriraju automatski iz globalnih spremišta, možemo omogućiti ovo ponašanje sljedećom naredbom:

lxc config set images.auto_update_cached=false

Izrada i upravljanje spremnikom ^

Za izradu spremnika koristite naredbu lxc init na koje se prosljeđuju vrijednosti репозиторий:образ a zatim željeni ID za spremnik. Repozitorij se može navesti kao lokalni local: tako i svaka globalna. Ako spremište nije navedeno, prema zadanim postavkama za traženje slike koristi se lokalno spremište. Ako je slika određena iz globalnog repozitorija, tada će slika prvo biti preuzeta u lokalno repozitorij, a zatim će se koristiti za stvaranje spremnika.

Pokrenimo sljedeću naredbu za stvaranje našeg prvog spremnika:

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

Pogledajmo naredbene tipke koje ovdje koristimo redom:

  • alpine3 — Pseudonim (alias) je određen za sliku koja je prethodno učitana u lokalno spremište. Ako pseudonim nije stvoren za ovu sliku, uvijek se možete pozvati na sliku pomoću nje Otisak prsta koji je prikazan u tabeli.
  • alp — Postavlja identifikator za spremnik
  • --storage — Ovaj ključ pokazuje u kojem Bazen za pohranu stvorit će se spremnik
  • --profile — Ovi ključevi kaskadno primjenjuju konfiguraciju iz prethodno stvorenih konfiguracijskih profila na spremnik

Pokrećemo spremnik, koji počinje pokretati init sustav distribucije:

lxc start alp

Također možete koristiti naredbu lxc launch što vam omogućuje kombiniranje timova lxc init и lxc start u jednoj operaciji.

Provjera stanja spremnika:

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

Provjera konfiguracije spremnika:

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

U odjeljku profiles možemo osigurati da ovaj spremnik koristi dva konfiguracijska profila − default и hddroot. U odjeljku devices možemo otkriti samo jedan uređaj jer je mrežni uređaj kreiran na razini profila default. Kako biste vidjeli sve uređaje koje koristi spremnik 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: ""

Postavljanje statičke IP adrese ^

Ako pokušamo postaviti IP adresu za mrežni uređaj eth0 Tim lxc config device set alp namijenjen konfiguraciji spremnika, tada ćemo dobiti pogrešku koja će javiti da uređaj ne postoji jer uređaj eth0 koji koristi kontejner pripada profilu default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Naravno, možemo postaviti statičku IP adresu za eth0 uređaja u profilu, ali bit će isti za sve spremnike koji će koristiti ovaj profil. Stoga, dodajmo uređaj posvećen spremniku:

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

Zatim morate ponovno pokrenuti spremnik:

lxc restart alp

Ako sada pogledamo konfiguraciju spremnika, ne moramo koristiti opciju --expanded da vidite mrežni uređaj eth0, budući da smo ga kreirali na razini spremnika i kaskadno se povezivao preko istog uređaja 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: ""

Uklanjanje spremnika ^

Za uklanjanje spremnika koristite naredbu lxc delete, ali prije uklanjanja spremnika, potrebno ga je zaustaviti pomoću naredbe lxc stop:

lxc stop alp

lxc list

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

Nakon što smo potvrdili da je stanje spremnika postalo zaustavio, može se ukloniti iz Bazen za pohranu:

lxc delete alp

Pristup kontejneru ^

Za izravno izvršavanje naredbi u spremniku, zaobilazeći mrežne veze, koristite naredbu lxc exec koji izvršava naredbe u spremniku bez pokretanja ljuske sustava. Ako trebate izvršiti naredbu u ljusci koristeći uzorke ljuske kao što su varijable, preusmjeravanja datoteka (cijevovod), itd., tada morate eksplicitno pokrenuti ljusku i proslijediti naredbu kao ključ, na primjer:

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

Naredba je koristila poseban znak za izlaz za poseban karakter $ tako da varijabla $HOME nije interpretiran na glavnom stroju, već je interpretiran samo unutar spremnika.

Također je moguće pokrenuti interaktivni način rada ljuske, a zatim završiti sesiju izvršavanjem prečaca CTRL+D:

lxc exec alp -- /bin/sh

Upravljanje resursima spremnika ^

U LXD-u možete upravljati resursima spremnika pomoću posebnog skupa konfiguracije. Potpuni popis konfiguracijskih parametara spremnika može se pronaći u dokumentaciji.

Ograničenje RAM resursa ^

Parametar limits.memory ograničava količinu RAM-a dostupnu spremniku. Vrijednost je broj i jedan od dostupni sufiksi.

Postavimo ograničenje RAM-a spremnika na 256 MB:

lxc config set alp limits.memory 256MB

Također, postoje i drugi parametri za ograničavanje memorije:

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

Momčad lxc config show omogućuje vam prikaz cijele konfiguracije spremnika, uključujući primijenjeno ograničenje resursa koje je postavljeno:

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

Ograničenje CPU resursa ^

Postoji nekoliko načina za ograničavanje CPU resursa. vrste ograničenja:

  • limit.cpu - veže spremnik na jednu ili više CPU jezgri
  • limits.cpu.allowance - upravlja ili kvotama CFS planera kada je prošlo vremensko ograničenje ili univerzalnim mehanizmom dijeljenja CPU resursa kada je postotak prošao
  • limits.cpu.priority - prioritet planera kada je višestrukim instancama koje dijele skup procesora dodijeljen isti postotak procesora

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

Ograničenje prostora na disku ^

Osim ograničenja kao što su limits.read, limits.write također možemo ograničiti količinu diskovnog prostora koju zauzima spremnik (radi samo sa ZFS ili BTRFS):

lxc config device set alp root size=2GB

Nakon instalacije, u parametru devices.root.size Postavljeni limit možemo provjeriti:

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

Za pregled iskorištenih diskovnih kvota možemo dobiti iz naredbe 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

Unatoč činjenici da smo postavili ograničenje za root uređaj spremnika na 2 GB, uslužni programi sustava poput df neće vidjeti ovo ograničenje. Da bismo to učinili, provest ćemo mali test i saznati kako funkcionira.

Kreirajmo 2 nova identična spremnika u istom Bazen za pohranu (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         |
+------+---------+------------------+------+-----------+-----------+

Kreirajmo datoteku od 1 GB u jednom od spremnika:

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

Provjerimo je li datoteka stvorena:

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

Ako pogledamo drugi spremnik, provjerimo postoji li datoteka na istoj lokaciji, tada te datoteke neće biti tamo, što je i očekivano, budući da se spremnici stvaraju u vlastitom Volumen skladišta u istom Bazen za pohranu:

lxc exec alp2 -- ls -lh
total 0

Ali usporedimo vrijednosti koje proizvodi df na jednom i drugom spremniku:

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

uređaj /dev/loop1 montiran kao root particija Bazen za pohranu koje ti spremnici koriste, pa dijele njegov volumen između dva.

Statistika potrošnje resursa ^

Statistiku potrošnje resursa za spremnik možete pogledati pomoću naredbe:

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

Rad sa snimkama ^

LXD ima mogućnost stvaranja snimaka i vraćanja stanja spremnika iz njih.

Da biste stvorili snimku, pokrenite sljedeću naredbu:

lxc snapshot alp snapshot1

Tim lxc snapshot ključ nije dostupan list, stoga za pregled popisa snimki morate upotrijebiti naredbu koja prikazuje opće informacije o spremniku:

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

Možete vratiti spremnik iz snimke pomoću naredbe lxc restore navodeći spremnik za koji će se izvršiti vraćanje i alias snimke:

lxc restore alp snapshot1

Sljedeća naredba koristi se za brisanje snimke. Imajte na umu da sintaksa naredbe nije slična svim ostalim; ovdje morate navesti kosu crtu nakon naziva spremnika. Ako je kosa crta izostavljena, tada se naredba za brisanje snimke tumači kao naredba za brisanje spremnika!

lxc delete alp/snapshot1

U gornjem primjeru gledali smo takozvane snimke bez stanja. LXD ima još jednu vrstu snimki stanja - stateful, koja sprema trenutno stanje svih procesa u spremnik. Postoji niz zanimljivih i korisnih značajki povezanih sa snimkama stanja.

Što drugo? ^

  • Modul je dostupan za Python programere PyLXD koji pruža API za LXD

AŽURIRANJE 10.04.2020. 15:00: Dodana navigacija

Izvor: www.habr.com

Dodajte komentar