GrundlĂ€ggande funktioner i LXD — containersystem i Linux

GrundlĂ€ggande funktioner i LXD — containersystem i Linux

LXD — Ă€r en systemhanterare för containrar av nĂ€sta generation, sĂ„ stĂ„r det ClickHouse-Ninja/Proton. Den erbjuder ett anvĂ€ndargrĂ€nssnitt som liknar virtuella maskiner, men anvĂ€nder istĂ€llet Linux-containrar.

KĂ€rnan LXD — Ă€r en privilegierad demon (tjĂ€nst som körs med root-rĂ€ttigheter) som tillhandahĂ„ller ett REST API via en lokal unix-socket, samt över nĂ€tverket om rĂ€tt konfiguration Ă€r installerad. Klienter, sĂ„som kommandoradsverktyget som levereras med LXD, skickar förfrĂ„gningar via detta REST API. Det betyder att oavsett om du kontaktar den lokala vĂ€rden eller en fjĂ€rransluten, fungerar allting likadant.

I den hĂ€r artikeln kommer vi inte att gĂ„ in pĂ„ koncepten LXD i detalj, vi kommer inte att diskutera alla tillgĂ€ngliga möjligheter som beskrivs i dokumentationen, inklusive den senaste implementeringen i de senaste versionerna av LXD med stöd för virtuella maskiner QEMU parallellt med containrar. IstĂ€llet kommer vi att lĂ€ra oss om de grundlĂ€ggande administrationsfunktionerna för containrar — vi ska konfigurera lagringspooler, nĂ€tverk, starta en container, tillĂ€mpa resursgrĂ€nser och titta pĂ„ hur man anvĂ€nder snapshots, sĂ„ att du fĂ„r en grundlĂ€ggande förstĂ„else för LXD och hur man anvĂ€nder containrar i Linux.

För att fÄ fullstÀndig information ska du hÀnvisa till den officiella kÀllan:

Navigation

Installation av LXD ^

Installation av LXD i Ubuntu-distributioner ^

I Ubuntu-distributionen 19.10 har paketet lxd en översÀttning till snap-paket:

apt search lxd

lxd/eoan 1:0.7 all
  ÖvergĂ„ngspaket - lxd -> snap (lxd)

Det betyder att tvÄ paket kommer att installeras samtidigt, ett systempaket och ett annat som snap-paket. Installation av tvÄ paket i systemet kan skapa ett problem dÀr systempaketet kan bli ett förÀldralöst paket om snap-paketet tas bort av snap-paketshanteraren.

Hitta paket lxd i snap-repositoriet kan göras med följande kommando:

snap find lxd

Namn             Version        Sammanfattning
lxd              3.21           Systemcontainerhanterare och API
lxd-demo-server  0+git.6d54658  Online mjukvarudemo-sessioner med LXD
nova             ocata          OpenStack Compute Service (nova)
nova-hypervisor  ocata          OpenStack Compute Service - KVM Hypervisor (nova)
distrobuilder    1.0            Imagebyggare för LXC och LXD
fabrica          0.1            Bygg snap-paket genom att helt enkelt peka ett formulÀr till...
satellite        0.1.2          Avancerad skalbar öppen kÀllkod intelligensplattform

Genom att köra kommandot list kan man försÀkra sig om att paketet lxd inte Àr installerat Àn:

snap list

Namn  Version    Rev   SpÄrning  Utgivare   Noter
core  16-2.43.3  8689  stabil    canonical✓  core

Trots att LXD Àr ett snap-paket, mÄste det installeras via ett systempaket lxd, som kommer att skapa en motsvarande grupp i systemet, nödvÀndiga verktyg i /usr/bin och sÄ vidare.

sudo apt update
sudo apt install lxd

LÄt oss se till att paketet Àr installerat som ett snap-paket:

snap list

Namn  Version    Rev    SpÄrning  Utgivare   Noter
core  16-2.43.3  8689   stabil    canonical✓  core
lxd   3.21       13474  stabil/
  canonical✓  -

Installation av LXD i Arch Linux-distributioner ^

För att installera LXD-paketet i systemet mĂ„ste följande kommandon köras, det första — uppdaterar listan över tillgĂ€ngliga paket i systemets repository, det andra — installerar paketet direkt:

sudo pacman -Syyu && sudo pacman -S lxd

Efter installationen av paketet, för att hantera LXD som en vanlig anvÀndare, mÄste han lÀggas till i systemgruppen lxd:

sudo usermod -a -G lxd user1

LÄt oss se till att anvÀndaren user1 har lagts till i gruppen lxd:

id -Gn user1

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

Om gruppen lxd inte syns i listan, behöver man aktivera anvÀndarsessionen igen. För detta mÄste man logga ut och logga in i systemet med samma anvÀndare.

Aktivera systemd LXD-tjÀnsten att starta vid systemstart:

sudo systemctl enable lxd

Startar tjÀnsten:

sudo systemctl start lxd

Kontrollerar tjÀnstens status:

sudo systemctl status lxd

Lagring LXD (Storage) ^

Innan initieringen mÄste vi förstÄ hur lagringen i LXD Àr logiskt strukturerad.

Lagring (Storage) bestÄr bestÄr av en eller flera Storage Pool som anvÀnder ett av de stödda filsystemen som ZFS, BTRFS, LVM eller vanliga kataloger. Varje Storage Pool delas upp i volymer (Storage Volume) som innehÄller bilder, containrar eller data för andra ÀndamÄl.

  • Avbilder — Ă€r specialt sammanstĂ€llda distributioner utan Linux-kĂ€rna och tillgĂ€ngliga frĂ„n externa kĂ€llor
  • Containrar — Ă€r distribuerade distributioner frĂ„n avbilder som Ă€r klara för drift
  • Snapshots — Ă€r tillstĂ„ndsbilder av containrar som man kan Ă„tergĂ„ till

GrundlĂ€ggande funktioner i LXD — containersystem i Linux

För att hantera lagring i LXD anvĂ€nds kommandot lxc storage varifrĂ„n man kan fĂ„ hjĂ€lp genom att ange nyckeln — lxc storage --help

Följande kommando visar en lista över alla Storage Pool i LXD-lagring:

lxc storage list

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

För att se listan över alla Storage Volume i det valda Storage Pool anvÀnds kommandot 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       |
+-----------+----------------------------------+-------------+---------+

Dessutom, om för Storage Pool en filsystem BTRFS valdes vid skapandet, kan man fÄ en lista över Storage Volume eller subvolymer i BTRFS-tolkning med hjÀlp av verktygen för detta filsystem:

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

Initialisering av LXD ^

Innan containrar skapas och anvÀnds, Àr det nödvÀndigt att utföra den grundlÀggande initieringen av LXD som skapar och konfigurerar nÀtverket samt lagringen. Detta kan göras manuellt med hjÀlp av grundlÀggande klientkommandon som finns i listan genom att anropa kommandot lxc --help eller med hjÀlp av installationsguiden lxd init genom att svara pÄ nÄgra frÄgor.

Val av filsystem för lagringspool ^

Under LXD initialization, several questions are asked, including the type of file system for the default configuration. Storage PoolBy default, the BTRFS file system is selected for it. It will not be possible to change to another file system after creation.The following file systems are offered for selection: a comparison table of capabilities:

Funktion
Directory
Btrfs
LVM
ZFS
CEPH

Optimerad bildlagring
nej
ja
ja
ja
ja

Optimerad instanskapande
nej
ja
ja
ja
ja

Optimerad snapshotskapande
nej
ja
ja
ja
ja

Optimerad bildöverföring
nej
ja
nej
ja
ja

Optimerad instansöverföring
nej
ja
nej
ja
ja

Copy on write
nej
ja
ja
ja
ja

Blockbaserad
nej
nej
ja
nej
ja

Ögonblicklig kloning
nej
ja
ja
ja
ja

Lagringsdrivrutin anvÀndbar inom en behÄllare
ja
ja
nej
nej
nej

ÅterstĂ€ll frĂ„n Ă€ldre snapshots (inte senaste)
ja
ja
ja
nej
ja

Lagringskvoter
ja(*)
ja
ja
ja
nej

Initialisering av nÀtverk och lagringspool med hjÀlp av guiden ^

Den nÀsta kommandon vi kommer att titta pÄ erbjuder att konfigurera huvudkomponenterna i LXD genom svar pÄ enkla frÄgor med hjÀlp av en initieringsguid.

Kör kommandot lxc init och ange svaren pÄ frÄgorna efter kolon som visas i exemplet nedan eller Àndra dem enligt dina omstÀndigheter:

lxd init

Vill du anvÀnda LXD-klustering? (ja/nej) [standard=nej]: 
Vill du konfigurera en ny lagringspool? (ja/nej) [standard=ja]: 
Namn pÄ den nya lagringspoolen [standard=default]: ssdpool         
Namn pÄ lagringsbackend att anvÀnda (lvm, btrfs, dir) [standard=btrfs]: 
Vill du skapa en ny BTRFS-pool? (ja/nej) [standard=ja]: 
Vill du anvÀnda en befintlig blockenhet? (ja/nej) [standard=nej]: 
Storlek i GB pÄ den nya loop-enheten (minst 1GB) [standard=15GB]: 10GB
Vill du ansluta till en MAAS-server? (ja/nej) [standard=nej]: 
Vill du skapa en ny lokal nÀtverksbro? (ja/nej) [standard=ja]: 
Vad ska den nya bron kallas? [standard=lxdbr0]: 
Vilken IPv4-adress ska anvĂ€ndas? (CIDR-subnĂ€tnotation, “auto” eller “none”) [standard=auto]: 10.0.5.1/24
Vill du att LXD ska NAT IPv4-trafik pÄ din bro? [standard=ja]: 
Vilken IPv6-adress ska anvĂ€ndas? (CIDR-subnĂ€tnotation, “auto” eller “none”) [standard=auto]: ingen
Vill du att LXD ska vara tillgÀngligt över nÀtverket? (ja/nej) [standard=nej]: 
Vill du att förÄldrade cachelagrade bilder ska uppdateras automatiskt? (ja/nej) [standard=ja] nej
Vill du att en YAML "lxd init" preseed ska skrivas ut? (ja/nej) [standard=nej]: 

Skapa en ytterligare lagringspool ^

I det föregÄende steget skapade vi Storage Pool som vi gav namnet ssdpool och vars fil ligger pÄ min dator pÄ adressen /var/lib/lxd/disks/ssdpool.img. Denna filsystemadress motsvarar den fysiska SSD-disken i min dator.

De följande ÄtgÀrderna, för att utöka förstÄelsen av vilken roll Storage Pool spelar i lagringen, kommer vi att skapa en andra Storage Pool som kommer att ligga fysiskt pÄ en annan typ av disk, pÄ HDD. Problemet Àr att LXD inte tillÄter skapelse Storage Pool utanför adressen /var/lib/lxd/disks/ och inte ens symboliska lÀnkar kommer att fungera, se utvecklarens svar. Vi kan kringgÄ denna begrÀnsning vid initiering/formatering Storage Pool genom att ange vÀrdet som en blockenhet istÀllet för en sökvÀg till en loopback-fil genom att ange detta i nyckeln source.

SÄ, före skapandet Storage Pool Du mÄste ange en loopback-fil eller en befintlig partition i ditt filsystem som den kommer att anvÀnda. För detta ska vi skapa och anvÀnda en fil som begrÀnsas till 10 GB:

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

10000+0 poster in
10000+0 poster ut
10000000000 byte (10 GB, 9,3 GiB) kopierat, 38,4414 s, 260 MB/s

Vi kopplar loopback-filen till en ledig loopback-enhet:

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

/dev/loop1

Tack vare nyckeln --show returnerar kommandots utförande namnet pÄ enheten som vÄr loopback-fil har kopplats till. Vid behov kan vi visa en lista över alla upptagna enheter av detta slag, för att sÀkerstÀlla att vÄra ÄtgÀrder var korrekta:

losetup -l

NAMN        STORLEK BEGRÄNSNING OFFSET AUTOCLEAR RO BACK-FIL                      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

FrÄn listan kan man upptÀcka att enheten /dev/loop1 har en loopback-fil kopplad /mnt/work/lxd/hddpool.img, och enheten /dev/loop0 har en loopback-fil kopplad /var/lib/lxd/disks/ssdpool.img som motsvarar standard Storage Pool.

NÀsta kommando skapar en ny Storage Pool i LXD baserat pÄ den just förberedda loopback-filen. LXD kommer att formatera loopback-filen /mnt/work/lxd/hddpool.img i enheten /dev/loop1 till BTRFS-filsystemet:

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

Vi listar alla Storage Pool pÄ skÀrmen:

lxc storage list

+---------+-------------+--------+--------------------------------+---------+
|  NAMN  | BESKRIVNING | DRIVARE |             KÄLLA              | ANVÄND AV |
+---------+-------------+--------+--------------------------------+---------+
| hddpool |             | btrfs  | /dev/loop1                     | 0       |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool |             | btrfs  | /var/lib/lxd/disks/ssdpool.img | 0       |
+---------+-------------+--------+--------------------------------+---------+

Öka storleken pĂ„ lagringspoolen ^

Efter skapandet Storage Pool, om nödvÀndigt kan den utökas. För Storage Pool baserat pÄ BTRFS-filsystemet, kör följande kommandon:

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

Autointegrering av loopback-filen i loopback-enhetsslot ^

Vi har ett litet problem, vid omstart av vÀrdsystemet kommer filen /mnt/work/lxd/hddpool.img "att "flyga ut" ur enheten /dev/loop1 och LXD-tjÀnsten kommer att krascha vid uppstart eftersom den inte ser den i denna enhet. För att lösa detta problem mÄste vi skapa en systemtjÀnst som kommer att montera denna fil i enheten /dev/loop1 vid uppstart av vÀrdsystemet.

Vi skapar -tester i projektet, samt i relation till filer. fil av typen service pÄ /etc/systemd/system/ för systeminitiering 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

Vi aktiverar tjÀnsten:

sudo systemctl enable lxd-hddpool

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

Efter omstart av vÀrdsystemet kontrollerar vi statusen för tjÀnsten:

systemctl status lxd-hddpool.service 

● lxd-hddpool.service - Losetup LXD Lagringspool (hddpool)
     Laddad: laddad (/etc/systemd/system/lxd-hddpool.service; aktiverad; leverantörens förinstÀllning: inaktiverad)
     Aktiv: aktiv (utgÄngen) sedan ons 2020-04-08 03:43:53 MSK; 1min 37s sedan
    Process: 711 ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img (kod=utgÄngen, status=0/SUCCES)
   Huvud-PID: 711 (kod=utgÄngen, status=0/SUCCES)

apr 08 03:43:52 manjaro systemd[1]: Startar Losetup LXD Lagringspool (hddpool)...
apr 08 03:43:53 manjaro systemd[1]: Klarade Losetup LXD Lagringspool (hddpool).

FrÄn utskriften kan vi bekrÀfta att tjÀnstens tillstÄnd Àr active, trots att körningen av vÄrt skript frÄn en enda kommando avslutades, detta möjliggjordes av alternativet RemainAfterExit=true.

SÀkerhet. Behörigheter för containrar ^

Eftersom alla processer i containern faktiskt körs isolerat pÄ vÀrdsystemet med hjÀlp av dess kÀrna, erbjuder LXD en privilegium för containerns processer för att ytterligare skydda Ätkomsten till vÀrdsystemet, dÀr:

  • Privilegierade containrar — Ă€r containrar dĂ€r processerna har UID och GID som motsvarar samma Ă€gare som pĂ„ vĂ€rdsystemet. Till exempel, en process som körs i en container med UID lika med 0 har alla samma Ă„tkomstrĂ€ttigheter som processen pĂ„ vĂ€rdsystemet med UID lika med 0. Med andra ord har root-anvĂ€ndaren i containern alla rĂ€ttigheter inte bara i containern utan ocksĂ„ pĂ„ vĂ€rdsystemet om han kan gĂ„ utanför den isolerade namnomrĂ„det.

  • Icke-privilegierade containrar — Ă€r containrar dĂ€r processerna tillhör Ă€garen med UID och GID mellan 0 och 65535, men för vĂ€rdsystemet maskeras Ă€garen med hjĂ€lp av den tillagda SubUID- och SubGID-biten. Till exempel, en anvĂ€ndare med UID=0 i containern kommer att betraktas pĂ„ vĂ€rdsystemet som SubUID + UID. Detta skyddar vĂ€rdsystemet, eftersom om nĂ„gon process i containern lyckas gĂ„ ut ur sitt isolerade namnomrĂ„de kan den interagera med vĂ€rdsystemet endast som en process med en okĂ€nd, mycket hög UID/GID.

Som standard har nyligen skapade containrar status som icke-privilegierade och dÀrför mÄste vi definiera SubUID och SubGID.

Vi skapar tvÄ konfigurationsfiler dÀr vi stÀller in masken för SubUID och SubGID respektive:

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

För att tillÀmpa Àndringarna mÄste LXD-tjÀnsten startas om:

sudo systemctl restart lxd

Skapa en virtuell nÀtverksbrygga ^

Eftersom vi tidigare har initierat nÀtverket med hjÀlp av guiden för initiering lxd init och skapat en nÀtverksenhet lxdbr0, sÄ kommer vi i detta avsnitt bara att bekanta oss med nÀtverket i LXD och hur man skapar en virtuell switch (nÀtverksbro) med hjÀlp av klientkommandot.

Den följande schemat visar hur switchen (nÀtverksbron) kopplar ihop vÀrden och containrar i nÀtverket:

GrundlĂ€ggande funktioner i LXD — containersystem i Linux

Containrar kan interagera via nÀtverket med andra containrar eller vÀrden som dessa containrar körs pÄ. För detta behöver vi lÀnka de virtuella nÀtverksgrÀnssnitten i containrarna med den virtuella switchen. Först kommer vi att skapa switchen, och nÀtverksgrÀnssnitten för containern kommer att lÀnkas i senare kapitel, efter att containern har skapats.

Det följande kommandot skapar en switch med ett undermedverkan 10.0.5.0/24 och en IPv4-adress 10.0.5.1/24, samt aktiverar ipv4.nat sÄ att containrarna kan fÄ internet genom vÀrden med hjÀlp av NAT-tjÀnsten:

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

Kontrollera listan över nÀtverksenheter som Àr tillgÀngliga för LXD:

lxc network list

+--------+----------+---------+-------------+---------+
|  NAMN  |   TYP    | HANDBOK | BESKRIVNING  | ANVÄNDS AV |
+--------+----------+---------+-------------+---------+
| eno1   | fysisk   | NEJ     |             | 0       |
+--------+----------+---------+-------------+---------+
| lxdbr0 | bro      | JA      |             | 0       |
+--------+----------+---------+-------------+---------+

Du kan ocksĂ„ verifiera skapandet av nĂ€tverksenheten med hjĂ€lp av det inbyggda verktyget i Linux-distributionen — ip link eller ip addr:

ip addr

1: lo:  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:  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:  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:  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

Konfigurationsprofil ^

Varje container i LXD har sin egen konfiguration och kan utökas med hjÀlp av globalt deklarerade konfigurationer som kallas konfigurationsprofiler. TillÀmpningen av konfigurationsprofiler pÄ en behÄllare har en kaskadmodell, följande exempel visar detta:

GrundlĂ€ggande funktioner i LXD — containersystem i Linux

I det hÀr exemplet har tre profiler skapats i LXD-systemet: default, hddpool och hostfs. Alla tre profiler har tillÀmpats pÄ en behÄllare som har en lokal konfiguration (grÄ zon). Profilen default har en enhet root som har parametern pool Àr ssdpool, men tack vare den kaskadmodell för tillÀmpning av konfiguration kan vi tillÀmpa profilen för behÄllaren hddpool som har parametern pool överskrider denna samma parameter frÄn profilen default och behÄllaren fÄr enhetskonfigurationen root med parametern pool lika med hddpool, medan profilen hostfs bara lÀgger till en ny enhet i behÄllaren.

För att se listan över tillgÀngliga konfigurationsprofiler anvÀnds följande kommando:

lxc profile list

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

Den kompletta listan över tillgÀngliga kommandon för att arbeta med profiler kan fÄs genom att lÀgga till nyckeln --help:

lxc profile --help

Description:
  Hantera profiler

Usage:
  lxc profile [kommando]

Available Commands:
  add         LĂ€gg till profiler till instanser
  assign      Tilldela profiler till instanser
  copy        Kopiera profiler
  create      Skapa profiler
  delete      Ta bort profiler
  device      Hantera enhetsinstanser
  edit        Redigera profilkonfigurationer som YAML
  get         HÀmta vÀrden för profilkonfigurationsnycklar
  list        Lista profiler
  remove      Ta bort profiler frÄn instanser
  rename      Byt namn pÄ profiler
  set         StÀll in profilkonfigurationsnycklar
  show        Visa profilkonfigurationer
  unset       Avmarkera profilkonfigurationsnycklar

Redigera profil ^

Standardkonfigurationsprofilen default har ingen nÀtverkskortkonfiguration för behÄllaren, och alla nyss skapade behÄllare har ingen nÀtverksanslutning. För dem Àr det nödvÀndigt att skapa lokala (dedikerade) nÀtverksenheter med ett separat kommando, men vi kan skapa en global nÀtverksenhet i konfigurationsprofilen som delas mellan alla behÄllare som anvÀnder denna profil. PÄ sÄ sÀtt kommer de omedelbart efter skapandet av en ny behÄllare att ha nÀtverksanslutning. Det finns inga begrÀnsningar, vi kan alltid skapa en lokal nÀtverksenhet senare om det skulle vara nödvÀndigt.

NÀsta kommando kommer att lÀgga till en enhet i konfigurationsprofilen eth0 av typen nic ansluten till nÀtverket lxdbr0:

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

Det Àr viktigt att notera att eftersom vi faktiskt har lagt till en enhet i konfigurationsprofilen, om vi skulle ange en statisk IP-adress för enheten, skulle alla containrar som anvÀnder denna profil dela samma IP-adress. Om det Àr nödvÀndigt att skapa en container med en dedikerad statisk IP-adress, bör man istÀllet skapa en nÀtverkskonfigurationsprofil pÄ containernivÄ (lokal konfiguration) med IP-adressparametern, istÀllet för pÄ profilenivÄn.

LÄt oss kontrollera profilen:

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

I denna profil kan vi se att tvÄ enheter (devices) kommer att skapas för alla ny skapade containrar:

  • eth0 — Enhetstyp nic ansluten till en switch (nĂ€tverksbro) lxdbr0
  • root — Enhetstyp disk som anvĂ€nder lagringspoolen ssdpool

Skapa nya profiler ^

För att anvĂ€nda de tidigare skapade Storage Pool containrar, skapar vi en konfigurationsprofil ssdroot dĂ€r vi lĂ€gger till enhetstypen disk med monteringspunkt / (root) som anvĂ€nder den tidigare skapade Storage Pool — ssdpool:

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

PĂ„ samma sĂ€tt skapar vi en enhet av typen disk, men i detta fall anvĂ€nder Storage Pool — hddpool:

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

Vi kontrollerar konfigurationsprofiler:

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

Bildrepo ^

Containrar skapas frÄn bilder som Àr speciellt sammanstÀllda distributioner utan en Linux-kÀrna. DÀrför, innan en container kan startas, mÄste den distribueras frÄn denna bild. KÀllan till bilder Àr det lokala arkivet dÀr bilder laddas ner frÄn externa arkiv.

FjÀrrbildrepo ^

Som standard Àr LXD konfigurerat för att hÀmta bilder frÄn tre externa kÀllor:

  • ubuntu: (för stabila Ubuntu-bilder)
  • ubuntu-daily: (för dagliga Ubuntu-bilder)
  • images: (för en mĂ€ngd andra distributioner)

lxc remote list

+-----------------+------------------------------------------+--------+--------+
|      NAMN      |                   URL                    | OFFENTLIG | STATISK |
+-----------------+------------------------------------------+--------+--------+
| bilder          | https://images.linuxcontainers.org       | JA     | NEJ    |
+-----------------+------------------------------------------+--------+--------+
| lokal (standard) | unix://                                  | NEJ    | JA     |
+-----------------+------------------------------------------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | JA     | JA     |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily    | JA     | JA     |
+-----------------+------------------------------------------+--------+--------+

Till exempel har repot ubuntu: följande bilder:

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

+----------------------------------------------+--------------+----------+------------+
|                   BESKRIVNING                | ARCHITEKTUR  |   STORLEK |   TYP     |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150728)  | x86_64       | 153.72MB | BEHÅLLARE  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150819)  | x86_64       | 152.91MB | BEHÅLLARE  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150906)  | x86_64       | 154.69MB | BEHÅLLARE  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150930)  | x86_64       | 153.86MB | BEHÅLLARE  |
+----------------------------------------------+--------------+----------+------------+

För att visa ett begrÀnsat antal kolumner anvÀnde vi alternativet -c med parametrarna dasut, och begrÀnsade ocksÄ lÀngden pÄ listan med kommandot head.

För att visa listan över tillgÀngliga bilder kan filtrering anvÀndas. Följande kommando visar listan över alla tillgÀngliga distributioners arkitekturer AlpineLinux:

lxc image -c ldast list images:alpine/3.11

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

Lokalt bildrepo ^

För att börja anvĂ€nda containern mĂ„ste du lĂ€gga till en bild frĂ„n det globala arkivet till det lokala. lokal:. Just nu Ă€r det lokala arkivet tomt, vilket kommer att bekrĂ€ftas av kommandot lxc image list. Om metoden list inte anger ett arkiv kommer det lokala arkivet att anvĂ€ndas som standard — lokal:

lxc image list local:

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

Hantera bilder i arkivet görs med följande metoder:

Team
Beskrivning

lxc image alias
Hantera bildalias

lxc image copy
Kopiera bilder mellan servrar

lxc image ta bort
Ta bort bilder

lxc image edit
Redigera bildens egenskaper

lxc image export
Exportera och ladda ner bilder

lxc image import
Importera bilder till bildlagret

lxc image info
Visa anvÀndbar information om bilder

lxc image list
Lista bilder

lxc image refresh
Uppdatera bilder

lxc image visa
Visa bildens egenskaper

Kopiera bilden till det lokala arkivet frÄn det globala images::

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

Bild kopierad framgÄngsrikt!

Vi kommer att visa en lista över alla bilder som för nÀrvarande Àr tillgÀngliga i det lokala arkivet. lokal::

lxc image -c lfdatsu list local:

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

Konfiguration av LXD ^

Förutom interaktivt lÀge stöder LXD Àven icke-interaktiv installation av konfiguration, detta innebÀr att konfigurationen anges i form av en YAML-fil, ett specialformat som gör det möjligt att stÀlla in hela konfigurationen pÄ en gÄng, utan att behöva utföra flera interaktiva kommandon som har diskuterats ovan i denna artikel, inklusive nÀtverkskonfiguration, skapande av konfigurationsprofiler m.m. HÀr kommer vi inte att behandla detta omrÄde, du kan sjÀlv bekanta dig med detta. i dokumentationen.

Det följande interaktiva kommandot lxc config som vi kommer att behandla, tillÄter att stÀlla in konfigurationen. Till exempel, för att de uppladdade bilderna i det lokala arkivet inte ska uppdateras automatiskt frÄn globala arkiv, kan vi aktivera detta beteende med följande kommando:

lxc config set images.auto_update_cached=false

Skapa och hantera containrar ^

För att skapa en container anvÀnds kommandot lxc init som tar emot vÀrden arkiv:bild och sedan önskat identifierare för containern. Arkivet kan anges som lokalt. lokal: Àven om vilket som helst globalt. Om inget register anges, anvÀnds som standard det lokala registret för att söka efter bilden. Om bilden anges frÄn det globala registret, laddas först bilden upp till det lokala registret och anvÀnds sedan för att skapa containern.

LÄt oss köra följande kommando för att skapa vÄr första container:

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

LÄt oss gÄ igenom kommandots nycklar som vi hÀr anvÀnder:

  • alpine3 — Detta anges som alias (smeknamn) för bilden som tidigare laddats upp till det lokala registret. Om inget alias skapades för denna bild kan den alltid refereras till med dess Fingerprint som visas i tabellen.
  • alp — HĂ€r anges identifieraren för containern.
  • --storage — Denna nyckel anger i vilket Storage Pool containern kommer att skapas.
  • --profile — Dessa nycklar tillĂ€mpar kaskadkonfigurationen pĂ„ containern frĂ„n tidigare skapade konfigurationsprofiler.

Vi startar containern, som börjar köra init-systemet för distributionen:

lxc start alp

Du kan ocksÄ anvÀnda kommandot lxc launch vilket tillÄter att kombinera kommandon lxc init och lxc start till en enda operation.

Kontrollera tillstÄndet för containern:

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

Kontrollera konfigurationen för containern:

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

I avsnittet profiler vi kan sĂ€kerstĂ€lla att denna container anvĂ€nder tvĂ„ konfigurationsprofiler — default och hddroot. I sektionen devices kan vi upptĂ€cka att det endast finns en enhet, eftersom nĂ€tverksenheten skapades pĂ„ profilsnivĂ„. default. För att se alla enheter som anvĂ€nds av containern mĂ„ste du lĂ€gga till nyckeln --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: ""

Ange statisk IP-adress ^

Om vi försöker stÀlla in en IP-adress för nÀtverksenheten eth0 med kommandot lxc config device set alp som Àr avsedd för kontrollering av containern, kommer vi fÄ ett felmeddelande som sÀger att enheten inte finns eftersom enheten eth0 som anvÀnds av containern tillhör profilen default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: Enheten finns inte

Vi kan sjÀlvklart stÀlla in en statisk IP-adress för eth0 enheten i profilen, men den kommer att vara densamma för alla containrar som anvÀnder denna profil. DÀrför lÀgger vi till en dedikerad enhet för containern:

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

DÀrefter mÄste containern startas om:

lxc restart alp

Om vi nu kollar konfigurationen av containern behöver vi inte tillÀmpa alternativet --expanded för att se nÀtverksenheten eth0, eftersom vi har skapat den pÄ containernivÄ och den har kaskadöverskrivit samma enhet frÄn profilen default:

lxc config show alp

arkitektur: x86_64
konfiguration:
  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
profiler:
- default
- hddroot
stateful: false
description: ""

Ta bort container ^

För att ta bort en behÄllare anvÀnds kommandot lxc delete, men innan du tar bort behÄllaren mÄste den stoppas med kommandot lxc stop:

lxc stop alp

lxc list

+------+---------+-------------------+------+-----------+-----------+
| NAMN |  STATUS |       IPV4        | IPV6 |   TYP     | SNAPSHOTS |
+------+---------+-------------------+------+-----------+-----------+
| alp  | STOPPAD | 10.0.5.10 (eth0)  |      | BEHÅLLARE | 0         |
+------+---------+-------------------+------+-----------+-----------+

NÀr vi har bekrÀftat att behÄllarens tillstÄnd Àr STOPPAD, kan den tas bort frÄn Storage Pool:

lxc delete alp

Åtkomst till container ^

För att köra kommandon i behÄllaren direkt, utan nÀtverksanslutningar, anvÀnds kommandot lxc exec , vilket utför kommandon i behÄllaren utan att starta ett skal. Om du behöver köra ett kommando i ett skal, med hjÀlp av shell-mönster som variabler, filomdirigeringar (pipe) etc., mÄste skalet startas explicit och kommandot överlÀmnas som en nyckel, till exempel:

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

Kommandot involverade specialtecknet för undantag för specialtecknet $ sÄ att variabeln $HOME inte tolkades pÄ vÀrdmaskinen, utan bara inuti behÄllaren.

Det Àr ocksÄ möjligt att starta interaktivt lÀge för skalet, och avsluta sessionen med hotkey CTRL+D:

lxc exec alp -- \/bin\/sh

Resurshantering för containrar ^

I LXD kan resurser för behÄllaren hanteras med hjÀlp av en speciell uppsÀttning konfigurationer. Den kompletta listan över konfigurationsparametrar för behÄllaren kan hittas i dokumentationen.

ResursbegrÀnsning RAM (minne) ^

Parameter limits.memory begrÀnsar mÀngden RAM som Àr tillgÀnglig för behÄllaren. Som vÀrde anges ett nummer och en av tillgÀngliga suffix.

Vi sÀtter en grÀns pÄ behÄllen RAM pÄ 256 MB:

lxc config set alp limits.memory 256MB

Det finns ocksÄ andra parametrar för att begrÀnsa minnet:

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

Team lxc config show visar hela konfigurationen av containern, inklusive det tillÀmpade resurssambandet som har stÀllts in:

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

ResursbegrÀnsning CPU (processor) ^

För att begrÀnsa CPU-resurser finns det flera typer av begrÀnsningar:

  • limit.cpu — binder containern till en eller flera CPU-kĂ€rnor
  • limits.cpu.allowance — hanterar antingen CFS-schemalĂ€ggarens kvoter, nĂ€r tidsgrĂ€nsen har överskridits, eller en allmĂ€n mekanism för resursdelning, nĂ€r procentandelen har överskridits
  • limits.cpu.priority — schemalĂ€ggningsprioritet nĂ€r flera instanser som delar en uppsĂ€ttning processorer tilldelas samma procentandel av processorer

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

BegrÀnsning av lagringsutrymme ^

Förutom begrÀnsningar som limits.read, limits.write kan vi ocksÄ begrÀnsa mÀngden diskutrymme som containern anvÀnder (fungerar endast med ZFS eller BTRFS):

lxc config device set alp root size=2GB

Efter instÀllningen kan vi i parametern devices.root.size kontrollera den aktuella begrÀnsningen:

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

För att se de anvÀnda disk kvoterna kan vi fÄ frÄn kommandot 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

Trots att vi har stÀllt in en begrÀnsning för det rotanordningen i containern till 2 GB, kommer systemverktyg som df inte att se denna begrÀnsning. För att demonstrera detta kommer vi att genomföra ett litet test och se hur det fungerar.

Vi skapar 2 nya identiska containrar i samma Storage Pool (hddpool):

lxc init alpine3 alp1 --storage=hddpool --profile=default --profile=hddroot
lxc init alpine3 alp2 --storage=hddpool --profile=default --profile=hddroot

lxc list
+------+---------+------------------+------+-----------+-----------+
| NAMN |  STATUS  |       IPV4       | IPV6 |   TYP     | SNAPSHOTS |
+------+---------+------------------+------+-----------+-----------+
| alp1 | KÖRANDE | 10.0.5.46 (eth0) |      | CONTAINER | 0         |
+------+---------+------------------+------+-----------+-----------+
| alp2 | KÖRANDE | 10.0.5.30 (eth0) |      | CONTAINER | 0         |
+------+---------+------------------+------+-----------+-----------+

I en av containrarna skapar vi en fil som Àr 1 GB stor:

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

LÄt oss verifiera att filen har skapats:

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

Om vi tittar i den andra containern och kontrollerar filens existens pÄ samma plats, sÄ kommer filen inte att finnas, vilket Àr förvÀntat, eftersom containrarna skapas i sina egna Storage Volume i samma Storage Pool:

lxc exec alp2 -- ls -lh
total 0

Men lÄt oss jÀmföra vÀrdena som ges df i de bÄda containrarna:

lxc exec alp1 -- df -hT
Filsystem           Typ            Storlek      AnvÀnd TillgÀnglig AnvÀnd% Monterad pÄ
\/dev\/loop1           btrfs           9.3G   1016.4M      7.8G  11% \/
...

lxc exec alp2 -- df -hT
Filsystem           Typ            Storlek      AnvÀnd TillgÀnglig AnvÀnd% Monterad pÄ
\/dev\/loop1           btrfs           9.3G   1016.4M      7.8G  11% \/
...

Enheten /dev/loop1 Monterat som rotpartition Àr Storage Pool vilket dessa containrar anvÀnder, sÄ de delar dess kapacitet mellan sig.

Statistik om resursanvÀndning ^

För att se resursförbrukningsstatistik för containern kan du anvÀnda kommandot:

lxc info alp

Namn: alp
Plats: ingen
FjÀrr: unix:\/\/ 
Arkitektur: x86_64
Skapad: 2020\/04\/08 18:05 UTC
Status: Körande
Typ: container
Profiler: 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
Resurser:
  Processer: 5
  DiskanvÀndning:
    root: 495.62kB
  CPU-anvÀndning:
    CPU-anvÀndning (i sekunder): 1
  MinnesanvÀndning:
    Minne (nuvarande): 4.79MB
  NÀtverksanvÀndning:
    eth0:
      Mottagna byte: 730B
      Skickade byte: 1.59kB
      Mottagna paket: 3
      Skickade paket: 14
    lo:
      Mottagna byte: 0B
      Skickade byte: 0B
      Mottagna paket: 0
      Skickade paket: 0

Arbeta med snapshots ^

I LXD finns möjligheten att skapa snapshots och ÄterstÀlla containerns tillstÄnd frÄn dem.

För att skapa en snapshot, kör följande kommando:

lxc snapshot alp snapshot1

Kommandot lxc snapshot har ingen nyckel list, sÄ för att se listan över snapshots mÄste du anvÀnda ett kommando som visar allmÀn information om containern:

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

ÅterstĂ€lla containern frĂ„n en snapshot görs med kommandot lxc restore ange containern som Ă„terstĂ€llningen ska göras för och aliaset för snapshotet:

lxc restore alp snapshot1

Följande kommando anvÀnds för att ta bort en snapshot. Observera att syntaxen för kommandot inte liknar de andra, hÀr mÄste en snedstreck följas efter containerns namn. Om snedstrecket utelÀmnas, kommer kommandot för att ta bort snapshotet att tolkas som kommandot för att ta bort containern!

lxc delete alp/snapshot1

I det ovanstĂ„ende exemplet har vi sett sĂ„ kallade stateless-snapshots. I LXD finns det en annan typ av snapshots — stateful, dĂ€r det aktuella tillstĂ„ndet av alla processer i containern sparas. Med stateful-snapshots Ă€r det kopplade intressanta och anvĂ€ndbara funktioner.

Vad mer? ^

  • För Python-utvecklare Ă€r modulen tillgĂ€nglig PyLXD som tillhandahĂ„ller API till LXD

UPPDATERING 10.04.2020 15:00: Jag har lagt till navigering

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster