Característiques bàsiques dels sistemes de contenidors LXD - Linux
LXD és el gestor de contenidors del sistema de nova generació, així ho diu font. Ofereix una interfície d'usuari similar a les màquines virtuals, però utilitza contenidors Linux.
Nucli LXD és un dimoni privilegiat (un servei que s'executa amb drets d'arrel) que proporciona una API REST mitjançant un sòcol Unix local, així com a través de la xarxa si hi ha instal·lada la configuració adequada. Els clients, com ara l'eina de línia d'ordres proporcionada amb LXD, fan sol·licituds mitjançant aquesta API REST. Això vol dir que tant si accediu a un host local com a un host remot, tot funciona igual.
En aquest article no ens detenem en detall en els conceptes de LXD, no considerarem totes les capacitats disponibles descrites a la documentació, inclosa la recent implementació en les últimes versions de LXD de suport per a màquines virtuals QEMU en paral·lel amb contenidors. En canvi, aprendrem només els conceptes bàsics de la gestió de contenidors: configurar grups d'emmagatzematge, xarxes, executar un contenidor, aplicar límits de recursos i com utilitzar instantànies perquè pugueu obtenir una comprensió bàsica de LXD i utilitzar contenidors a Linux.
Per obtenir informació completa, consulteu la font oficial:
Això vol dir que s'instal·laran dos paquets alhora, un com a paquet del sistema i l'altre com a paquet instantani. La instal·lació de dos paquets en un sistema pot crear algun problema on el paquet del sistema es pot quedar orfe si el gestor de paquets snap elimina el paquet snap.
Cerca paquet lxd al repositori Snap podeu utilitzar l'ordre següent:
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
En executar l'ordre list podeu assegurar-vos que el paquet lxd encara no instal·lat:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
Tot i que LXD és un paquet instantani, s'ha d'instal·lar mitjançant el paquet del sistema lxd, que crearà el grup corresponent al sistema, les utilitats necessàries en /usr/bin etcètera
sudo apt update
sudo apt install lxd
Assegurem-nos que el paquet estigui instal·lat com a paquet instantani:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
lxd 3.21 13474 stable/… canonical✓ -
Instal·lació de LXD a les distribucions d'Arch Linux ^
Per instal·lar el paquet LXD al sistema, heu d'executar les ordres següents, el primer actualitzarà la llista de paquets del sistema disponible al repositori, el segon instal·larà directament el paquet:
sudo pacman -Syyu && sudo pacman -S lxd
Després d'instal·lar el paquet, per poder gestionar LXD per un usuari habitual, s'ha d'afegir al grup del sistema lxd:
sudo usermod -a -G lxd user1
Assegurem-nos que l'usuari user1 afegit al grup lxd:
id -Gn user1
user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd
Si el grup lxd no és visible a la llista, llavors cal que torneu a activar la sessió d'usuari. Per fer-ho, heu de tancar la sessió i iniciar sessió amb el mateix usuari.
Activa en systemd carregant el servei LXD a l'inici del sistema:
Abans de començar la inicialització, hem d'entendre com s'organitza lògicament l'emmagatzematge a LXD.
Emmagatzematge (Dipòsit) consisteix en d'un o més Piscina d'emmagatzematge que utilitza un dels sistemes de fitxers compatibles com ZFS, BTRFS, LVM o directoris normals. Cada Piscina d'emmagatzematge es divideix en volums (Volum d'emmagatzematge) que continguin imatges, contenidors o dades per a altres finalitats.
Imatges - Són distribucions especialment muntades sense el nucli Linux i disponibles des de fonts externes
contenidors - Es tracta de distribucions desplegades a partir d'imatges, llestes per al seu ús
Imatges instantànies - aquestes són instantànies de l'estat dels contenidors als quals podeu tornar
Per gestionar l'emmagatzematge a LXD, utilitzeu l'ordre lxc storage un certificat que podeu obtenir especificant la clau - lxc storage --help
L'ordre següent mostra una llista de tots Piscina d'emmagatzematge en emmagatzematge 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 veure una llista de tots Volum d'emmagatzematge en el seleccionat Piscina d'emmagatzematge serveix a l'equip 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 |
+-----------+----------------------------------+-------------+---------+
També, si per Piscina d'emmagatzematge En crear, es va seleccionar el sistema de fitxers BTRFS i, a continuació, obteniu una llista Volum d'emmagatzematge o subvolums a la interpretació BTRFS, podeu utilitzar el conjunt d'eines d'aquest sistema de fitxers:
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
Abans de crear i utilitzar contenidors, heu de realitzar una inicialització general de LXD que crea i configura la xarxa i l'emmagatzematge. Això es pot fer manualment mitjançant ordres de client estàndard que estan disponibles a la llista cridant l'ordre lxc --help o utilitzant l'assistent d'inicialització lxd init responent unes quantes preguntes.
Selecció d'un sistema de fitxers per a l'agrupació d'emmagatzematge ^
Durant la inicialització, LXD fa diverses preguntes, inclosa la determinació del tipus de sistema de fitxers per defecte Piscina d'emmagatzematge. Per defecte, el sistema de fitxers BTRFS està seleccionat per a això. Serà impossible canviar a un altre FS després de la creació. Es recomana seleccionar un FS taula de comparació de característiques:
característica
directori
Btrfs
LVM
ZFS
CEPH
Emmagatzematge d'imatges optimitzat
no
yes
yes
yes
yes
Creació d'instàncies optimitzada
no
yes
yes
yes
yes
Creació d'instantània optimitzada
no
yes
yes
yes
yes
Transferència d'imatges optimitzada
no
yes
no
yes
yes
Transferència d'instàncies optimitzada
no
yes
no
yes
yes
Còpia en escriptura
no
yes
yes
yes
yes
Basat en blocs
no
no
yes
no
yes
Clonació instantània
no
yes
yes
yes
yes
Controlador d'emmagatzematge utilitzable dins d'un contenidor
yes
yes
no
no
no
Restaura des d'instantànies anteriors (no les darreres)
yes
yes
yes
no
yes
Quotes d'emmagatzematge
sí (*)
yes
yes
yes
no
Inicialització de la xarxa i l'agrupació d'emmagatzematge mitjançant l'assistent ^
La següent comanda que veurem suggereix configurar els components principals de LXD responent preguntes senzilles mitjançant l'assistent d'inicialització.
Executar l'ordre lxc init i introduïu les respostes a les preguntes després dels dos punts tal com es mostra a l'exemple següent o canvieu-les segons les vostres condicions:
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]:
Creació d'una agrupació d'emmagatzematge addicional ^
En el pas anterior vam crear Piscina d'emmagatzematge que va rebre el nom ssdpool i el fitxer del qual es troba al meu sistema a /var/lib/lxd/disks/ssdpool.img. Aquesta adreça del sistema de fitxers correspon a la unitat SSD física del meu PC.
Les següents accions, per ampliar la comprensió del paper que juga Piscina d'emmagatzematge al repositori, en crearem un segon Piscina d'emmagatzematge que s'ubicarà físicament en un altre tipus de disc, HDD. El problema és que LXD no et permet crear Piscina d'emmagatzematge fora de domicili /var/lib/lxd/disks/ i fins i tot els enllaços simbòlics no funcionaran, veure la resposta del desenvolupador. Podem obviar aquesta limitació durant la inicialització/format Piscina d'emmagatzematge especificant el valor com a dispositiu de bloc en comptes de la ruta al fitxer de bucle en retorn, especificant-ho a la clau source.
Per tant, abans de crear Piscina d'emmagatzematge heu de definir un fitxer de bucle inversa o una partició existent al vostre sistema de fitxers que utilitzarà. Per fer-ho, crearem i utilitzarem un fitxer que limitarem de mida a 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
Connectem el fitxer de loopback a un dispositiu de loopback gratuït:
Gràcies a la clau --show executant l'ordre torna a la pantalla el nom del dispositiu al qual està connectat el nostre fitxer de loopback. Si cal, podem mostrar una llista de tots els dispositius ocupats d'aquest tipus per assegurar-nos que les nostres accions són correctes:
A la llista podeu trobar que el dispositiu té /dev/loop1 fitxer de loopback inclòs /mnt/work/lxd/hddpool.img, i al dispositiu /dev/loop0 fitxer de loopback inclòs /var/lib/lxd/disks/ssdpool.img que correspon al valor predeterminat Piscina d'emmagatzematge.
La següent comanda en crea una de nova Piscina d'emmagatzematge en LXD basat en el fitxer de bucle que acabem de preparar. LXD formatearà el fitxer de loopback /mnt/work/lxd/hddpool.img al dispositiu /dev/loop1 per al sistema de fitxers BTRFS:
Mostrem una llista de tots Piscina d'emmagatzematge a la pantalla:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 0 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 0 |
+---------+-------------+--------+--------------------------------+---------+
Augment de la mida de l'agrupació d'emmagatzematge ^
Després de la creació Piscina d'emmagatzematge, si cal, es pot ampliar. Per Piscina d'emmagatzematge basat en el sistema de fitxers BTRFS, executeu les ordres següents:
Inserció automàtica d'un fitxer de loopback a una ranura de dispositiu de loopback ^
Tenim un petit problema, quan reiniciem el sistema amfitrió, el fitxer /mnt/work/lxd/hddpool.img "volarà" fora del dispositiu /dev/loop1 i el servei LXD es bloquejarà en carregar perquè no el veurà en aquest dispositiu. Per resoldre aquest problema, heu de crear un servei del sistema que inserirà aquest fitxer al dispositiu /dev/loop1 quan arrenca el sistema amfitrió.
Anem a crear unitat tipus d'arxiu servei в /etc/systemd/system/ per al sistema d'inicialització 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
Activa el servei:
sudo systemctl enable lxd-hddpool
Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.
Després de reiniciar el sistema amfitrió, comprovem l'estat del servei:
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).
Des de la sortida podem comprovar que l'estat del servei és activi, malgrat que l'execució del nostre script des d'una ordre es va completar, l'opció ens va permetre fer-ho RemainAfterExit=true.
Com que tots els processos del contenidor s'executen realment de manera aïllada al sistema amfitrió mitjançant el seu nucli, per protegir encara més l'accés dels processos del contenidor al sistema amfitrió, LXD ofereix privilegis de procés, on:
Contenidors privilegiats - Són contenidors en què els processos amb UID i GID corresponen al mateix propietari que al sistema host. Per exemple, un procés que s'executa en un contenidor amb un UID de 0 té tots els mateixos drets d'accés que un procés del sistema amfitrió amb un UID de 0. En altres paraules, l'usuari root del contenidor té tots els drets no només en el contenidor, però també al sistema host si pot sortir fora de l'espai de noms aïllat del contenidor.
Contenidors sense privilegis - Es tracta de contenidors en què els processos pertanyen al propietari de l'UID i el GID amb un número del 0 al 65535, però per al sistema amfitrió el propietari s'emmascara mitjançant els bits SubUID i SubGID afegits, respectivament. Per exemple, un usuari amb UID=0 en un contenidor es veurà al sistema amfitrió com SubUID + UID. Això protegeix el sistema amfitrió perquè si algun procés del contenidor és capaç d'escapar del seu espai de noms aïllat, només es pot comunicar amb el sistema amfitrió com un procés amb un UID/GID molt alt desconegut.
Per defecte, els contenidors de nova creació tenen un estat sense privilegis i, per tant, hem de definir un SubUID i un SubGID.
Creem dos fitxers de configuració en els quals establirem la màscara per a SubUID i SubGID, respectivament:
Com que prèviament vam inicialitzar la xarxa mitjançant l'assistent d'inicialització lxd init i va crear un dispositiu de xarxa lxdbr0, llavors en aquesta secció simplement ens familiaritzarem amb les xarxes a LXD i com crear un commutador virtual (pont) mitjançant l'ordre del client.
El diagrama següent mostra com un commutador (pont) connecta l'amfitrió i els contenidors a una xarxa:
Els contenidors poden comunicar-se a través d'una xarxa amb altres contenidors o amb l'amfitrió on es serveixen aquests contenidors. Per fer-ho, cal enllaçar les targetes de xarxa virtual dels contenidors amb un commutador virtual. Primer crearem un commutador i les interfícies de xarxa del contenidor s'enllaçaran en capítols posteriors, un cop creat el propi contenidor.
L'ordre següent crea un commutador amb una subxarxa 10.0.5.0/24 i adreça IPv4 10.0.5.1/24, i també inclou ipv4.nat perquè els contenidors puguin accedir a Internet a través de l'amfitrió mitjançant el servei NAT:
Cada contenidor de LXD té la seva pròpia configuració i la pot ampliar amb configuracions declarades globalment anomenades perfils de configuració. L'aplicació de perfils de configuració a un contenidor té un model en cascada, l'exemple següent ho demostra:
En aquest exemple, s'han creat tres perfils al sistema LXD: default, hddpool и hostfs. Els tres perfils s'apliquen a un contenidor que té una configuració local (àrea grisa). Perfil default té un dispositiu root que té un paràmetre pool és igual a ssdpool, però gràcies al model d'aplicació de configuració en cascada, podem aplicar un perfil al contenidor hddpool que té un paràmetre pool anul·larà el mateix paràmetre del perfil default i el contenidor rebrà la configuració del dispositiu root amb paràmetre pool igual hddpool, i el perfil hostfs simplement afegeix un dispositiu nou al contenidor.
Per veure la llista de perfils de configuració disponibles, utilitzeu l'ordre següent:
lxc profile list
+---------+---------+
| NAME | USED BY |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+
Es pot obtenir una llista completa d'ordres disponibles per treballar amb un perfil afegint la clau --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
Perfil de configuració predeterminat default no té una configuració de targeta de xarxa per al contenidor i tots els contenidors de nova creació no tenen xarxa, per a ells cal crear dispositius de xarxa locals (dedicats) amb una ordre independent, però podem crear un dispositiu de xarxa global a la configuració perfil que es compartirà entre tots els contenidors que utilitzen aquest perfil. D'aquesta manera, immediatament després de l'ordre de crear un nou contenidor, tindran una xarxa amb accés a la xarxa. Al mateix temps, no hi ha restriccions; sempre podem crear un dispositiu de xarxa local més tard si cal.
L'ordre següent afegirà el dispositiu al perfil de configuració eth0 типа nic connectat a la xarxa lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0
És important tenir en compte que, com que realment hem afegit el dispositiu al perfil de configuració, si hem especificat una adreça IP estàtica al dispositiu, tots els contenidors que utilitzaran aquest perfil compartiran la mateixa adreça IP. Si cal crear un contenidor amb una adreça IP estàtica assignada per al contenidor, hauríeu de crear una configuració de dispositiu de xarxa a nivell de contenidor (configuració local) amb el paràmetre d'adreça IP i no a nivell de perfil.
Comprovem el perfil:
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: []
En aquest perfil podem veure que per a tots els contenidors de nova creació es crearan dos dispositius:
eth0 - Tipus de dispositiu nic connectat a un commutador (pont de xarxa) lxdbr0
root - Tipus de dispositiu disk que utilitza un grup d'emmagatzematge ssdpool
Per utilitzar prèviament creat Piscina d'emmagatzematge contenidors, creeu un perfil de configuració ssdroot en què afegirem un dispositiu com disk amb punt de muntatge / (arrel) utilitzant el creat anteriorment Piscina d'emmagatzematge - ssdpool:
Els contenidors es creen a partir d'imatges que són distribucions especialment muntades que no tenen un nucli Linux. Per tant, abans d'executar el contenidor, s'ha de desplegar a partir d'aquesta imatge. La font de les imatges és un dipòsit local al qual es descarreguen imatges des de dipòsits externs.
Per mostrar un nombre limitat de columnes hem utilitzat l'opció -c amb paràmetres dasut, i també va limitar la longitud de la llista amb l'ordre head.
El filtratge està disponible per mostrar una llista d'imatges. L'ordre següent enumerarà totes les arquitectures de distribució disponibles AlpineLinux:
Per començar a utilitzar el contenidor, cal afegir una imatge del repositori global al local local:. Ara el dipòsit local està buit, l'ordre s'assegurarà d'això lxc image list. Si el mètode list no especifiqueu un dipòsit, llavors el dipòsit local s'utilitzarà per defecte - local:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+
Les imatges del repositori es gestionen mitjançant els mètodes següents:
Equip
Descripció
imatge lxc àlies
Gestioneu els àlies d'imatges
imatge lxc copy
Copia imatges entre servidors
imatge lxc esborrar
Eliminar imatges
imatge lxc edita
Edita les propietats de la imatge
imatge lxc exportar
Exporta i baixa imatges
imatge lxc importar
Importa imatges a la botiga d'imatges
imatge lxc info
Mostra informació útil sobre imatges
imatge lxc llista
Llista d'imatges
imatge lxc refresh
Actualitzar imatges
imatge lxc Mostra
Mostra les propietats de la imatge
Copieu la imatge al repositori local des del global images::
A més del mode interactiu, LXD també admet un mode d'instal·lació de configuració no interactiu, és quan la configuració s'especifica en forma d'arxiu YAML, un format especial que permet instal·lar tota la configuració alhora, evitant l'execució. de moltes ordres interactives que es van comentar anteriorment en aquest article, inclosa la configuració de la xarxa, la creació de perfils de configuració, etc. No cobrirem aquesta àrea aquí, podeu comprovar-ho pel vostre compte. en la documentació.
Següent comandament interactiu lxc config que veurem us permet establir la configuració. Per exemple, per assegurar-nos que les imatges baixades al dipòsit local no s'actualitzen automàticament des dels dipòsits globals, podem activar aquest comportament amb l'ordre següent:
Per crear un contenidor, utilitzeu l'ordre lxc init al qual es transmeten valors репозиторий:образ i després l'identificador desitjat per al contenidor. El repositori es pot especificar com a local local: també ho és qualsevol global. Si no s'especifica el dipòsit, de manera predeterminada s'utilitza el dipòsit local per cercar la imatge. Si la imatge s'especifica des del dipòsit global, la imatge es baixarà primer al dipòsit local i després es farà servir per crear el contenidor.
Executem la següent comanda per crear el nostre primer contenidor:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddroot
Vegem les tecles d'ordres que fem servir aquí en ordre:
alpine3 — S'especifica un àlies (àlies) per a la imatge que es va penjar prèviament al repositori local. Si l'àlies no s'ha creat per a aquesta imatge, sempre podeu fer referència a la imatge per la seva Empremta digital que es mostra a la taula.
alp — Estableix l'identificador del contenidor
--storage — Aquesta clau indica en quin Piscina d'emmagatzematge es crearà un contenidor
--profile — Aquestes claus apliquen en cascada la configuració dels perfils de configuració creats anteriorment al contenidor
Llancem el contenidor, que comença a llançar el sistema init de la distribució:
lxc start alp
També podeu utilitzar l'ordre lxc launch que permet combinar equips lxc init и lxc start en una operació.
Comprovació de l'estat del contenidor:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME | STATE | IPV4 | IPV6 | TYPE | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | hddpool |
+------+---------+------------------+------+-----------+--------------+
A la secció profiles podem assegurar-nos que aquest contenidor utilitza dos perfils de configuració − default и hddroot. En secció devices només podem detectar un dispositiu perquè el dispositiu de xarxa es va crear a nivell de perfil default. Per veure tots els dispositius utilitzats pel contenidor, cal afegir una clau --expanded:
Si intentem establir una adreça IP per a un dispositiu de xarxa eth0 equip lxc config device set alp destinat a la configuració del contenidor, aleshores rebrem un error que informarà que el dispositiu no existeix perquè el dispositiu eth0 que fa servir el contenidor pertany al perfil default:
lxc config device set alp eth0 ipv4.address 10.0.5.5
Error: The device doesn't exist
Per descomptat, podem establir una adreça IP estàtica eth0 dispositius del perfil, però serà el mateix per a tots els contenidors que utilitzaran aquest perfil. Per tant, afegim un dispositiu dedicat al contenidor:
lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Aleshores, heu de reiniciar el contenidor:
lxc restart alp
Si mirem la configuració del contenidor ara, no cal que utilitzem l'opció --expanded per veure el dispositiu de xarxa eth0, ja que el vam crear a nivell de contenidor i es va en cascada sobre el mateix dispositiu des del perfil default:
Per executar ordres en un contenidor directament, sense passar les connexions de xarxa, utilitzeu l'ordre lxc exec que executa ordres al contenidor sense llançar l'intèrpret d'ordres del sistema. Si necessiteu executar una ordre en un intèrpret d'ordres mitjançant patrons d'intèrpret d'ordres com ara variables, redireccions de fitxers (pipe), etc., haureu d'executar l'intèrpret d'ordres explícitament i passar l'ordre com a clau, per exemple:
lxc exec alp -- /bin/sh -c "echo $HOME"
L'ordre utilitzava un caràcter d'escapada especial per caràcter especial $ de manera que la variable $HOME no es va interpretar a la màquina host, sinó que només es va interpretar dins del contenidor.
També és possible iniciar el mode d'intèrpret d'ordres interactiu i, a continuació, finalitzar la sessió executant la tecla d'accés ràpid CTRL+D:
A LXD, podeu gestionar els recursos del contenidor mitjançant un conjunt especial de configuració. Es pot trobar una llista completa dels paràmetres de configuració del contenidor en la documentació.
limit.cpu - enllaça un contenidor a un o més nuclis de CPU
limits.cpu.allowance - gestiona les quotes del programador CFS quan ha passat el límit de temps, o el mecanisme universal de compartició de recursos de la CPU quan el percentatge ha passat
limits.cpu.priority - prioritat del planificador quan se'ls assigna el mateix percentatge de processadors a diverses instàncies que comparteixen un conjunt de processadors
A més de restriccions com limits.read, limits.write també podem limitar la quantitat d'espai de disc consumit pel contenidor (només funciona amb ZFS o BTRFS):
lxc config device set alp root size=2GB
Després de la instal·lació, al paràmetre devices.root.size Podem comprovar el límit establert:
lxc config show alp
...
devices:
root:
path: /
pool: hddpool
size: 2GB
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""
Per veure les quotes de disc utilitzades podem obtenir des de l'ordre 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
Malgrat que hem establert un límit per al dispositiu arrel del contenidor a 2 GB, utilitats del sistema com ara df no veurà aquesta restricció. Per fer-ho, farem una petita prova i descobrirem com funciona.
Creem 2 nous contenidors idèntics al mateix Piscina d'emmagatzematge (HDDpool):
lxc exec alp1 -- ls -lh
total 1000M
-rw-r--r-- 1 root root 1000.0M Mar 27 10:16 file.img
Si mirem al segon contenidor, comprovem l'existència d'un fitxer a la mateixa ubicació, aleshores aquest fitxer no hi serà, cosa que és d'esperar, ja que els contenidors es creen pel seu compte. Volum d'emmagatzematge al mateix Piscina d'emmagatzematge:
lxc exec alp2 -- ls -lh
total 0
Però comparem els valors que produeix df a un i a l'altre contenidor:
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 muntat com la partició arrel Piscina d'emmagatzematge que utilitzen aquests contenidors, de manera que en comparteixen el volum entre dos.
LXD té la capacitat de crear instantànies i restaurar-ne l'estat del contenidor.
Per crear una instantània, executeu l'ordre següent:
lxc snapshot alp snapshot1
L'equip lxc snapshot no hi ha cap clau disponible list, per tant, per veure la llista d'instantànies cal utilitzar l'ordre que mostra informació general sobre el contenidor:
lxc info alp
...
...
Snapshots:
snapshot1 (taken at 2020/04/08 18:18 UTC) (stateless)
Podeu restaurar un contenidor des d'una instantània mitjançant l'ordre lxc restore especificant el contenidor per al qual es realitzarà la restauració i l'àlies de la instantània:
lxc restore alp snapshot1
L'ordre següent s'utilitza per eliminar una instantània. Tingueu en compte que la sintaxi de l'ordre no és semblant a totes les altres; aquí heu d'especificar una barra inclinada després del nom del contenidor. Si s'omet la barra inclinada, l'ordre per suprimir una instantània s'interpreta com una ordre per eliminar un contenidor.
lxc delete alp/snapshot1
A l'exemple anterior, vam analitzar les anomenades instantànies sense estat. LXD té un altre tipus d'instantànies: amb estat, que desa l'estat actual de tots els processos del contenidor. Hi ha una sèrie de funcions interessants i útils associades a les instantànies amb estat.