Osnovne karakteristike LXD - Linux kontejnerskih sistema

Osnovne karakteristike LXD - Linux kontejnerskih sistema

LXD je sljedeća generacija sistemskog upravitelja kontejnera, tako kaže izvor. Nudi korisnički interfejs sličan virtuelnim mašinama, ali umesto toga koristi Linux kontejnere.

LXD jezgro je privilegirani daemon (servis koji radi s root pravima) koji pruža REST API preko lokalnog unix socketa, kao i preko mreže ako je instalirana odgovarajuća konfiguracija. Klijenti, kao što je alat komandne linije koji se isporučuje uz LXD, postavljaju zahtjeve preko ovog REST API-ja. To znači da bez obzira da li pristupate lokalnom ili udaljenom hostu, sve radi isto.

U ovom članku nećemo se detaljno zadržavati na konceptima LXD-a, nećemo razmatrati sve dostupne mogućnosti navedene u dokumentaciji, uključujući nedavnu implementaciju podrške za QEMU virtuelne mašine u najnovijim verzijama LXD-a paralelno sa kontejnerima. Umjesto toga, naučit ćemo samo osnove upravljanja kontejnerima - postavljanje spremišta za pohranu, umrežavanje, pokretanje kontejnera, primjena ograničenja resursa i kako koristiti snimke kako biste mogli steći osnovno razumijevanje LXD-a i koristiti kontejnere na Linuxu.

Za potpune informacije pogledajte službeni izvor:

Навигация

Instalacija LXD ^

Instalacija LXD-a na Ubuntu distribucijama ^

U distribucijskom paketu Ubuntu 19.10 lxd ima emitovanje 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, a drugi kao snap paket. Instaliranje dva paketa na sistem može stvoriti neki problem u kojem sistemski paket može ostati bez roditelja ako snap paket ukloni upravitelj snap paketa.

Pronađite paket lxd u snap spremištu 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 komande list možete biti sigurni da je paket lxd još nije instalirano:

snap list

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

Uprkos činjenici da je LXD snap paket, on se mora instalirati preko sistemskog paketa lxd, koji će kreirati odgovarajuću grupu u sistemu, potrebne uslužne programe u /usr/bin i tako dalje.

sudo apt update
sudo apt install lxd

Uvjerimo se da je paket instaliran kao snap paket:

snap list

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

Instalacija LXD-a na Arch Linux distribucijama ^

Da biste instalirali LXD paket na sistem, potrebno je da pokrenete sljedeće komande, prva će ažurirati listu paketa na sistemu dostupnih u spremištu, druga će direktno instalirati paket:

sudo pacman -Syyu && sudo pacman -S lxd

Nakon instaliranja paketa, da bi običan korisnik mogao upravljati LXD-om, mora se dodati u sistemsku grupu lxd:

sudo usermod -a -G lxd user1

Pobrinimo se za korisnika user1 dodano u grupu lxd:

id -Gn user1

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

Ako grupa lxd nije vidljiv na listi, 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 sistema:

sudo systemctl enable lxd

Pokrenimo uslugu:

sudo systemctl start lxd

Provjera statusa usluge:

sudo systemctl status lxd

Pohrana LXD (Skladištenje) ^

Prije nego što započne inicijalizacija, moramo razumjeti kako je skladište u LXD-u logično raspoređeno.

Skladištenje (skladištenje) sastoji se od od jednog ili više skladišni bazen koji koristi jedan od podržanih sistema datoteka kao što su ZFS, BTRFS, LVM ili regularni direktoriji. Svaki skladišni bazen podijeljen je na sveske (Volumen skladišta) koji sadrže slike, kontejnere ili podatke za druge svrhe.

  • Slike - ovo su posebno sastavljene distribucije bez Linux kernela i dostupne iz vanjskih izvora
  • Kontejneri - ovo su raspoređene distribucije iz slika, spremne za upotrebu
  • Snimci - ovo su snimci stanja kontejnera u koje se možete vratiti

Osnovne karakteristike LXD - Linux kontejnerskih sistema

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

Sljedeća komanda prikazuje listu svih skladišni bazen u LXD skladištu:

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 liste svih Volumen skladišta u odabranom skladišni bazen 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đe, ako za skladišni bazen Prilikom kreiranja, odabran je sistem datoteka BTRFS, a zatim dobijete listu Volumen skladišta ili podskupovi u BTRFS interpretaciji, možete koristiti alate ovog sistema datoteka:

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 ^

Prije kreiranja i korištenja kontejnera, morate izvršiti opću LXD inicijalizaciju koja kreira i konfigurira mrežu i skladište. Ovo se može uraditi ručno koristeći standardne klijentske komande koje su dostupne na listi pozivanjem komande lxc --help ili pomoću čarobnjaka za inicijalizaciju lxd init odgovarajući na nekoliko pitanja.

Odabir sistema datoteka za spremište ^

Tokom inicijalizacije, LXD postavlja nekoliko pitanja, uključujući određivanje tipa sistema datoteka za podrazumevani skladišni bazen. Podrazumevano, za njega je izabran sistem datoteka BTRFS. Biće nemoguće promijeniti na drugi FS nakon kreiranja. Predlaže se da odaberete FS tabela za poređenje karakteristika:

svojstvo
imenik
Btrfs
LVM
ZFS
CEPH

Optimizirano skladištenje slika
Ne.
da
da
da
da

Optimizirano kreiranje instance
Ne.
da
da
da
da

Optimizirano kreiranje snimka
Ne.
da
da
da
da

Optimiziran prijenos slike
Ne.
da
Ne.
da
da

Optimiziran prijenos instance
Ne.
da
Ne.
da
da

Kopiraj na pisanje
Ne.
da
da
da
da

Blok baziran
Ne.
Ne.
da
Ne.
da

Trenutno kloniranje
Ne.
da
da
da
da

Drajver za skladištenje koji se može koristiti unutar kontejnera
da
da
Ne.
Ne.
Ne.

Vraćanje sa starijih snimaka (ne najnovijih)
da
da
da
Ne.
da

Kvote za skladištenje
da(*)
da
da
da
Ne.

Inicijalizacija mreže i Storage Pool-a pomoću čarobnjaka ^

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

Pokreni naredbu lxc init i unesite odgovore na pitanja nakon dvotočke kao što je prikazano u primjeru ispod ili ih promijenite u skladu sa 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]: 

Kreiranje dodatnog skladišnog spremišta ^

U prethodnom koraku smo kreirali skladišni bazen kojoj je dato ime ssdpool i čija se datoteka nalazi na mom sistemu na adresi /var/lib/lxd/disks/ssdpool.img. Ova adresa sistema datoteka odgovara fizičkom SSD disku na mom računaru.

Sljedeće akcije, kako bi se proširilo razumijevanje uloge koju igra skladišni bazen u spremištu, kreiraćemo drugi skladišni bazen koji će se fizički nalaziti na drugom tipu diska, HDD-u. Problem je što vam LXD ne dozvoljava da kreirate skladišni bazen van adrese /var/lib/lxd/disks/ a čak ni simbolične veze neće raditi, pogledajte odgovor programera. Možemo zaobići ovo ograničenje tokom inicijalizacije/formatiranja skladišni bazen specificiranjem vrijednosti kao blok uređaja umjesto putanje do datoteke povratne petlje specificirajući ovo u ključu source.

Dakle, prije stvaranja skladišni bazen trebate definirati datoteku povratne petlje ili postojeću particiju na vašem sistemu datoteka koju će koristiti. Da bismo to učinili, kreirat ćemo i koristiti datoteku koju ćemo 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 loopback fajl sa besplatnim loopback uređajem:

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

/dev/loop1

Hvala ključu --show izvršenje naredbe vraća na ekran ime uređaja na koji je povezan naš loopback fajl. Ako je potrebno, možemo prikazati listu 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

Sa liste možete pronaći da uređaj ima /dev/loop1 loopback fajl uključen /mnt/work/lxd/hddpool.img, i u uređaju /dev/loop0 loopback fajl uključen /var/lib/lxd/disks/ssdpool.img što odgovara zadanom skladišni bazen.

Sljedeća komanda kreira novu skladišni bazen u LXD-u na osnovu loopback fajla koji smo upravo pripremili. LXD će formatirati datoteku povratne petlje /mnt/work/lxd/hddpool.img u uređaju /dev/loop1 za BTRFS sistem datoteka:

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

Hajde da prikažemo listu svih skladišni bazen 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 skladišnog spremišta ^

Nakon stvaranja skladišni bazen, ako je potrebno, može se proširiti. Za skladišni bazen na osnovu BTRFS sistema datoteka, 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 loopback datoteke u slot uređaja za povratnu petlju ^

Imamo jedan mali problem, kada restartujemo host sistem, fajl /mnt/work/lxd/hddpool.img će "izletjeti" iz uređaja /dev/loop1 i LXD servis će se srušiti prilikom učitavanja jer ga neće vidjeti na ovom uređaju. Da biste riješili ovaj problem potrebno je da kreirate sistemski servis koji će umetnuti ovu datoteku u uređaj /dev/loop1 kada se host sistem pokrene.

Kreirajmo jedinica tip datoteke usluga в /etc/systemd/system/ za sistem 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 host sistema, 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 provjeriti da je servisno stanje aktivan, uprkos činjenici da je izvršenje naše skripte iz jedne komande završeno, opcija nam je omogućila da to uradimo RemainAfterExit=true.

Sigurnost. Privilegije kontejnera ^

Budući da se svi procesi kontejnera zapravo izvode izolovano na host sistemu koristeći njegovo jezgro, da bi dodatno zaštitio pristup kontejnerskih procesa host sistemu, LXD nudi privilegiju procesa, gde:

  • Privilegirani kontejneri - ovo su kontejneri u kojima procesi sa UID-om i GID-om odgovaraju istom vlasniku kao na host sistemu. Na primjer, proces koji se izvodi u kontejneru s UID-om 0 ima sva prava pristupa kao proces na host sistemu sa UID-om 0. Drugim riječima, root korisnik u kontejneru ima sva prava ne samo u kontejneru, ali i na host sistemu ako može izaći izvan izolovanog imenskog prostora kontejnera.

  • Neprivilegirani kontejneri - ovo su kontejneri u kojima procesi pripadaju vlasniku UID-a i GID-a sa brojem od 0 do 65535, ali je za host sistem vlasnik maskiran dodavanjem SubUID i SubGID bitova, respektivno. Na primjer, korisnik sa UID=0 u kontejneru će se na host sistemu vidjeti kao SubUID + UID. Ovo štiti host sistem jer ako bilo koji proces u kontejneru može da pobegne iz svog izolovanog imenskog prostora, on može komunicirati sa host sistemom samo kao proces sa nepoznatim, veoma visokim UID/GID.

Po defaultu, novokreirani kontejneri imaju neprivilegirani status i stoga moramo definirati SubUID i SubGID.

Kreirajmo dvije konfiguracijske datoteke u kojima ćemo postaviti masku za SubUID i SubGID, respektivno:

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

Da biste primijenili promjene, LXD servis se mora ponovo pokrenuti:

sudo systemctl restart lxd

Kreiranje virtuelnog mrežnog prekidača ^

Pošto smo prethodno inicijalizirali mrežu pomoću čarobnjaka za inicijalizaciju lxd init i kreirao mrežni uređaj lxdbr0, onda ćemo se u ovom odeljku jednostavno upoznati sa umrežavanjem u LXD-u i kako da kreirate virtuelni prekidač (most) koristeći naredbu klijenta.

Sljedeći dijagram pokazuje kako prekidač (most) povezuje host i kontejnere u mrežu:

Osnovne karakteristike LXD - Linux kontejnerskih sistema

Kontejneri mogu komunicirati putem mreže s drugim kontejnerima ili hostom na kojem se ti kontejneri poslužuju. Da biste to učinili, trebate povezati virtualne mrežne kartice kontejnera s virtualnim prekidačem. Prvo ćemo kreirati prekidač, a mrežna sučelja kontejnera će biti povezana u narednim poglavljima, nakon što se sam kontejner kreira.

Sljedeća naredba kreira prekidač sa podmrežom 10.0.5.0/24 i IPv4 adresu 10.0.5.1/24, a također uključuje ipv4.nat tako da kontejneri mogu pristupiti Internetu preko hosta koristeći NAT uslugu:

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

Provjera liste 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 da li je mrežni uređaj kreiran pomoću standardnog alata Linux distribucije - 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 kontejner u LXD-u ima svoju konfiguraciju i može je proširiti globalno deklarisanim konfiguracijama tzv konfiguracijski profili. Primjena konfiguracijskih profila na kontejner ima kaskadni model, sljedeći primjer to pokazuje:

Osnovne karakteristike LXD - Linux kontejnerskih sistema

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

Da vidite listu dostupnih konfiguracijskih profila, koristite sljedeću naredbu:

lxc profile list

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

Kompletnu listu dostupnih komandi za rad sa profilom možete 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 ^

Podrazumevani profil konfiguracije default nema konfiguraciju mrežne kartice za kontejner i svi novonastali kontejneri nemaju mrežu, za njih je potrebno posebnom naredbom kreirati lokalne (namjenske) mrežne uređaje, ali možemo kreirati globalni mrežni uređaj u konfiguraciji profil koji će se dijeliti između svih kontejnera koji koriste ovaj profil. Na ovaj način, odmah nakon naredbe za kreiranje novog kontejnera, oni će imati mrežu sa pristupom mreži. U isto vrijeme, nema ograničenja, uvijek možemo kreirati lokalni mrežni uređaj kasnije ako je potrebno.

Sljedeća naredba će dodati uređaj u konfiguracijski profil eth0 tip nic povezan na mrežu lxdbr0:

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

Važno je napomenuti da pošto smo zapravo dodali uređaj u konfiguracioni profil, ako smo naveli statičku IP adresu u uređaju, onda će svi kontejneri koji će koristiti ovaj profil dijeliti istu IP adresu. Ako postoji potreba za kreiranjem kontejnera sa statičkom IP adresom dodijeljenom kontejneru, tada biste trebali kreirati konfiguraciju mrežnog uređaja na razini kontejnera (lokalna konfiguracija) s parametrom IP adrese, a ne na razini profila.

Pogledajmo 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 vidimo da će za sve novokreirane kontejnere 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

Kreiranje novih profila ^

Za korištenje prethodno kreiranih skladišni bazen kontejnere, kreirajte konfiguracijski profil ssdroot u koji ćemo dodati uređaj poput disk sa tačkom montiranja / (root) pomoću prethodno kreiranog skladišni bazen - ssdpool:

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

Slično, kreiramo uređaj kao što je disk, ali u ovom slučaju koristeći skladišni bazen - 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 ^

Kontejneri se kreiraju od slika koje su posebno sastavljene distribucije koje nemaju Linux kernel. Stoga, prije pokretanja kontejnera, on mora biti raspoređen sa ove slike. Izvor slika je lokalno spremište u koje se slike preuzimaju iz vanjskih spremišta.

Udaljena spremišta slika ^

Podrazumevano, LXD je konfigurisan da prima slike sa tri udaljena izvora:

  • ubuntu: (za stabilne Ubuntu slike)
  • ubuntu-dnevno: (za dnevne Ubuntu slike)
  • slike: (za gomilu 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 kolona koristili smo opciju -c sa parametrima dasut, a također je ograničio dužinu liste pomoću naredbe head.

Filtriranje je dostupno za prikaz liste slika. Sljedeća komanda će ispisati sve dostupne arhitekture distribucije 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 kontejner, morate dodati sliku iz globalnog spremišta u lokalno local:. Sada je lokalno spremište prazno, komanda će se pobrinuti za to lxc image list. Ako je metoda list nemojte specificirati spremište, tada će se lokalno spremište koristiti po defaultu - local:

lxc image list local:

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

Slikama u spremištu se upravlja pomoću sljedećih metoda:

tim
Opis

lxc slika pseudonim
Upravljajte pseudonima slika

lxc slika kopiraj
Kopirajte slike između servera

lxc slika izbrisati
Izbrišite slike

lxc slika edit
Uredite svojstva slike

lxc slika izvoz
Izvezite i preuzmite slike

lxc slika uvoz
Uvezite slike u skladište slika

lxc slika info
Prikaži korisne informacije o slikama

lxc slika lista
Lista slika

lxc slika refresh
Osvježite slike

lxc slika pokazati
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!

Hajde da prikažemo listu svih slika koje su trenutno dostupne u lokalnom spremištu local::

lxc image -c lfdatsu list local:

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

LXD konfiguracija ^

Osim interaktivnog načina rada, LXD također podržava neinteraktivni način instalacije konfiguracije, to je kada je konfiguracija specificirana u obliku YAML datoteke, posebnog formata koji vam omogućava da instalirate cijelu konfiguraciju odjednom, zaobilazeći izvršenje od mnogih interaktivnih naredbi o kojima se raspravljalo gore u ovom članku, uključujući konfiguraciju mreže, kreiranje konfiguracijskih profila itd. Ovdje nećemo pokrivati ​​ovo područje, možete ga sami provjeriti. u dokumentaciji.

Sljedeća interaktivna komanda lxc config koji ćemo pogledati omogućava vam da postavite konfiguraciju. Na primjer, kako bismo osigurali da preuzete slike u lokalno spremište ne budu automatski ažurirane iz globalnih spremišta, možemo omogućiti ovo ponašanje sljedećom naredbom:

lxc config set images.auto_update_cached=false

Kreiranje i upravljanje kontejnerom ^

Za kreiranje kontejnera koristite naredbu lxc init na koje se prosleđuju vrednosti репозиторий:образ a zatim željeni ID za kontejner. Spremište se može specificirati kao lokalno local: kao i bilo koja globalna. Ako spremište nije navedeno, tada se po defaultu lokalno spremište koristi za traženje slike. Ako je slika navedena iz globalnog spremišta, tada će slika prvo biti preuzeta u lokalno spremište, a zatim će se koristiti za kreiranje kontejnera.

Pokrenimo sljedeću naredbu da kreiramo naš prvi kontejner:

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

Pogledajmo redom komandne tipke koje ovdje koristimo:

  • alpine3 — Naveden je pseudonim (alias) za sliku koja je prethodno otpremljena u lokalno spremište. Ako pseudonim nije kreiran za ovu sliku, uvijek se možete pozvati na sliku po njoj otisak prsta koji je prikazan u tabeli.
  • alp — Postavlja identifikator za kontejner
  • --storage — Ovaj taster označava u kom skladišni bazen kontejner će biti kreiran
  • --profile — Ovi ključevi kaskadno primjenjuju konfiguraciju iz prethodno kreiranih konfiguracijskih profila na kontejner

Pokrećemo kontejner koji počinje pokretati init sistem distribucije:

lxc start alp

Također možete koristiti naredbu lxc launch što vam omogućava da kombinujete timove lxc init и lxc start u jednoj operaciji.

Provjera stanja kontejnera:

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

Provjera konfiguracije kontejnera:

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 sekciji profiles možemo osigurati da ovaj kontejner koristi dva konfiguracijska profila − default и hddroot. U sekciji devices možemo otkriti samo jedan uređaj jer je mrežni uređaj kreiran na nivou profila default. Da biste vidjeli sve uređaje koje koristi kontejner potrebno je 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 za konfiguraciju kontejnera, tada ćemo dobiti greš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 će biti isti za sve kontejnere koji će koristiti ovaj profil. Stoga, dodajmo uređaj posvećen kontejneru:

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

Zatim morate ponovo pokrenuti kontejner:

lxc restart alp

Ako sada pogledamo konfiguraciju kontejnera, ne moramo koristiti opciju --expanded da vidite mrežni uređaj eth0, pošto smo ga kreirali na nivou kontejnera i kaskadno je prešao 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 kontejnera ^

Da biste uklonili kontejner, koristite naredbu lxc delete, ali prije uklanjanja kontejnera, mora se 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 provjerili da je stanje kontejnera postalo STOPPED, može se ukloniti iz skladišni bazen:

lxc delete alp

Pristup kontejneru ^

Da biste izvršili komande u kontejneru direktno, zaobilazeći mrežne veze, koristite naredbu lxc exec koji izvršava komande u kontejneru bez pokretanja sistemske ljuske. Ako trebate izvršiti naredbu u ljusci koristeći shell obrasce kao što su varijable, preusmjeravanja datoteka (pipe), itd., tada morate eksplicitno pokrenuti shell i proslijediti naredbu kao ključ, na primjer:

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

Komanda je koristila poseban escape karakter za poseban karakter $ tako da varijabla $HOME nije interpretiran na glavnoj mašini, već je interpretiran samo unutar kontejnera.

Također je moguće pokrenuti interaktivni shell mod, a zatim prekinuti sesiju izvršavanjem prečice CTRL+D:

lxc exec alp -- /bin/sh

Upravljanje resursima kontejnera ^

U LXD-u možete upravljati resursima kontejnera koristeći poseban skup konfiguracija. Potpunu listu konfiguracijskih parametara kontejnera možete pronaći u dokumentaciji.

Ograničenje RAM resursa ^

Parametar limits.memory ograničava količinu RAM-a dostupnog kontejneru. Vrijednost je broj i jedan od dostupnim sufiksima.

Postavimo ograničenje RAM-a kontejnera 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

tim lxc config show omogućava vam da prikažete cijelu konfiguraciju kontejnera, 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 da ograničite CPU resurse. vrste ograničenja:

  • limit.cpu - veže kontejner za jednu ili više CPU jezgri
  • limits.cpu.allowance - upravlja ili kvotama CFS planera kada prođe vremensko ograničenje, ili univerzalnim mehanizmom dijeljenja CPU resursa kada je postotak prošao
  • limits.cpu.priority - prioritet planera kada je više instanci 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 ^

Pored ograničenja kao što su limits.read, limits.write također možemo ograničiti količinu prostora na disku koju koristi kontejner (radi samo sa ZFS ili BTRFS):

lxc config device set alp root size=2GB

Nakon instalacije, u parametru devices.root.size Možemo provjeriti postavljeno ograničenje:

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

Uprkos činjenici da smo postavili ograničenje za root uređaj kontejnera na 2GB, sistemski uslužni programi kao npr. 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 kontejnera u istom skladišni bazen (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 kontejnera:

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

Uvjerimo se da je fajl kreiran:

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

Ako pogledamo u drugi kontejner, provjerimo postojanje datoteke na istoj lokaciji, tada ove datoteke neće biti, što je i očekivano, budući da se kontejneri kreiraju sami Volumen skladišta u istom skladišni bazen:

lxc exec alp2 -- ls -lh
total 0

Ali uporedimo vrijednosti koje proizvodi df na jednom i drugom kontejneru:

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 što je root particija skladišni bazen koje ovi kontejneri koriste, tako da dijele njegovu zapreminu između dva.

Statistika potrošnje resursa ^

Možete pogledati statistiku potrošnje resursa za kontejner koristeći naredbu:

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 snimcima ^

LXD ima mogućnost kreiranja snimaka i vraćanja stanja kontejnera iz njih.

Da kreirate snimak, pokrenite sljedeću naredbu:

lxc snapshot alp snapshot1

Tim lxc snapshot nije dostupan ključ list, dakle, za pregled liste snimaka morate koristiti naredbu koja prikazuje opće informacije o kontejneru:

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

Kontejner možete vratiti iz snimka pomoću naredbe lxc restore navodeći kontejner za koji će se izvršiti restauracija i alias snimke:

lxc restore alp snapshot1

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

lxc delete alp/snapshot1

U gornjem primjeru, pogledali smo takozvane snimke bez stanja. LXD ima još jednu vrstu snimaka - stanja, koja čuva trenutno stanje svih procesa u kontejneru. Postoji niz zanimljivih i korisnih funkcija povezanih sa snimcima stanja.

Šta još? ^

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

AŽURIRANJE 10.04.2020/15/00 XNUMX:XNUMX: Dodata navigacija

izvor: www.habr.com

Dodajte komentar