Funzioni basi di LXD - Sistemi di containeru Linux

Funzioni basi di LXD - Sistemi di containeru Linux

LXD hè u gestore di u containeru di u sistema di a prossima generazione, cusì dice fonti. Offre una interfaccia d'utilizatore simile à e macchine virtuali, ma usa cuntenituri Linux invece.

core LXD hè un daemon privilegiatu (un serviziu chì funziona cù diritti di root) chì furnisce una API REST via un socket unix locale, è ancu via a reta se a cunfigurazione adatta hè stallata. I clienti, cum'è l'uttellu di linea di cumanda furnitu cù LXD, facenu richieste attraversu questa API REST. Questu significa chì sì accede à un host locale o un host remotu, tuttu funziona u stessu.

In questu articulu, ùn deteremu micca in dettagliu nantu à i cuncetti di LXD; ùn cunsideremu micca tutte e capacità dispunibili descritte in a documentazione, cumprese l'implementazione recente in l'ultime versioni di LXD di supportu per e macchine virtuali QEMU in parallelu cù i cuntenituri. Invece, impareremu solu i principii di a gestione di u containeru - a creazione di pools di almacenamento, a rete, a gestione di un containeru, l'applicazione di limiti di risorse, è cumu utilizà snapshots per pudè avè una cunniscenza di basa di LXD è aduprà cuntenituri in Linux.

Per infurmazione cumpleta, fate riferimentu à a fonte ufficiale:

Navigazione

Installazione LXD ^

Installazione di LXD in distribuzioni Ubuntu ^

In u pacchettu di distribuzione Ubuntu 19.10 lxd hà una trasmissione pacchettu snap:

apt search lxd

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

Questu significa chì dui pacchetti seranu stallati in una volta, unu cum'è un pacchettu di sistema è l'altru cum'è un pacchettu snap. L'installazione di dui pacchetti in un sistema pò creà un prublema induve u pacchettu di u sistema pò esse orfanu se u pacchettu snap hè eliminatu da u gestore di pacchetti snap.

Truvà u pacchettu lxd in u repositoriu snap pudete aduprà u cumandimu seguente:

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

Eseguendu u cumandamentu list pudete assicurà chì u pacchettu lxd micca ancora stallatu:

snap list

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

Malgradu u fattu chì LXD hè un pacchettu snap, deve esse installatu attraversu u pacchettu di u sistema lxd, chì hà da creà u gruppu currispundenti in u sistema, i utilità necessarii in /usr/bin è cusì.

sudo apt update
sudo apt install lxd

Assicuratevi chì u pacchettu hè stallatu cum'è un pacchettu snap:

snap list

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

Installazione di LXD in distribuzioni Arch Linux ^

Per installà u pacchettu LXD in u sistema, avete bisognu di eseguisce i seguenti cumandamenti, u primu aghjurnà a lista di i pacchetti nantu à u sistema dispunibile in u repository, u sicondu installà direttamente u pacchettu:

sudo pacman -Syyu && sudo pacman -S lxd

Dopu avè installatu u pacchettu, per gestisce LXD da un utilizatore regulare, deve esse aghjuntu à u gruppu di u sistema lxd:

sudo usermod -a -G lxd user1

Fighjemu chì l'utilizatore user1 aghjuntu à u gruppu lxd:

id -Gn user1

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

Se u gruppu lxd ùn hè micca visibile in a lista, allora avete bisognu di attivà a sessione d'utilizatore di novu. Per fà questu, avete bisognu di log out è log in sottu u stessu utilizatore.

Attivà in systemd Caricà u serviziu LXD à l'iniziu di u sistema:

sudo systemctl enable lxd

Cuminciamu u serviziu:

sudo systemctl start lxd

Verificate u statu di serviziu:

sudo systemctl status lxd

Storage LXD (Storage) ^

Prima di principià l'inizializazione, avemu bisognu di capiscenu cumu l'almacenamiento in LXD hè logicamente dispostu.

Storage (Storage) cunsiste da unu o più Piscina di almacenamiento chì usa unu di i sistemi di schedari supportati cum'è ZFS, BTRFS, LVM o cartulari regulari. Ogni Piscina di almacenamiento hè divisu in volumi (Volume di Storage) chì cuntenenu imaghjini, cuntenituri o dati per altri scopi.

  • Images - Quessi sò distribuzioni assemblati apposta senza u kernel Linux è dispunibili da fonti esterne
  • Contenidors - Quessi sò distribuzioni implementate da l'imaghjini, pronti per l'usu
  • Istantanee - Quessi sò snapshots di u statu di cuntenituri chì pudete vultà

Funzioni basi di LXD - Sistemi di containeru Linux

Per gestisce l'almacenamiento in LXD, utilizate u cumandimu lxc storage un certificatu per quale pudete ottene specificando a chjave - lxc storage --help

U cumandimu seguitu mostra una lista di tutti Piscina di almacenamiento in almacenamiento LXD:

lxc storage list

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

Per vede una lista di tutti Volume di Storage in i selezziunati Piscina di almacenamiento serve a squadra 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       |
+-----------+----------------------------------+-------------+---------+

Inoltre, se per Piscina di almacenamiento Quandu crea, u sistema di schedari BTRFS hè statu sceltu, dopu avè una lista Volume di Storage o subvolumi in l'interpretazione BTRFS, pudete aduprà u toolkit di stu file system:

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

Initializing LXD ^

Prima di creà è aduprà cuntenituri, deve esse realizatu una inizializazione LXD generale chì crea è cunfigurà a reta è u almacenamiento. Questu pò esse fattu manualmente utilizendu cumandamenti di u cliente standard chì sò dispunibili in a lista chjamendu u cumandamentu lxc --help o utilizendu l'assistente di inizializazione lxd init risponde à uni pochi di dumande.

Selezzione di un sistema di schedari per Storage Pool ^

Durante l'inizializazione, LXD face parechje dumande, cumprese a determinazione di u tipu di sistema di fugliale per u predeterminatu Piscina di almacenamiento. Per automaticamente, u sistema di schedari BTRFS hè sceltu per questu. Serà impussibile di cambià à un altru FS dopu a creazione. Per selezziunà un FS hè suggeritu tabella di paragone di caratteristiche:

Feature
Directory
Btrfs
LVM
ZFS
CEPH

Almacenamiento d'imaghjini ottimizatu
innò



Creazione di istanza ottimizzata
innò



Creazione di snapshot ottimizzata
innò



Trasferimentu di l'imaghjini ottimizatu
innò

innò

Trasferimentu d'istanze ottimizatu
innò

innò

Copia nantu à scrive
innò



Basatu in blocchi
innò
innò

innò

Clonazione istantanea
innò



Driver di almacenamentu utilizzabile in un containeru


innò
innò
innò

Ripristina da snapshots più antichi (micca l'ultime)



innò

Quote di almacenamiento
Iè(*)



innò

Initializing the network and Storage Pool using the wizard ^

U prossimu cumandamentu chì guardemu suggerisce di stallà i cumpunenti principali di LXD rispondendu à e dumande simplici utilizendu l'assistente di inizializazione.

Run cumandamentu lxc init è inserite e risposte à e dumande dopu à u colon cum'è mostra in l'esempiu sottu o cambiate secondu e vostre cundizioni:

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

Crià un Pool di Storage supplementu ^

In u passu precedente avemu creatu Piscina di almacenamiento chì fù datu u nome ssdpool è u schedariu di quale si trova nantu à u mo sistema à /var/lib/lxd/disks/ssdpool.img. Questu indirizzu di u sistema di fugliale currisponde à l'unità SSD fisica in u mo PC.

E seguenti azzioni, per espansione a cunniscenza di u rolu ghjucatu da Piscina di almacenamiento in u repository, creeremu un secondu Piscina di almacenamiento chì serà fisicu situatu nantu à un altru tipu di discu, HDD. U prublema hè chì LXD ùn vi permette micca di creà Piscina di almacenamiento fora di indirizzu /var/lib/lxd/disks/ è ancu i ligami simbolichi ùn funzionanu micca, vede a risposta di u sviluppatore. Pudemu passà sta limitazione durante l'inizializazione / furmatu Piscina di almacenamiento specificendu u valore cum'è un dispositivu di bloccu invece di u percorsu à u schedariu di loopback specificendu questu in a chjave source.

Allora, prima di creà Piscina di almacenamiento avete bisognu di definisce un schedariu di loopback o una partizione esistente in u vostru sistema di schedari chì hà da aduprà. Per fà questu, creeremu è aduprà un schedariu chì limiteremu in dimensione à 10GB:

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

Cunnetteremu u schedariu di loopback à un dispositivu di loopback gratuitu:

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

/dev/loop1

Grazie à a chjave --show eseguisce u cumandimu torna à u screnu u nome di u dispusitivu in quale hè cunnessu u nostru schedariu loopback. Se necessariu, pudemu vede una lista di tutti i dispositi occupati di stu tipu per assicurà chì e nostre azzioni sò currette:

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

Da a lista vi ponu truvà chì u dispusitivu hà /dev/loop1 file loopback inclusu /mnt/work/lxd/hddpool.img, è in u dispusitivu /dev/loop0 file loopback inclusu /var/lib/lxd/disks/ssdpool.img chì currisponde à u default Piscina di almacenamiento.

U cumandimu seguitu crea un novu Piscina di almacenamiento in LXD basatu annantu à u schedariu di loopback chì avemu appena preparatu. LXD furmatu u schedariu loopback /mnt/work/lxd/hddpool.img in u dispusitivu /dev/loop1 per u sistema di schedari BTRFS:

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

Fighjemu una lista di tutti Piscina di almacenamiento à u screnu:

lxc storage list

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

Aumentà a dimensione di a piscina di almacenamiento ^

Dopu à a creazione Piscina di almacenamiento, se ne necessariu, pò esse allargatu. Per Piscina di almacenamiento basatu annantu à u sistema di schedari BTRFS, eseguite i seguenti cumandamenti:

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

Inserzione automatica di un schedariu loopback in un slot di un dispositivu loopback ^

Avemu un picculu prublema, quandu rebooting u sistema host, u schedariu /mnt/work/lxd/hddpool.img "volarà" fora di u dispusitivu /dev/loop1 è u serviziu LXD crash durante a carica perchè ùn u vede micca in stu dispusitivu. Per risolve stu prublema, avete bisognu di creà un serviziu di sistema chì inserisce stu schedariu in u dispusitivu /dev/loop1 quandu u sistema host boots.

Creemu unità tipu di schedariu sirvizziu в /etc/systemd/system/ per u sistema di inizializazione 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

Attivà u serviziu:

sudo systemctl enable lxd-hddpool

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

Dopu avè riavviatu u sistema di l'ospite, verificamu u statu di serviziu:

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).

Da a pruduzzioni pudemu verificà chì u statu di serviziu hè piemuntese, malgradu u fattu chì l'esekzione di u nostru script da un cumandamentu hè stata cumpletata, l'opzione ci hà permessu di fà questu RemainAfterExit=true.

Sicurezza. Privilegi di Container ^

Siccomu tutti i prucessi di cuntainer in realtà funzionanu isolati nantu à u sistema ospite utilizendu u so kernel, per prutege ulteriormente l'accessu di i prucessi di cuntainer à u sistema host, LXD offre u privilegiu di prucessu, induve:

  • Contenituri privilegiati - Quessi sò cuntenituri in quale i prucessi cù UID è GID currispondenu à u stessu pruprietariu cum'è in u sistema host. Per esempiu, un prucessu chì eseguisce in un cuntinuu cù un UID di 0 hà tutti i stessi diritti d'accessu cum'è un prucessu nantu à u sistema di l'ospiti cù un UID di 0. In altri palori, l'utilizatore root in u cuntinuu hà tutti i diritti micca solu in u cuntinuu, ma ancu nantu à u sistema d'ospiti s'ellu pò andà fora di u spaziu di nomi isolatu di u cuntinuu.

  • Contenituri senza privilegiu - Quessi sò cuntenituri in quali prucessi appartenenu à u pruprietariu di l'UID è u GID cù un numeru da 0 à 65535, ma per u sistema di l'ospiti u pruprietariu hè mascheratu cù i bit SubUID è SubGID aghjuntu, rispettivamente. Per esempiu, un utilizatore cù UID = 0 in un containeru serà vistu nantu à u sistema di l'ospite cum'è SubUID + UID. Questu prutege u sistema di l'ospitu perchè se qualsiasi prucessu in u cuntinuu hè capaci di scappà u so spaziu di nome isolatu, pò solu cumunicà cù u sistema di l'ospiti cum'è un prucessu cù un UID / GID scunnisciutu, assai altu.

Per automaticamente, i cuntenituri di novu creatu anu un statutu senza privilegiu è per quessa avemu da definisce un SubUID è SubGID.

Creemu dui fugliali di cunfigurazione in quale stabiliremu a maschera per SubUID è SubGID, rispettivamente:

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

Per applicà i cambiamenti, u serviziu LXD deve esse riavviatu:

sudo systemctl restart lxd

Creazione di un switch di rete virtuale ^

Siccomu prima avemu inizializatu a reta cù l'assistente di inizializazione lxd init è hà creatu un dispositivu di rete lxdbr0, Allora in questa sezione avemu da fà simpricimenti cunniscenze cù a rete in LXD è cumu creà un switch virtuale (ponte) cù u cumandamentu di u cliente.

U schema seguente mostra cumu un switch (ponte) cunnetta l'ospite è i cuntenituri in una reta:

Funzioni basi di LXD - Sistemi di containeru Linux

I cuntenituri ponu cumunicà via una reta cù altri cuntenituri o l'ospiti nantu à quale sti cuntenituri sò servuti. Per fà questu, avete bisognu di ligà e carte di rete virtuale di i cuntenituri cù un switch virtuale. Creemu prima un switch, è l'interfacce di rete di u cuntinuu seranu ligati in i capituli successivi, dopu chì u cuntinuu stessu hè statu creatu.

U cumandimu seguitu crea un cambiamentu cù una subnet 10.0.5.0/24 è l'indirizzu IPv4 10.0.5.1/24, è include ancu ipv4.nat cusì chì i cuntenituri ponu accede à l'Internet attraversu l'ospitu cù u serviziu NAT:

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

Verificate a lista di i dispositi di rete dispunibili in LXD:

lxc network list

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

Pudete ancu verificà chì un dispositivu di rete hè statu creatu cù l'uttellu standard di a distribuzione Linux - ip link o 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

Profilu di cunfigurazione ^

Ogni cuntainer in LXD hà a so propria cunfigurazione è pò allargà cù cunfigurazioni dichjarate globalmente chjamate profili di cunfigurazione. L'applicazione di profili di cunfigurazione à un containeru hà un mudellu in cascata, l'esempiu seguente mostra questu:

Funzioni basi di LXD - Sistemi di containeru Linux

In questu esempiu, trè profili sò stati creati in u sistema LXD: default, hddpool и hostfs. Tutti i trè profili sò appiicati à un containeru chì hà una cunfigurazione lucale (zona grisa). Prufilu default hà un dispusitivu root chì hà un paràmetru pool uguali à ssdpool, ma grazia à u mudellu di applicazione di cunfigurazione in cascata, pudemu applicà un prufilu à u cuntinuu hddpool chì hà un paràmetru pool annulerà u listessu paràmetru da u prufilu default è u cuntinuu riceverà a cunfigurazione di u dispusitivu root cun paràmetru pool uguali hddpool, è u prufilu hostfs simpricimenti aghjunghje un novu dispusitivu à u cuntinuu.

Per vede a lista di profili di cunfigurazione dispunibili, utilizate u cumandimu seguitu:

lxc profile list

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

Una lista cumpleta di cumandamenti dispunibuli per travaglià cù un prufilu pò esse acquistatu aghjunghjendu a chjave --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

Editendu u vostru prufilu ^

Profilu di cunfigurazione predeterminatu default ùn hà micca una cunfigurazione di a carta di rete per u cuntinuu è tutti i cuntenituri creati di novu ùn anu micca una rete, per elli hè necessariu di creà dispositi di rete lucali (dedicati) cù un cumandamentu separatu, ma pudemu creà un dispositivu di rete globale in a cunfigurazione. prufilu chì serà spartutu trà tutti i cuntenituri chì utilizanu stu prufilu. In questu modu, subitu dopu à u cumandamentu per creà un novu cuntinuu, avè una rete cù accessu à a rete. À u listessu tempu, ùn ci hè micca restrizioni; pudemu sempre creà un dispositivu di rete locale dopu se ne necessariu.

U cumandimu seguitu aghjunghje u dispusitivu à u prufilu di cunfigurazione eth0 tipu nic cunnessu à a reta lxdbr0:

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

Hè impurtante à nutà chì, postu chì avemu aghjustatu u dispusitivu in u prufilu di cunfigurazione, se avemu specificatu un indirizzu IP staticu in u dispusitivu, allora tutti i cuntenituri chì utilizanu stu prufilu sparteranu u stessu indirizzu IP. Se ci hè bisognu di creà un cuntinuu cù un indirizzu IP staticu attribuitu per u cuntinuu, allora avete da creà una cunfigurazione di u dispositivu di rete à u livellu di u cuntinuu (configurazione lucale) cù u paràmetru di l'indirizzu IP, è micca à u livellu di u prufilu.

Cuntrollamu u prufilu:

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

In questu prufilu, pudemu vede chì per tutti i cuntenituri di novu creatu dui dispositi seranu creati:

  • eth0 - Tipu di dispusitivu nic cunnessu à un switch (ponte di rete) lxdbr0
  • root - Tipu di dispusitivu disk chì usa una piscina di almacenamiento ssdpool

Creazione di novi profili ^

Per aduprà creatu prima Piscina di almacenamiento cuntenituri, crea un prufilu di cunfigurazione ssdroot in quale avemu da aghjunghje un dispusitivu cum'è disk cù u puntu di muntagna / (radica) utilizendu u creatu prima Piscina di almacenamiento - ssdpool:

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

In listessu modu, avemu creatu un dispusitivu cum'è disk, ma in stu casu usendu Piscina di almacenamiento - hddpool:

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

Verificate i profili di cunfigurazione:

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

Repositoriu d'imaghjini ^

I cuntenituri sò creati da l'imaghjini chì sò distribuzioni assemblati apposta chì ùn anu micca un kernel Linux. Dunque, prima di eseguisce u cuntinuu, deve esse implementatu da questa imagine. A fonte di l'imaghjini hè un repository locale in quale l'imaghjini sò scaricati da i repositori esterni.

Repositori d'imaghjini remoti ^

Per automaticamente, LXD hè cunfiguratu per riceve l'imaghjini da trè fonti remoti:

  • ubuntu: (per l'imaghjini stabili di Ubuntu)
  • ubuntu-day: (per l'imaghjini Ubuntu ogni ghjornu)
  • imagine: (per un saccu di altre distros)

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    |
+-----------------+------------------------------------------+--------+--------+

Per esempiu, repository ubuntu: hà e seguenti imagine:

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  |
+----------------------------------------------+--------------+----------+------------+

Per vede un numeru limitatu di colonne avemu usatu l'opzione -c cù paràmetri dasut, è ancu limitatu a durata di a lista cù u cumandamentu head.

U filtru hè dispunibule per vede una lista di imagine. U cumandimu seguitu listerà tutte l'architetture di distribuzione dispunibili 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        |
+------------------------------+--------------------------------------+--------------+

Repositoriu di l'imaghjini lucali ^

Per cumincià à utilizà u cuntinuu, avete bisognu di aghjunghje una maghjina da u repositoriu glubale à u lucale local:. Avà u repositariu lucale hè viotu, u cumandimu farà sicuru di questu lxc image list. Se u metudu list Ùn specificate micca un repository, allora u repository locale serà utilizatu per difettu - local:

lxc image list local:

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

L'imaghjini in u repositoriu sò gestiti cù i seguenti metudi:

squadra
discrizzione

lxc imagine Alias
Gestisce l'aliasi di l'imaghjini

lxc imagine copia
Copia l'imaghjini trà i servitori

lxc imagine cancillari
Sguassà l'imaghjini

lxc imagine mudificà
Edite proprietà di l'imaghjini

lxc imagine Poni
Esporta è scaricate l'imaghjini

lxc imagine impurtazioni
Importa l'imaghjini in a tenda di l'imaghjini

lxc imagine detailed
Mostra informazioni utili nantu à l'imaghjini

lxc imagine lists
Lista d'imaghjini

lxc imagine ricaricà
Refresh images

lxc imagine spettacolo
Mostra e proprietà di l'imaghjini

Copia l'imaghjini à u repositoriu lucale da u glubale images::

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

Image copied successfully!

Fighjemu una lista di tutte l'imaghjini attualmente dispunibili in u repositoriu lucale local::

lxc image -c lfdatsu list local:

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

Configurazione LXD ^

In più di u modu interattivu, LXD sustene ancu un modu di stallazione di cunfigurazione non interattiva, questu hè quandu a cunfigurazione hè specificatu in forma di un schedariu YAML, un formatu speciale chì permette di stallà a cunfigurazione sana in una volta, sguassendu l'esekzione. di parechji cumandamenti interattivi chì sò stati discututi sopra in questu articulu, cumprese a cunfigurazione di a rete, a creazione di profili di cunfigurazione, etc. Ùn copreremu micca sta zona quì, pudete verificà da sè stessu. in documentazione.

U prossimu cumandamentu interattivu lxc config chì avemu da guardà vi permette di stabilisce a cunfigurazione. Per esempiu, per assicurà chì l'imaghjini scaricati à u repositoriu lucale ùn sò micca aghjurnati automaticamente da i repositori glubale, pudemu attivà stu cumpurtamentu cù u cumandimu seguente:

lxc config set images.auto_update_cached=false

Creazione è gestione di un containeru ^

Per creà un containeru utilizate u cumandamentu lxc init à quale i valori sò passati репозиторий:образ è dopu l'ID desideratu per u containeru. U repositariu pò esse specificatu cum'è locale local: cusì hè qualsiasi mundiale. Se u repository ùn hè micca specificatu, da manera predeterminata u repository locale hè utilizatu per circà l'imaghjini. Se l'imaghjini hè specificatu da u repositoriu glubale, allora l'imaghjini serà prima scaricatu à u repositoriu lucale è dopu utilizatu per creà u cuntinuu.

Eseguimu u cumandimu seguitu per creà u nostru primu containeru:

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

Fighjemu i chjavi di cumanda chì usemu quì in ordine:

  • alpine3 - Un alias (alias) hè specificatu per l'imaghjina chì hè stata caricata prima à u repositoriu lucale. Se l'alias ùn hè micca creatu per questa imagine, pudete sempre riferite à l'imaghjini da u so Dàmbiu chì si vede in a tavula.
  • alp — Fixe l'identificateur du récipient
  • --storage - Questa chjave indica in quale Piscina di almacenamiento un cuntinuu serà creatu
  • --profile - Queste chjavi in ​​cascata applicanu a cunfigurazione da i profili di cunfigurazione creati prima à u containeru

Lanciamu u containeru, chì principia à lancià u sistema init di a distribuzione:

lxc start alp

Pudete ancu aduprà u cumandamentu lxc launch chì permette di cumminà squadre lxc init и lxc start in una operazione.

Verificate u statu di u containeru:

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

Verificate a cunfigurazione di u containeru:

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

In a rùbbrica profiles pudemu assicurà chì stu containeru usa dui profili di cunfigurazione - default и hddroot. In rùbbrica devices pudemu solu detect un aparechju postu chì u dispusitivu reta statu creatu à u livellu prufilu default. Per vede tutti i dispositi utilizati da u cuntinuu avete bisognu di aghjunghje una chjave --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: ""

Stabbilimentu di un indirizzu IP staticu ^

Sè avemu pruvatu à stabilisce un indirizzu IP per un dispusitivu reta eth0 squadra lxc config device set alp destinatu à a cunfigurazione di u cuntinuu, allora riceveremu un errore chì informarà chì u dispusitivu ùn esiste micca perchè u dispusitivu eth0 chì hè utilizatu da u cuntinuu appartene à u prufilu default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Pudemu naturalmente stabilisce un indirizzu IP staticu per eth0 dispusitivi in ​​u prufilu, ma serà u listessu per tutti i cuntenituri chì utilizanu stu prufilu. Dunque, aghjustemu un dispositivu dedicatu à u cuntinuu:

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

Allora avete bisognu di ripiglià u cuntinuu:

lxc restart alp

Se guardemu a cunfigurazione di u containeru avà, ùn avemu micca bisognu di utilizà l'opzione --expanded per vede u dispusitivu reta eth0, Siccomu l'avemu creatu à u livellu di u containeru è cascata nantu à u stessu dispositivu da u prufilu 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: ""

Eliminazione di un cuntainer ^

Per sguassà un containeru, utilizate u cumandimu lxc delete, ma prima di sguassà u cuntinuu, deve esse firmatu cù u cumandamentu lxc stop:

lxc stop alp

lxc list

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

Dopu avemu verificatu chì u statu di u cuntinuu hè diventatu STOPPED, pò esse cacciatu da Piscina di almacenamiento:

lxc delete alp

Accessu à u containeru ^

Per eseguisce cumandamenti in un containeru direttamente, saltendu e cunnessione di a rete, utilizate u cumandamentu lxc exec chì eseguisce cumandamenti in u cuntinuu senza lancià a shell di u sistema. Sè avete bisognu di eseguisce un cumandamentu in una cunchiglia utilizendu mudelli di cunchiglia, cum'è variabili, redirections di file (pipe), etc., allora avete bisognu di lancià esplicitamente a cunchiglia è passà u cumandamentu cum'è chjave, per esempiu:

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

U cumandimu hà utilizatu un caratteru di escape speciale per un caratteru speciale $ cusì chì a variabile $HOME ùn hè micca interpretatu nantu à a macchina host, ma hè statu interpretatu solu in u cuntinuu.

Hè ancu pussibule di inizià u modu di shell interattivu, è dopu finisce a sessione eseguendu hotkey CTRL+D:

lxc exec alp -- /bin/sh

Gestione di e risorse di u containeru ^

In LXD, pudete gestisce e risorse di cuntainer utilizendu un set speciale di cunfigurazione. Una lista completa di i paràmetri di cunfigurazione di u containeru pò esse truvata in documentazione.

Limitazione di risorse RAM ^

Parameter limits.memory limita a quantità di RAM dispunibule per u containeru. U valore hè un numeru è unu di suffissi dispunibili.

Fixemu u limite RAM di u containeru à 256 MB:

lxc config set alp limits.memory 256MB

Inoltre, ci sò altri paràmetri per limità a memoria:

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

squadra lxc config show permette di visualizà tutta a cunfigurazione di u containeru, cumpresu u limitu di risorse applicate chì hè statu stabilitu:

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

Limite di risorse CPU ^

Ci hè parechje manere di limità e risorse di CPU. tipi di restrizioni:

  • limit.cpu - lega un containeru à unu o più core di CPU
  • limits.cpu.allowance - gestisce sia quote di pianificatore CFS quandu u limitu di tempu hè passatu, sia u mecanismu universale di spartera di risorse CPU quandu u percentuale hè passatu
  • limits.cpu.priority - priorità di pianificatore quandu parechje istanze chì sparte un inseme di processori sò attribuiti u listessu percentuale di processori

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

Limitazione di u spaziu di discu ^

In più di restrizioni tali limits.read, limits.write pudemu ancu limità a quantità di spaziu di discu cunsumata da u cuntinuu (funziona solu cù ZFS o BTRFS):

lxc config device set alp root size=2GB

Dopu a stallazione, in u paràmetru devices.root.size Pudemu verificà u limitu stabilitu:

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

Per vede e quote di discu usate pudemu avè da u cumandamentu 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

Malgradu u fattu chì avemu stabilitu un limitu per u dispusitivu radicali di u cuntinuu à 2GB, utilità di u sistema cum'è df ùn vede micca sta restrizzione. Per fà questu, faremu una piccula prova è scopre cumu funziona.

Creemu 2 novi cuntenituri identici in u stessu Piscina di almacenamiento (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         |
+------+---------+------------------+------+-----------+-----------+

Creemu un schedariu 1GB in unu di i cuntenituri:

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

Assicuratevi chì u schedariu hè creatu:

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

Se guardemu in u sicondu cuntinuu, verificate l'esistenza di un schedariu in u stessu locu, allora stu schedariu ùn serà micca quì, chì hè previstu, postu chì i cuntenituri sò creati in u so propiu. Volume di Storage in u listessu Piscina di almacenamiento:

lxc exec alp2 -- ls -lh
total 0

Ma paragunemu i valori chì pruduce df à l'un et à l'autre récipient :

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

Dispositiu /dev/loop1 muntatu cum'è a partizione radicali Piscina di almacenamiento chì sti cuntenituri usanu, cusì sparte u so voluminu trà dui.

Statistiche di cunsumu di risorse ^

Pudete vede statistiche di cunsumu di risorse per un containeru usendu u cumandimu:

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

U travagliu cù snapshots ^

LXD hà a capacità di creà snapshots è restaurà u statu di u containeru da elli.

Per creà una snapshot, eseguite u cumandimu seguente:

lxc snapshot alp snapshot1

A squadra lxc snapshot nisuna chjave dispunibule list, dunque, per vede a lista di snapshots avete bisognu di utilizà u cumandimu chì mostra infurmazione generale nantu à u cuntinuu:

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

Pudete restaurà un containeru da una snapshot usendu u cumandimu lxc restore specificendu u cuntinuu per quale serà realizatu a risturazione è l'alias di snapshot:

lxc restore alp snapshot1

U cumandimu seguitu hè utilizatu per sguassà una snapshot. Per piacè nutate chì a sintassi di u cumandimu ùn hè micca simile à tutti l'altri; quì avete bisognu di specificà una barra in avanti dopu u nome di u containeru. Se a barra hè omessa, allora u cumandimu per sguassà una snapshot hè interpretatu cum'è un cumandamentu per sguassà un containeru!

lxc delete alp/snapshot1

In l'esempiu sopra, avemu vistu i cosi chjamati snapshots senza statu. LXD hà un altru tipu di snapshots - stateful, chì salva u statu attuale di tutti i prucessi in u containeru. I snapshots stateful venenu cù una quantità di funzioni interessanti è utili.

Ciò chì? ^

  • Un modulu hè dispunibule per i sviluppatori Python PyLXD chì furnisce una API à LXD

UPDATE 10.04.2020/15/00 XNUMX:XNUMX: Navigazione aghjuntu

Source: www.habr.com

Add a comment