Kernkenmerke van LXD - Linux Container Systems

Kernkenmerke van LXD - Linux Container Systems

LXD is die volgende generasie stelselhouerbestuurder, so staan ​​daar bron. Dit bied 'n gebruikerskoppelvlak soortgelyk aan virtuele masjiene, maar gebruik eerder Linux-houers.

LXD kern is 'n bevoorregte daemon ('n diens wat met wortelregte loop) wat 'n REST API verskaf via 'n plaaslike unix-sok, sowel as via die netwerk indien die toepaslike konfigurasie geïnstalleer is. Kliënte, soos die opdragreëlinstrument wat by LXD voorsien word, rig versoeke deur hierdie REST API. Dit beteken dat of jy nou toegang tot 'n plaaslike gasheer of 'n afgeleë gasheer het, alles werk dieselfde.

In hierdie artikel gaan ons nie in detail stilstaan ​​by die konsepte van LXD nie; ons sal nie al die beskikbare vermoëns wat in die dokumentasie uiteengesit word, oorweeg nie, insluitend die onlangse implementering in die nuutste weergawes van LXD van ondersteuning vir QEMU virtuele masjiene parallel met houers. In plaas daarvan sal ons net die basiese beginsels van houerbestuur leer - opstel van stoorpoele, netwerke, bestuur van 'n houer, toepassing van hulpbronlimiete, en hoe om momentopnames te gebruik sodat jy 'n basiese begrip van LXD kan kry en houers op Linux kan gebruik.

Vir volledige inligting, verwys asseblief na die amptelike bron:

Navigasie

Installasie LXD ^

Installeer LXD op Ubuntu-verspreidings ^

In die Ubuntu 19.10 verspreidingspakket lxd het 'n uitsending aan snap pakket:

apt search lxd

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

Dit beteken dat twee pakkette gelyktydig geïnstalleer sal word, een as 'n stelselpakket en die ander as 'n snap-pakket. Die installering van twee pakkette op 'n stelsel kan 'n probleem skep waar die stelselpakket wees gelaat kan word as die snap-pakket deur die snap-pakketbestuurder verwyder word.

Soek pakket lxd in die snap-bewaarplek kan u die volgende opdrag gebruik:

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

Deur die opdrag uit te voer list jy kan seker maak dat die pakket lxd nog nie geïnstalleer nie:

snap list

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

Ten spyte van die feit dat LXD 'n snap-pakket is, moet dit deur die stelselpakket geïnstalleer word lxd, wat die ooreenstemmende groep in die stelsel sal skep, die nodige nutsprogramme in /usr/bin ens.

sudo apt update
sudo apt install lxd

Kom ons maak seker dat die pakket as 'n snap-pakket geïnstalleer is:

snap list

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

Installeer LXD op Arch Linux-verspreidings ^

Om die LXD-pakket op die stelsel te installeer, moet u die volgende opdragte uitvoer, die eerste sal die lys van pakkette op die stelsel wat in die bewaarplek beskikbaar is opdateer, die tweede sal die pakket direk installeer:

sudo pacman -Syyu && sudo pacman -S lxd

Nadat die pakket geïnstalleer is, moet dit by die stelselgroep gevoeg word om LXD deur 'n gewone gebruiker te bestuur lxd:

sudo usermod -a -G lxd user1

Kom ons maak seker die gebruiker user1 by groep gevoeg lxd:

id -Gn user1

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

As die groep lxd nie in die lys sigbaar is nie, dan moet jy die gebruikersessie weer aktiveer. Om dit te doen, moet jy afmeld en onder dieselfde gebruiker aanmeld.

Aktiveer in systemd laai die LXD-diens tydens die opstart van die stelsel:

sudo systemctl enable lxd

Ons begin die diens:

sudo systemctl start lxd

Kontroleer die diensstatus:

sudo systemctl status lxd

Berging LXD (berging) ^

Voordat inisialisering begin, moet ons verstaan ​​hoe die berging in LXD logies gerangskik is.

Berging (stoor) bestaan ​​uit van een of meer Stoor swembad wat een van die ondersteunde lêerstelsels soos ZFS, BTRFS, LVM of gewone gidse gebruik. Elke Stoor swembad word in volumes verdeel (Stoor volume) wat beelde, houers of data vir ander doeleindes bevat.

  • beelde - dit is spesiaal saamgestelde verspreidings sonder die Linux-kern en beskikbaar vanaf eksterne bronne
  • Houers - dit is ontplooide verspreidings vanaf beelde, gereed vir gebruik
  • Foto's - dit is momentopnames van die toestand van houers waarna jy kan terugkeer

Kernkenmerke van LXD - Linux Container Systems

Om berging in LXD te bestuur, gebruik die opdrag lxc storage 'n sertifikaat waarvoor jy kan verkry deur die sleutel te spesifiseer - lxc storage --help

Die volgende opdrag vertoon 'n lys van almal Stoor swembad in LXD-berging:

lxc storage list

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

Om 'n lys van almal te sien Stoor volume in die geselekteerde Stoor swembad dien die span 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       |
+-----------+----------------------------------+-------------+---------+

Ook, as vir Stoor swembad By die skep is die BTRFS-lêerstelsel gekies, kry dan 'n lys Stoor volume of subvolumes in die BTRFS-interpretasie kan u die gereedskapstel van hierdie lêerstelsel gebruik:

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

Inisialiseer LXD ^

Voordat u houers skep en gebruik, moet u 'n algemene LXD-inisialisering uitvoer wat die netwerk en berging skep en konfigureer. Dit kan met die hand gedoen word deur gebruik te maak van standaard kliëntopdragte wat in die lys beskikbaar is deur die opdrag te roep lxc --help of met behulp van die inisialiseringsassistent lxd init 'n paar vrae te beantwoord.

Kies 'n lêerstelsel vir Storage Pool ^

Tydens inisialisering vra LXD verskeie vrae, insluitend die bepaling van die lêerstelseltipe vir die verstek Stoor swembad. By verstek word die BTRFS-lêerstelsel daarvoor gekies. Dit sal onmoontlik wees om na 'n ander FS te verander na die skepping. Om 'n FS te kies, word dit voorgestel kenmerk vergelyking tabel:

funksie
Gids
Btrfs
LVM
ZFS
CEPH

Geoptimaliseerde beeldberging
No.
ja
ja
ja
ja

Geoptimaliseerde instansieskepping
No.
ja
ja
ja
ja

Geoptimaliseerde momentopname-skepping
No.
ja
ja
ja
ja

Geoptimaliseerde beeldoordrag
No.
ja
No.
ja
ja

Geoptimaliseerde instansie-oordrag
No.
ja
No.
ja
ja

Kopieer op skryf
No.
ja
ja
ja
ja

Blok gebaseer
No.
No.
ja
No.
ja

Onmiddellike kloning
No.
ja
ja
ja
ja

Bergingbestuurder bruikbaar binne 'n houer
ja
ja
No.
No.
No.

Herstel vanaf ouer foto's (nie nuutste nie)
ja
ja
ja
No.
ja

Bergingkwotas
ja(*)
ja
ja
ja
No.

Inisialiseer die netwerk en stoorpoel met behulp van die towenaar ^

Die volgende opdrag waarna ons sal kyk, stel voor dat die hoofkomponente van LXD opgestel word deur eenvoudige vrae te beantwoord deur die inisialiseringsassistent te gebruik.

Voer opdrag uit lxc init en voer die antwoorde op die vrae na die dubbelpunt in soos in die voorbeeld hieronder getoon of verander dit volgens jou toestande:

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

Skep 'n bykomende stoorpoel ^

In die vorige stap het ons geskep Stoor swembad wat die naam gegee is ssdpool en waarvan die lêer op my stelsel geleë is by /var/lib/lxd/disks/ssdpool.img. Hierdie lêerstelseladres stem ooreen met die fisiese SSD-aandrywer in my rekenaar.

Die volgende aksies, om begrip van die rol wat gespeel word uit te brei Stoor swembad in die bewaarplek sal ons 'n tweede een skep Stoor swembad wat fisies op 'n ander tipe skyf, HDD, geleë sal wees. Die probleem is dat LXD jou nie toelaat om te skep nie Stoor swembad buite adres /var/lib/lxd/disks/ en selfs simboliese skakels sal nie werk nie, sien die ontwikkelaar se reaksie. Ons kan hierdie beperking omseil tydens inisialisering/formatering Stoor swembad deur die waarde as 'n bloktoestel te spesifiseer in plaas van die pad na die terugluslêer deur dit in die sleutel te spesifiseer source.

Dus, voor die skep Stoor swembad jy moet 'n terugluslêer of 'n bestaande partisie op jou lêerstelsel definieer wat dit sal gebruik. Om dit te doen, sal ons 'n lêer skep en gebruik wat ons in grootte tot 10 GB sal beperk:

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

Kom ons koppel die terugluslêer aan 'n gratis teruglustoestel:

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

/dev/loop1

Danksy die sleutel --show deur die opdrag uit te voer, word die naam van die toestel waaraan ons terugluslêer gekoppel is, na die skerm teruggekeer. Indien nodig, kan ons 'n lys van alle besige toestelle van hierdie tipe vertoon om seker te maak dat ons optrede korrek is:

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

Uit die lys kan jy vind dat die toestel het /dev/loop1 loopback-lêer ingesluit /mnt/work/lxd/hddpool.img, en in die toestel /dev/loop0 loopback-lêer ingesluit /var/lib/lxd/disks/ssdpool.img wat ooreenstem met die verstek Stoor swembad.

Die volgende opdrag skep 'n nuwe een Stoor swembad in LXD gebaseer op die teruglooplêer wat ons sopas voorberei het. LXD sal die terugluslêer formateer /mnt/work/lxd/hddpool.img in die toestel /dev/loop1 vir die BTRFS-lêerstelsel:

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

Kom ons vertoon 'n lys van almal Stoor swembad om te skerm:

lxc storage list

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

Vergroting van die stoor swembad grootte ^

Na die skepping Stoor swembad, indien nodig, kan dit uitgebrei word. Vir Stoor swembad gebaseer op die BTRFS-lêerstelsel, voer die volgende opdragte uit:

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

Outo-invoeging van 'n terugluslêer in 'n teruglustoestelgleuf ^

Ons het een klein probleem, wanneer die gasheerstelsel herlaai word, die lêer /mnt/work/lxd/hddpool.img sal uit die toestel "vlieg". /dev/loop1 en die LXD-diens sal ineenstort wanneer dit laai, want dit sal dit nie in hierdie toestel sien nie. Om hierdie probleem op te los, moet jy 'n stelseldiens skep wat hierdie lêer in die toestel sal plaas /dev/loop1 wanneer die gasheerstelsel begin.

Kom ons skep eenheid leër tipe diens в /etc/systemd/system/ vir die SystemD inisialiseringstelsel:

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

Aktiveer die diens:

sudo systemctl enable lxd-hddpool

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

Nadat ons die gasheerstelsel herbegin het, gaan ons die diensstatus na:

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

Uit die afvoer kan ons verifieer dat die diensstatus is aktiewe, ten spyte van die feit dat die uitvoering van ons skrif vanaf een opdrag voltooi is, het die opsie ons toegelaat om dit te doen RemainAfterExit=true.

Veiligheid. Houer Voorregte ^

Aangesien alle houerprosesse eintlik in isolasie op die gasheerstelsel loop deur die kern daarvan te gebruik, om die toegang van houerprosesse tot die gasheerstelsel verder te beskerm, bied LXD prosesvoorreg, waar:

  • Bevoorregte houers - dit is houers waarin prosesse met UID en GID ooreenstem met dieselfde eienaar as op die gasheerstelsel. Byvoorbeeld, 'n proses wat in 'n houer met 'n UID van 0 loop, het almal dieselfde toegangsregte as 'n proses op die gasheerstelsel met 'n UID van 0. Met ander woorde, die wortelgebruiker in die houer het al die regte nie net in die houer, maar ook op die gasheerstelsel as hy buite die houer se geïsoleerde naamruimte kan gaan.

  • Onbevoorregte houers - dit is houers waarin prosesse aan die eienaar van die UID en GID behoort met 'n nommer van 0 tot 65535, maar vir die gasheerstelsel word die eienaar gemasker deur onderskeidelik die bygevoegde SubUID en SubGID bisse te gebruik. Byvoorbeeld, 'n gebruiker met UID=0 in 'n houer sal op die gasheerstelsel gesien word as SubUID + UID. Dit beskerm die gasheerstelsel, want as enige proses in die houer sy geïsoleerde naamruimte kan ontsnap, kan dit slegs met die gasheerstelsel kommunikeer as 'n proses met 'n onbekende, baie hoë UID/GID.

By verstek het nuutgeskepte houers 'n onbevoorregte status en daarom moet ons 'n SubUID en SubGID definieer.

Kom ons skep twee konfigurasielêers waarin ons die masker vir onderskeidelik SubUID en SubGID sal stel:

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

Om die veranderinge toe te pas, moet die LXD-diens herbegin word:

sudo systemctl restart lxd

Skep 'n virtuele netwerkskakelaar ^

Aangesien ons voorheen die netwerk geïnisialiseer het met behulp van die inisialiseringsassistent lxd init en het 'n netwerktoestel geskep lxdbr0, dan sal ons in hierdie afdeling eenvoudig kennis maak met netwerk in LXD en hoe om 'n virtuele skakelaar (brug) te skep met behulp van die kliëntopdrag.

Die volgende diagram demonstreer hoe 'n skakelaar (brug) die gasheer en houers in 'n netwerk verbind:

Kernkenmerke van LXD - Linux Container Systems

Houers kan via 'n netwerk met ander houers of die gasheer waarop hierdie houers bedien word, kommunikeer. Om dit te doen, moet jy die virtuele netwerkkaarte van die houers met 'n virtuele skakelaar koppel. Ons sal eers 'n skakelaar skep, en die houer se netwerkkoppelvlakke sal in daaropvolgende hoofstukke gekoppel word, nadat die houer self geskep is.

Die volgende opdrag skep 'n skakelaar met 'n subnet 10.0.5.0/24 en IPv4-adres 10.0.5.1/24, en sluit ook in ipv4.nat sodat houers toegang tot die internet kan kry deur die gasheer deur die NAT-diens te gebruik:

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

Kontroleer die lys van netwerktoestelle wat in LXD beskikbaar is:

lxc network list

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

U kan ook verifieer dat 'n netwerktoestel geskep is met die standaardinstrument van die Linux-verspreiding - ip link of 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

Konfigurasieprofiel ^

Elke houer in LXD het sy eie konfigurasie en kan dit uitbrei met wêreldwyd verklaarde konfigurasies genoem konfigurasie profiele. Die toepassing van konfigurasieprofiele op 'n houer het 'n kaskademodel, die volgende voorbeeld demonstreer dit:

Kernkenmerke van LXD - Linux Container Systems

In hierdie voorbeeld is drie profiele in die LXD-stelsel geskep: default, hddpool и hostfs. Al drie profiele word toegepas op 'n houer wat 'n plaaslike opset (grys area) het. Profiel default het 'n toestel root wat 'n parameter het pool is gelyk aan ssdpool, maar danksy die kaskade-konfigurasie-toepassingsmodel, kan ons 'n profiel op die houer toepas hddpool wat 'n parameter het pool sal dieselfde parameter van die profiel ignoreer default en die houer sal die toestelkonfigurasie ontvang root met parameter pool gelyk is hddpool, en die profiel hostfs voeg eenvoudig 'n nuwe toestel by die houer.

Om die lys van beskikbare konfigurasieprofiele te sien, gebruik die volgende opdrag:

lxc profile list

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

'n Volledige lys van beskikbare opdragte om met 'n profiel te werk kan verkry word deur die sleutel by te voeg --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

Redigeer jou profiel ^

Verstekkonfigurasieprofiel default het nie 'n netwerkkaartkonfigurasie vir die houer nie en alle nuutgeskepte houers het nie 'n netwerk nie, vir hulle is dit nodig om plaaslike (toegewyde) netwerktoestelle met 'n aparte opdrag te skep, maar ons kan 'n globale netwerktoestel in die konfigurasie skep profiel wat gedeel sal word tussen alle houers wat hierdie profiel gebruik. Op hierdie manier, onmiddellik na die opdrag om 'n nuwe houer te skep, sal hulle 'n netwerk met netwerktoegang hê. Terselfdertyd is daar geen beperkings nie; ons kan altyd later 'n plaaslike netwerktoestel skep indien nodig.

Die volgende opdrag sal die toestel by die konfigurasieprofiel voeg eth0 tipe nic aan die netwerk gekoppel lxdbr0:

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

Dit is belangrik om daarop te let dat aangesien ons die toestel eintlik by die konfigurasieprofiel gevoeg het, as ons 'n statiese IP-adres in die toestel gespesifiseer het, dan sal alle houers wat hierdie profiel sal gebruik dieselfde IP-adres deel. As daar 'n behoefte is om 'n houer te skep met 'n statiese IP-adres wat vir die houer toegeken is, dan moet jy 'n netwerktoestelkonfigurasie op die houervlak (plaaslike konfigurasie) met die IP-adresparameter skep, en nie op die profielvlak nie.

Kom ons kyk na die profiel:

lxc profile show default

config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic
  root:
    path: /
    pool: ssdpool
    type: disk
name: default
used_by: []

In hierdie profiel kan ons sien dat vir alle nuutgeskepte houers twee toestelle geskep sal word:

  • eth0 - Soort toestel nic gekoppel aan 'n skakelaar (netwerkbrug) lxdbr0
  • root - Soort toestel disk wat 'n stoor swembad gebruik ssdpool

Skep nuwe profiele ^

Om voorheen geskep te gebruik Stoor swembad houers, skep 'n konfigurasieprofiel ssdroot waarin ons 'n toestel soos sal byvoeg disk met monteerpunt / (wortel) met behulp van die voorheen geskep Stoor swembad - ssdpool:

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

Net so skep ons 'n toestel soos disk, maar in hierdie geval gebruik Stoor swembad - hddpool:

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

Kontroleer konfigurasieprofiele:

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

Beeldbewaarplek ^

Houers word geskep uit beelde wat spesiaal saamgestelde verspreidings is wat nie 'n Linux-kern het nie. Daarom, voordat die houer uitgevoer word, moet dit vanaf hierdie prent ontplooi word. Die bron van beelde is 'n plaaslike bewaarplek waarin beelde van eksterne bewaarplekke afgelaai word.

Afgeleë beeldbewaarplekke ^

By verstek is LXD gekonfigureer om beelde van drie afgeleë bronne te ontvang:

  • ubuntu: (vir stabiele Ubuntu-beelde)
  • ubuntu-daagliks: (vir daaglikse Ubuntu-beelde)
  • beelde: (vir 'n klomp ander distros)

lxc remote list

+-----------------+------------------------------------------+--------+--------+
|      NAME       |                   URL                    | PUBLIC | STATIC |
+-----------------+------------------------------------------+--------+--------+
| images          | https://images.linuxcontainers.org       | YES    | NO     |
+-----------------+------------------------------------------+--------+--------+
| local (default) | unix://                                  | NO     | YES    |
+-----------------+------------------------------------------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | YES    | YES    |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily    | YES    | YES    |
+-----------------+------------------------------------------+--------+--------+

Byvoorbeeld, bewaarplek ubuntu: het die volgende beelde:

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

Om 'n beperkte aantal kolomme te vertoon, het ons die opsie gebruik -c met parameters dasut, en het ook die lengte van die lys beperk met die opdrag head.

Filtering is beskikbaar om 'n lys prente te vertoon. Die volgende opdrag sal alle beskikbare verspreidingsargitekture lys 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        |
+------------------------------+--------------------------------------+--------------+

Plaaslike beeldbewaarplek ^

Om die houer te begin gebruik, moet jy 'n prent van die globale bewaarplek by die plaaslike een voeg local:. Nou is die plaaslike bewaarplek leeg, die opdrag sal hiervan seker maak lxc image list. As die metode list moenie 'n bewaarplek spesifiseer nie, dan sal die plaaslike bewaarplek by verstek gebruik word - local:

lxc image list local:

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

Beelde in die bewaarplek word bestuur deur die volgende metodes te gebruik:

Span
Beskrywing

lxc beeld alias
Bestuur beeldaliasse

lxc beeld kopie
Kopieer beelde tussen bedieners

lxc beeld verwyder
Vee prente uit

lxc beeld wysig
Wysig prenteienskappe

lxc beeld uitvoer
Voer en laai beelde af

lxc beeld voer
Voer beelde in die beeldwinkel in

lxc beeld inligting
Wys nuttige inligting oor beelde

lxc beeld lys
Lys beelde

lxc beeld Verkwik
Herlaai beelde

lxc beeld Wys
Wys prenteienskappe

Kopieer die prent na die plaaslike bewaarplek vanaf die globale een images::

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

Image copied successfully!

Kom ons vertoon 'n lys van alle beelde wat tans in die plaaslike bewaarplek beskikbaar is local::

lxc image -c lfdatsu list local:

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

LXD-konfigurasie ^

Benewens die interaktiewe modus, ondersteun LXD ook 'n nie-interaktiewe konfigurasie-installasiemodus, dit is wanneer die konfigurasie gespesifiseer word in die vorm van 'n YAML-lêer, 'n spesiale formaat waarmee u die hele konfigurasie gelyktydig kan installeer, en die uitvoering omseil van baie interaktiewe opdragte wat hierbo in hierdie artikel bespreek is, insluitend netwerkkonfigurasie, skep van konfigurasieprofiele, ens. Ons sal nie hierdie area hier dek nie, jy kan dit op jou eie kyk. in dokumentasie.

Volgende interaktiewe opdrag lxc config waarna ons sal kyk, laat jou toe om die konfigurasie in te stel. Byvoorbeeld, om te verseker dat afgelaaide beelde na die plaaslike bewaarplek nie outomaties vanaf die globale bewaarplekke opgedateer word nie, kan ons hierdie gedrag aktiveer met die volgende opdrag:

lxc config set images.auto_update_cached=false

Skep en bestuur van 'n houer ^

Gebruik die opdrag om 'n houer te skep lxc init waaraan waardes oorgedra word репозиторий:образ en dan die verlangde ID vir die houer. Die bewaarplek kan as plaaslik gespesifiseer word local: so is enige globale een. As die bewaarplek nie gespesifiseer is nie, word die plaaslike bewaarplek by verstek gebruik om na die prent te soek. As die prent vanaf die globale bewaarplek gespesifiseer word, sal die prent eers na die plaaslike bewaarplek afgelaai word en dan gebruik word om die houer te skep.

Kom ons voer die volgende opdrag uit om ons eerste houer te skep:

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

Kom ons kyk na die opdragsleutels wat ons hier gebruik in volgorde:

  • alpine3 — 'n Alias ​​(alias) word gespesifiseer vir die prent wat voorheen na die plaaslike bewaarplek opgelaai is. As die alias nie vir hierdie beeld geskep is nie, kan jy altyd na die beeld verwys vingerafdruk wat in die tabel vertoon word.
  • alp — Stel die identifiseerder vir die houer
  • --storage — Hierdie sleutel dui aan in watter Stoor swembad 'n houer sal geskep word
  • --profile — Hierdie sleutels pas konfigurasie van voorheen geskepte konfigurasieprofiele toe op die houer

Ons begin die houer, wat begin om die init-stelsel van die verspreiding te begin:

lxc start alp

Jy kan ook die opdrag gebruik lxc launch wat jou toelaat om spanne te kombineer lxc init и lxc start in een operasie.

Kontroleer die toestand van die houer:

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

Kontroleer die houerkonfigurasie:

lxc config show alp

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine 3.11 amd64 (20200326_13:39)
  image.os: Alpine
  image.release: "3.11"
  image.serial: "20200326_13:39"
  image.type: squashfs
  volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
  volatile.eth0.host_name: vethb1fe71d8
  volatile.eth0.hwaddr: 00:16:3e:5f:73:3e
  volatile.idmap.base: "0"
  volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.power: RUNNING
devices:
  root:
    path: /
    pool: hddpool
    type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""

In die afdeling profiles ons kan seker maak dat hierdie houer twee konfigurasieprofiele gebruik − default и hddroot. In afdeling devices ons kan net een toestel opspoor omdat die netwerktoestel op profielvlak geskep is default. Om alle toestelle wat deur die houer gebruik word te sien, moet jy 'n sleutel byvoeg --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: ""

Stel 'n statiese IP-adres op ^

As ons probeer om 'n IP-adres vir 'n netwerktoestel te stel eth0 per span lxc config device set alp bedoel vir die houerkonfigurasie, dan sal ons 'n fout ontvang wat sal rapporteer dat die toestel nie bestaan ​​nie omdat die toestel eth0 wat deur die houer gebruik word, behoort aan die profiel default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Ons kan natuurlik 'n statiese IP-adres vir eth0 toestelle in die profiel, maar dit sal dieselfde wees vir alle houers wat hierdie profiel sal gebruik. Laat ons dus 'n toestel byvoeg wat aan die houer toegewy is:

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

Dan moet jy die houer herbegin:

lxc restart alp

As ons nou na die houerkonfigurasie kyk, hoef ons nie die opsie te gebruik nie --expanded om die netwerktoestel te sien eth0, aangesien ons dit op die houervlak geskep het en dit oor dieselfde toestel vanaf die profiel geloop het 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: ""

Verwydering van 'n houer ^

Om 'n houer te verwyder, gebruik die opdrag lxc delete, maar voordat die houer verwyder word, moet dit gestop word met die opdrag lxc stop:

lxc stop alp

lxc list

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

Nadat ons geverifieer het dat die toestand van die houer geword het GESTOP, dit kan verwyder word van Stoor swembad:

lxc delete alp

Houertoegang ^

Om opdragte direk in 'n houer uit te voer, om netwerkverbindings te omseil, gebruik die opdrag lxc exec wat opdragte in die houer uitvoer sonder om die stelseldop te begin. As jy 'n opdrag in 'n dop moet uitvoer deur doppatrone soos veranderlikes, lêeraanwysings (pyp), ens. uit te voer, moet jy die dop eksplisiet begin en die opdrag as 'n sleutel deurgee, byvoorbeeld:

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

Die opdrag het 'n spesiale ontsnapkarakter gebruik vir spesiale karakter $ sodat die veranderlike $HOME is nie op die gasheermasjien geïnterpreteer nie, maar is slegs binne die houer geïnterpreteer.

Dit is ook moontlik om die interaktiewe dopmodus te begin, en dan die sessie te beëindig deur sneltoets uit te voer CTRL+D:

lxc exec alp -- /bin/sh

Houerhulpbronbestuur ^

In LXD kan u houerhulpbronne bestuur deur 'n spesiale stel konfigurasie te gebruik. 'n Volledige lys van houerkonfigurasieparameters kan gevind word in dokumentasie.

RAM-hulpbronbeperking ^

Parameter limits.memory beperk die hoeveelheid RAM wat vir die houer beskikbaar is. Die waarde is 'n getal en een van beskikbare agtervoegsels.

Kom ons stel die houer se RAM-limiet op 256 MB:

lxc config set alp limits.memory 256MB

Daar is ook ander parameters om geheue te beperk:

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

Span lxc config show laat jou toe om die hele houerkonfigurasie te vertoon, insluitend die toegepaste hulpbronlimiet wat gestel is:

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

SVE hulpbron limiet ^

Daar is verskeie maniere om SVE-hulpbronne te beperk. tipes beperkings:

  • limit.cpu - bind 'n houer aan een of meer SVE-kerne
  • limits.cpu.allowance - bestuur óf CFS-skeduleerderkwotas wanneer die tydsbeperking verby is, óf die universele SVE-hulpbrondelingmeganisme wanneer die persentasie verby is
  • limits.cpu.priority - skeduleerder prioriteit wanneer verskeie gevalle wat 'n stel verwerkers deel, dieselfde persentasie verwerkers toegeken word

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

Skyfspasie beperking ^

Benewens beperkings soos limits.read, limits.write ons kan ook die hoeveelheid skyfspasie wat deur die houer verbruik word beperk (werk net met ZFS of BTRFS):

lxc config device set alp root size=2GB

Na die installasie, in die parameter devices.root.size Ons kan die vasgestelde limiet verifieer:

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

Om die gebruikte skyfkwotas te sien, kan ons van die opdrag kry 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

Ten spyte van die feit dat ons 'n limiet vir die worteltoestel van die houer tot 2GB gestel het, is stelselhulpmiddels soos df sal nie hierdie beperking sien nie. Om dit te doen, sal ons 'n klein toets doen en uitvind hoe dit werk.

Kom ons skep 2 nuwe identiese houers in dieselfde Stoor swembad (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         |
+------+---------+------------------+------+-----------+-----------+

Kom ons skep 'n 1GB-lêer in een van die houers:

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

Kom ons maak seker die lêer is geskep:

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

As ons in die tweede houer kyk, kyk vir die bestaan ​​van 'n lêer op dieselfde plek, dan sal hierdie lêer nie daar wees nie, wat verwag word, aangesien houers in hul eie geskep word Stoor volume in dieselfde Stoor swembad:

lxc exec alp2 -- ls -lh
total 0

Maar kom ons vergelyk die waardes wat dit produseer df op die een en die ander houer:

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

toestel /dev/loop1 gemonteer soos die wortelpartisie is Stoor swembad wat hierdie houers gebruik, dus deel hulle die volume tussen twee.

Hulpbronverbruikstatistieke ^

U kan hulpbronverbruikstatistieke vir 'n houer sien deur die opdrag te gebruik:

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

Werk met foto's ^

LXD het die vermoë om momentopnames te skep en die houerstatus daaruit te herstel.

Om 'n momentopname te skep, voer die volgende opdrag uit:

lxc snapshot alp snapshot1

Die span lxc snapshot geen sleutel beskikbaar nie list, dus, om die lys van foto's te sien, moet jy die opdrag gebruik wat algemene inligting oor die houer vertoon:

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

U kan 'n houer vanaf 'n momentopname herstel deur die opdrag te gebruik lxc restore spesifiseer die houer waarvoor die herstel uitgevoer sal word en die momentopname alias:

lxc restore alp snapshot1

Die volgende opdrag word gebruik om 'n momentopname uit te vee. Neem asseblief kennis dat die opdragsintaksis nie soortgelyk is aan alle ander nie; hier moet jy 'n voorwaartse skuinsstreep na die houernaam spesifiseer. As die skuinsstreep weggelaat word, word die opdrag om 'n momentopname uit te vee geïnterpreteer as 'n opdrag om 'n houer uit te vee!

lxc delete alp/snapshot1

In die voorbeeld hierbo het ons na sogenaamde staatlose kiekies gekyk. LXD het 'n ander soort foto's - stateful, wat die huidige toestand van alle prosesse in die houer stoor. Daar is 'n aantal interessante en nuttige kenmerke wat verband hou met statige foto's.

Wat nog? ^

  • 'n Module is beskikbaar vir Python-ontwikkelaars PyLXD wat 'n API aan LXD verskaf

OPDATERING 10.04.2020/15/00 XNUMX:XNUMX: Bygevoeg navigasie

Bron: will.com

Voeg 'n opmerking