Taybetmendiyên bingehîn ên LXD - pergalên konteynerê Linux

Taybetmendiyên bingehîn ên LXD - pergalên konteynerê Linux

LXD gerînendeyê konteynerê pergala nifşê din e, ji ber vê yekê dibêje çavkaniyê. Ew navgînek bikarhênerek mîna makîneyên virtual pêşkêşî dike, lê li şûna wê konteynerên Linux bikar tîne.

LXD core Daemonek îmtiyaz e (karûbarek ku bi mafên root ve tê xebitandin) ku API-ya REST-ê bi riya soketek unix-ê ya herêmî, û hem jî bi navgîniya torê ve peyda dike heke veavakirina guncan were saz kirin. Xerîdar, wekî amûra rêzika fermanê ya ku bi LXD re hatî peyda kirin, bi vê REST API-yê daxwazan dikin. Ev tê vê wateyê ku hûn bigihîjin mêvandarek herêmî an mêvandarek dûr, her tişt bi heman rengî dixebite.

Di vê gotarê de em ê bi hûrgulî li ser têgehên LXD nesekinin, em ê hemî kapasîteyên berdest ên ku di belgeyê de hatine destnîşan kirin, di nav de pêkanîna vê dawiyê ya di guhertoyên herî paşîn ên LXD-ê de piştgirî ji makîneyên virtual QEMU re paralel bi konteyneran re nagirin. Di şûna wê de, em ê tenê bingehên rêveberiya konteyneran fêr bibin - sazkirina hewzên hilanînê, torê, xebitandina konteynerek, sepandina sînorên çavkaniyê, û meriv çawa wêneyan bikar tîne da ku hûn têgihîştinek bingehîn a LXD-ê bistînin û konteyneran li Linux-ê bikar bînin.

Ji bo agahdariya bêkêmasî, ji kerema xwe serî li çavkaniya fermî bidin:

Navkirin

Sazkirina LXD ^

Sazkirina LXD li ser belavkirinên Ubuntu ^

Di pakêta belavkirina Ubuntu 19.10 de lxd weşanek li ser heye pakêta snap:

apt search lxd

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

Ev tê vê wateyê ku dê du pakêt bi carekê ve werin saz kirin, yek wekî pakêtek pergalê û ya din wekî pakêtek snap. Sazkirina du pakêtan li ser pergalê dibe ku hin pirsgirêkek çêbike ku heke pakêta snap ji hêla gerînendeyê pakêtê snap ve were rakirin dibe ku pakêta pergalê sêwî bimîne.

Pakêtê bibînin lxd di depoya snap de hûn dikarin fermana jêrîn bikar bînin:

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

Bi xebitandina fermanê list hûn dikarin piştrast bikin ku pakêt lxd hîn nehatiye sazkirin:

snap list

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

Tevî rastiya ku LXD pakêtek snap e, divê ew bi pakêta pergalê ve were saz kirin lxd, ya ku dê di pergalê de grûpek têkildar biafirîne, karûbarên pêwîst di nav de /usr/bin û vî awayî.

sudo apt update
sudo apt install lxd

Ka em pê ewle bin ku pakêt wekî pakêtek snap hatî saz kirin:

snap list

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

Sazkirina LXD li ser belavkirinên Arch Linux ^

Ji bo sazkirina pakêta LXD li ser pergalê, hûn hewce ne ku emrên jêrîn bimeşînin, ya yekem dê navnîşa pakêtên li ser pergalê ku di depoyê de peyda dibe nûve bike, ya duyemîn dê rasterast pakêtê saz bike:

sudo pacman -Syyu && sudo pacman -S lxd

Piştî sazkirina pakêtê, ji bo birêvebirina LXD ji hêla bikarhênerek birêkûpêk ve, divê ew li koma pergalê were zêdekirin lxd:

sudo usermod -a -G lxd user1

Ka em bikarhênerê piştrast bikin user1 li komê zêde kirin lxd:

id -Gn user1

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

Ger kom lxd di navnîşê de nayê dîtin, wê hingê hûn hewce ne ku rûniştina bikarhêner dîsa çalak bikin. Ji bo vê yekê, hûn hewce ne ku hûn di bin heman bikarhênerê de têkevin û têkevin.

Di nav de çalak bikin systemd barkirina karûbarê LXD di destpêka pergalê de:

sudo systemctl enable lxd

Ka em xizmetê dest pê bikin:

sudo systemctl start lxd

Kontrolkirina rewşa karûbarê:

sudo systemctl status lxd

Storage LXD (Storage) ^

Berî destpêkirina destpêkirinê, pêdivî ye ku em fam bikin ka hilanînê di LXD de çawa bi mentiqî hatiye saz kirin.

Depokirin (Embarkirinî) pêk tê ji yek an bêtir Storage Pool ku yek ji pergalên pelê yên piştgirîkirî yên wekî ZFS, BTRFS, LVM an pelrêça birêkûpêk bikar tîne. Herkes Storage Pool li ser cildan tê dabeş kirin (Volume Storage) yên ku ji bo mebestên din wêne, konteynir, an dane hene.

  • Wêneyên - ev belavkirinên taybetî yên bêyî kernel Linux-ê hatine berhev kirin û ji çavkaniyên derveyî peyda dibin
  • Konser - ev belavkirinên ji wêneyan hatine bicîh kirin, ji bo karanîna amade ne
  • Snapshots - ev dîmenên rewşa konteyneran in ku hûn dikarin vegerin

Taybetmendiyên bingehîn ên LXD - pergalên konteynerê Linux

Ji bo birêvebirina hilanînê li LXD, fermanê bikar bînin lxc storage sertîfîkayek ku hûn dikarin bi destnîşankirina mifteyê jê bistînin - lxc storage --help

Fermana jêrîn navnîşek hemî nîşan dide Storage Pool di hilanîna LXD de:

lxc storage list

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

Ji bo dîtina navnîşek hemî Volume Storage di hilbijartî de Storage Pool tîmê xizmetê dike 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       |
+-----------+----------------------------------+-------------+---------+

Her weha, heke ji bo Storage Pool Dema afirandinê, pergala pelê BTRFS hate hilbijartin, paşê navnîşek bistînin Volume Storage an subcildên di şîroveya BTRFS de, hûn dikarin amûra vê pergala pelê bikar bînin:

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

Destpêkirina LXD ^

Berî ku hûn konteyneran çêbikin û bikar bînin, divê hûn destpêkek LXD-ya gelemperî ku torê û hilanînê diafirîne û mîheng dike pêk bînin. Ev dikare bi destan bi karanîna fermanên xerîdar ên standard ên ku di navnîşê de hene bi bangkirina fermanê ve were kirin lxc --help an jî bi karanîna sêrbazê destpêkê lxd init bersiva çend pirsan dide.

Hilbijartina pergalek pelê ji bo Storage Pool ^

Di dema destpêkirinê de, LXD gelek pirsan dipirse, di nav de destnîşankirina celebê pergala pelê ji bo xwerû Storage Pool. Bi xwerû, pergala pelê BTRFS ji bo wê tê hilbijartin. Dê piştî afirandinê nekaribe FS-ya din biguhezîne. Ji bo hilbijartina FS-ê tê pêşniyar kirin tabloya berhevdana taybetmendiyê:

Taybetî
Directory
Btrfs
LVM
ZFS
CEPH

Hilberîna wêneya xweşbînkirî
na
erê
erê
erê
erê

Afirandina nimûneya xweşbînkirî
na
erê
erê
erê
erê

Afirandina wêneya wêneya xweşbînkirî
na
erê
erê
erê
erê

Veguheztina wêneya xweşbînkirî
na
erê
na
erê
erê

Veguheztina nimûneya xweşbînkirî
na
erê
na
erê
erê

Li ser nivîsandinê kopî bikin
na
erê
erê
erê
erê

Block bingeha
na
na
erê
na
erê

Klonkirina tavilê
na
erê
erê
erê
erê

Ajokarê hilanînê ku di hundurê konteynerê de tê bikar anîn
erê
erê
na
na
na

Vegerandina ji dîmenên kevntir (ne herî dawî)
erê
erê
erê
na
erê

Kotayên Storage
erê(*)
erê
erê
erê
na

Destpêkirina torê û Storage Pool bi karanîna sêrbaz ^

Fermana paşîn a ku em ê lê binerin pêşniyar dike ku bi karanîna sêrbazê destpêkê ve bi bersivdana pirsên hêsan ve pêkhateyên bingehîn ên LXD saz bikin.

Fermana bimeşîne lxc init û bersivên pirsan li dû kolonê wekî ku di mînaka jêrîn de tê xuyang kirin binivîsin an jî li gorî şertên xwe wan biguherînin:

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

Afirandina hewzek hilanînê ya zêde ^

Di gava berê de me çêkir Storage Pool ku navê wê hatiye dayîn ssdpool û pelê ku di pergala min de ye /var/lib/lxd/disks/ssdpool.img. Ev navnîşana pergala pelê bi ajokera SSD ya fîzîkî ya di PC-ya min de têkildar e.

Çalakiyên jêrîn, ji bo berfirehkirina têgihîştina rola ku tê lîstin Storage Pool di depoyê de, em ê ya duyemîn biafirînin Storage Pool ku dê bi fizîkî li ser celebek dîskek cûda, HDD-ê were bicîh kirin. Pirsgirêk ev e ku LXD destûrê nade ku hûn biafirînin Storage Pool ji navnîşanê /var/lib/lxd/disks/ û tewra girêdanên sembolîk jî dê nexebitin, bersiva pêşdebiran bibînin. Em dikarin di dema destpêkkirin/formatkirinê de vê sînordariyê derbas bikin Storage Pool bi destnîşankirina nirxê wekî amûrek blokê li şûna rêça pelê paşvekêşanê bi destnîşankirina vê di mifteyê de source.

Ji ber vê yekê, berî ku çêbikin Storage Pool hûn hewce ne ku pelek loopback an dabeşek heyî ya li ser pergala pelê xwe ya ku ew ê bikar bîne destnîşan bikin. Ji bo vê yekê, em ê pelek ku em ê mezinahiya 10 GB sînordar bikin biafirînin û bikar bînin:

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

Ka em pelê loopback bi amûrek loopback belaş ve girêdin:

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

/dev/loop1

Bi saya mifteyê --show pêkanîna fermanê navê cîhaza ku pelê meya loopback tê de ye vedigerîne ser ekranê. Ger hewce be, em dikarin navnîşek hemî amûrên mijûl ên bi vî rengî nîşan bidin da ku pê ewle bin ku kiryarên me rast in:

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

Ji navnîşê hûn dikarin bibînin ku cîhaz heye /dev/loop1 pelê loopback tê de ye /mnt/work/lxd/hddpool.img, û di cîhazê de /dev/loop0 pelê loopback tê de ye /var/lib/lxd/disks/ssdpool.img ku bi standardê re têkildar e Storage Pool.

Fermana jêrîn yek nû diafirîne Storage Pool di LXD de li ser bingeha pelê loopback ku me nû amade kiriye. LXD dê pelê loopback format bike /mnt/work/lxd/hddpool.img di cîhazê de /dev/loop1 ji bo pergala pelê BTRFS:

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

Ka em navnîşek ji hemîyan nîşan bidin Storage Pool ji bo ekranê:

lxc storage list

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

Zêdekirina Mezinahiya hewza hilanînê ^

Piştî afirandinê Storage Pool, heke pêwîst be, ew dikare were berfireh kirin. Bo Storage Pool li ser bingeha pergala pelê BTRFS, emrên jêrîn bimeşînin:

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

Veguheztina otomatîkî ya pelek loopback di hêlîna cîhaza loopback de ^

Pirsgirêkek me ya piçûk heye, dema ku pergala mêvandar, pelê ji nû ve dest pê dike /mnt/work/lxd/hddpool.img dê ji cîhazê "bifire". /dev/loop1 û karûbarê LXD dê dema barkirinê têk bibe ji ber ku ew ê di vê cîhazê de nebîne. Ji bo çareserkirina vê pirsgirêkê hûn hewce ne ku karûbarek pergalê biafirînin ku dê vê pelê têxe cîhazê /dev/loop1 dema ku pergala mêvandar boot dike.

Werin em biafirînin yekbûn cureyê pelê xizmetkar в /etc/systemd/system/ ji bo pergala destpêkirina 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

Xizmetê çalak bikin:

sudo systemctl enable lxd-hddpool

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

Piştî destpêkirina pergala mêvandar, em rewşa karûbarê kontrol dikin:

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

Ji encam em dikarin verast bikin ku dewleta karûbarê ye jîr, tevî vê yekê ku bicîhkirina nivîsara me ji yek fermanê qediya, vebijarkê destûr da me ku em vê bikin RemainAfterExit=true.

Ewlekarî. îmtiyazên Konteynirê ^

Ji ber ku hemî pêvajoyên konteyneran bi rastî li ser pergala mêvandar bi karanîna kernelê xwe veqetandî dimeşînin, ji bo ku bêtir gihandina pêvajoyên konteynerê ji pergala mêvandar re biparêze, LXD îmtiyaza pêvajoyê pêşkêşî dike, ku:

  • Konteynirên îmtiyaz - ev konteynir in ku tê de pêvajoyên bi UID û GID bi heman xwedê re li ser pergala mêvandar re têkildar in. Mînakî, pêvajoyek ku di konteynirek bi UID-ya 0-yê de tê xebitandin hemî mafên gihîştinê wekî pêvajoyek li ser pergala mêvandar a bi UID-ya 0-yê heye. Bi gotinek din, bikarhênerê root di konteynerê de xwediyê hemî mafan e ne tenê di konteynir, lê di heman demê de li ser pergala mêvandar jî ger ew dikare derkeve derveyî cîhê navên veqetandî yên konteynerê.

  • Konteynirên bê îmtiyaz - ev konteynir in ku tê de pêvajoyên xwediyê UID û GID-ê yên bi jimareyek ji 0 heya 65535 in, lê ji bo pergala mêvandar xwedan bi rêzê bi bitsên SubUID û SubGID yên lêzêdekirî têne maske kirin. Mînakî, bikarhênerek bi UID=0 di konteynir de dê li ser pergala mêvandar wekî were dîtin SubUID + UID. Ev pergala mêvandar diparêze ji ber ku ger pêvajoyek di konteynerê de karibe ji cîhê navên xwe yên veqetandî bireve, ew tenê dikare bi pergala mêvandar re wekî pêvajoyek bi UID/GID-ya nenas, pir bilind re têkiliyê deyne.

Ji hêla xwerû ve, konteynerên ku nû hatine afirandin xwedan statûyek bêdestûr in û ji ber vê yekê divê em SubUID û SubGID diyar bikin.

Ka em du pelên veavakirinê biafirînin ku tê de em ê bi rêzê maskeya SubUID û SubGID saz bikin:

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

Ji bo pêkanîna guhertinan, divê karûbarê LXD ji nû ve were destpêkirin:

sudo systemctl restart lxd

Afirandina guhêrbarek torê ya virtual ^

Ji ber ku me berê torê bi karanîna sêrbazê destpêkirinê vekir lxd init û amûrek torê çêkir lxdbr0, wê hingê di vê beşê de em ê bi tenê bi tora LXD-ê re û çawa bi karanîna fermana xerîdar veguhezek virtual (pirek) biafirînin nas bikin.

Diagrama jêrîn destnîşan dike ka çawa guhezek (pirek) mêvandar û konteyneran bi torê ve girêdide:

Taybetmendiyên bingehîn ên LXD - pergalên konteynerê Linux

Konteyner dikarin bi riya torgilokê bi konteynerên din an mêvandarê ku ev konteynir li ser têne serve kirin re têkilî daynin. Ji bo vê yekê, hûn hewce ne ku qertên torê yên virtual yên konteyneran bi guhezek virtual ve girêdin. Em ê pêşî veguhezek biafirînin, û pêwendiya torê ya konteynerê dê di beşên paşîn de bêne girêdan, piştî ku konteynir bixwe hate afirandin.

Fermana jêrîn bi subnet veguhezek diafirîne 10.0.5.0/24 û navnîşana IPv4 10.0.5.1/24, û her weha tê de ipv4.nat da ku konteynir bi karanîna karûbarê NAT-ê bi karanîna mêvandar ve bigihîjin Înternetê:

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

Kontrolkirina navnîşa amûrên torê yên ku di LXD de hene:

lxc network list

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

Her weha hûn dikarin piştrast bikin ku amûrek torê bi karanîna amûra standard a belavkirina Linux-ê hatî afirandin - ip link an 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

Profîla Veavakirinê ^

Her konteynir di LXD de veavakirina xwe heye û dikare wê bi konfigurasyonên cîhanî yên ku jê re tê gotin dirêj bike profîlên veavakirinê. Serîlêdana profîlên vesazkirinê li konteynir modelek kaskadê heye, mînaka jêrîn vê yekê destnîşan dike:

Taybetmendiyên bingehîn ên LXD - pergalên konteynerê Linux

Di vê nimûneyê de, sê profîl di pergala LXD de hatine afirandin: default, hddpool и hostfs. Her sê profîl li konteynirek ku xwedan vesaziyek herêmî ye (herêma gewr) têne sepandin. Tengal default amûrek heye root ku pîvanek heye pool wekhev e ssdpool, lê bi saya modela serîlêdana veavakirina kaskadê, em dikarin profîlek li konteynerê bicîh bikin hddpool ku pîvanek heye pool dê heman parameterê ji profîlê derxe default û konteynir dê veavakirina cîhazê bistîne root bi parametre pool wekhev hddpool, û profîla hostfs bi tenê amûrek nû li konteynerê zêde dike.

Ji bo dîtina navnîşa profîlên mîhengê yên berdest, emrê jêrîn bikar bînin:

lxc profile list

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

Navnîşek bêkêmasî ya emrên berdest ên ji bo xebata bi profîlek re dikare bi lêzêdekirina mifteyê were bidestxistin --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

Biguherîne profîla xwe ^

Profîla veavakirina xwerû default ji bo konteynerê veavakirina qerta torê tune ye û hemî konteynerên ku nû hatine afirandin toreyek wan tune ye, ji bo wan pêdivî ye ku amûrên torê yên herêmî (veqetandî) bi fermanek cihê biafirînin, lê em dikarin di veavakirinê de amûrek torê ya gerdûnî biafirînin. profîla ku dê di navbera hemî konteynerên ku vê profîlê bikar tînin de were parve kirin. Bi vî rengî, tavilê piştî fermana çêkirina konteynirek nû, ew ê xwedî torgilokek bi gihîştina torê bin. Di heman demê de, ti sînor tune; ger hewce be, em her gav dikarin paşê amûrek torê ya herêmî biafirînin.

Fermana jêrîn dê amûrê li profîla veavakirinê zêde bike eth0 cureyê nic bi torê ve girêdayî ye lxdbr0:

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

Girîng e ku bala xwe bidinê ku ji ber ku me bi rastî amûrê li profîla veavakirinê zêde kir, heke me navnîşek IP-ya statîk di cîhazê de destnîşan kir, wê hingê hemî konteynerên ku dê vê profîlê bikar bînin dê heman navnîşana IP-yê parve bikin. Ger hewce ye ku konteynirek bi navnîşana IP-ya statîk a ku ji bo konteynerê hatî veqetandin were afirandin, wê hingê divê hûn di asta konteynerê de (veavakirina herêmî) bi parametreya navnîşana IP-yê, û ne di asta profîlê de veavakirina cîhaza torê biafirînin.

Ka em profîlê kontrol bikin:

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

Di vê profîlê de em dikarin bibînin ku ji bo hemî konteynerên nû hatine afirandin dê du cîhaz werin afirandin:

  • eth0 - Cureyê cîhazê nic bi guhêrbar ve girêdayî ye (pira torê) lxdbr0
  • root - Cureyê cîhazê disk ku hewza hilanînê bikar tîne ssdpool

Afirandina profîlên nû ^

Ji bo ku berê hatî afirandin bikar bînin Storage Pool konteynir, profîlek veavakirinê biafirînin ssdroot ku tê de em ê amûrek mîna lê zêde bikin disk bi xala çiyê / (root) ya ku berê hatî afirandin bikar tîne Storage Pool - ssdpool:

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

Bi heman awayî, em amûrek mîna ava dikin disk, lê di vê rewşê de bi kar tînin Storage Pool - hddpool:

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

Kontrolkirina profîlên veavakirinê:

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

Depoya wêneyê ^

Konteyner ji wêneyên ku bi taybetî belavokên ku xwedan kernelek Linux-ê nîn in têne çêkirin. Ji ber vê yekê, berî ku konteynerê bimeşîne, divê ew ji vê wêneyê were bicîh kirin. Çavkaniya wêneyan depoyek herêmî ye ku tê de wêne ji depoyên derveyî têne dakêşandin.

Depoyên wêneyê yên dûr ^

Bi xwerû, LXD ji bo wergirtina wêneyan ji sê çavkaniyên dûr ve hatî mîheng kirin:

  • ubuntu: (ji bo wêneyên Ubuntu yên stabîl)
  • ubuntu-rojane: (ji bo wêneyên rojane yên Ubuntu)
  • dîmen: (ji bo komek belavokên din)

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

Mînakî, depo ubuntu: wêneyên jêrîn hene:

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

Ji bo nîşandana hejmareke sînorkirî ya stûnan me vebijark bikar anî -c bi parametre dasut, û her weha dirêjahiya navnîşê bi fermanê re sînordar kir head.

Parzûnkirin heye ku navnîşek wêneyan nîşan bide. Fermana jêrîn dê hemî mîmarên belavkirinê yên berdest navnîş bike 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        |
+------------------------------+--------------------------------------+--------------+

Depoya wêneya herêmî ^

Ji bo ku hûn dest bi karanîna konteynerê bikin, hûn hewce ne ku wêneyek ji depoya gerdûnî li ya herêmî zêde bikin local:. Naha depoya herêmî vala ye, ferman dê vê yekê piştrast bike lxc image list. Heke rêbaz list depoyek diyar neke, wê hingê depoya herêmî dê ji hêla xwerû ve were bikar anîn - local:

lxc image list local:

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

Wêneyên di depoyê de bi rêbazên jêrîn têne rêve kirin:

tîma
description

wêneyê lxc navê alê
Navnavên wêneyan birêve bibin

wêneyê lxc kopî
Wêneyên di navbera serveran de kopî bikin

wêneyê lxc delete
Wêneyan jêbirin

wêneyê lxc weşandin
Taybetmendiyên wêneyê biguherînin

wêneyê lxc eksport
Wêne derxînin û dakêşin

wêneyê lxc malanîn
Wêneyan di firotgeha wêneyê de derxînin

wêneyê lxc info
Li ser wêneyan agahdariya kêrhatî nîşan bide

wêneyê lxc rêzok
Lîsteya wêneyan

wêneyê lxc hênikkirin
Wêneyan nûve bikin

wêneyê lxc rêdan
Taybetmendiyên wêneyê nîşan bide

Wêne li depoya herêmî ji ya gerdûnî kopî bikin images::

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

Image copied successfully!

Werin em navnîşek hemî wêneyên ku niha di depoya herêmî de berdest in nîşan bidin local::

lxc image -c lfdatsu list local:

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

Veavakirina LXD ^

Ji bilî moda înteraktîf, LXD di heman demê de moda sazkirinê ya ne-înteraktîf piştgirî dike, ev gava ku veavakirin di forma pelê YAML de tête diyar kirin, formatek taybetî ya ku dihêle hûn hemî veavakirinê bi yekcarî saz bikin, ji darvekirinê derbas bikin. ji gelek fermanên înteraktîf ên ku li jor di vê gotarê de hatine nîqaş kirin, di nav de veavakirina torê, afirandina profîlên vesazkirinê, hwd. Em ê vê deverê li vir veneşêrin, hûn dikarin wê bi serê xwe kontrol bikin. di belgeyê de.

Emrê înteraktîf Next lxc config ya ku em ê lê binerin destûrê dide we ku hûn veavakirinê saz bikin. Mînakî, ji bo ku pê ewle bibin ku wêneyên dakêşandî yên li depoya herêmî bixweber ji depoyên gerdûnî nayên nûve kirin, em dikarin vê tevgerê bi fermana jêrîn çalak bikin:

lxc config set images.auto_update_cached=false

Afirandin û birêvebirina konteynerek ^

Ji bo afirandina konteynerek fermanê bikar bînin lxc init ku nirx têne derbas kirin репозиторий:образ û dûv re jî nasnameya xwestî ya ji bo konteynerê. Depo dikare wekî herêmî were destnîşan kirin local: her gerdûnî jî wisa ye. Ger depo ne diyar be, wê hingê ji hêla xwerû depoya herêmî ji bo lêgerîna wêneyê tê bikar anîn. Ger wêne ji depoya gerdûnî were destnîşan kirin, wê hingê wêne dê pêşî li depoya herêmî were dakêşandin û dûv re ji bo çêkirina konteynerê were bikar anîn.

Ka em emrê jêrîn bimeşînin da ku konteynera xweya yekem biafirînin:

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

Ka em bi rêzê li bişkokên fermanê yên ku em li vir bikar tînin binêrin:

  • alpine3 - Ji bo wêneyê ku berê li depoya herêmî hatî barkirin, navekî (navdêr) tê destnîşankirin. Ger navnav ji bo vê wêneyê nehatibe afirandin, wê hingê hûn dikarin her gav bi wêneyê wê vebêjin Şopa tilî ku di tabloyê de tê nîşandan.
  • alp - Nasnameyê ji bo konteynerê destnîşan dike
  • --storage - Ev kilît di kîjanê de nîşan dide Storage Pool konteynir dê bê çêkirin
  • --profile - Van bişkokan vesazkirinê ji profîlên mîhengê yên berê hatine afirandin li konteynerê bicîh dikin

Em konteynerê dest pê dikin, ku dest bi destpêkirina pergala destpêkê ya belavkirinê dike:

lxc start alp

Her weha hûn dikarin fermanê bikar bînin lxc launch ku destûrê dide te ku hûn tîmên hev bikin lxc init и lxc start di yek operasyonê de.

Kontrolkirina rewşa konteynerê:

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

Kontrolkirina veavakirina konteynerê:

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

Di beşa profiles em dikarin piştrast bikin ku ev konteynir du profîlên veavakirinê bikar tîne - default и hddroot. Di beşa devices ji ber ku cîhaza torê di asta profîlê de hate afirandin, em tenê dikarin yek amûrek tespît bikin default. Ji bo ku hûn hemî amûrên ku ji hêla konteynerê ve têne bikar anîn bibînin, hûn hewce ne ku mifteyek lê zêde bikin --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: ""

Sazkirina navnîşana IP-ya statîk ^

Ger em hewl bidin ku navnîşek IP-ê ji bo amûrek torê saz bikin eth0 kom lxc config device set alp ji bo veavakirina konteynerê hatî armanc kirin, wê hingê em ê xeletiyek werbigirin ku dê rapor bike ku cîhaz tune ye ji ber ku cîhaz eth0 ku ji hêla konteynerê ve tê bikar anîn girêdayî profîlê ye default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Bê guman em dikarin ji bo navnîşanek IP-ya statîk saz bikin eth0 cîhazên di profîlê de, lê ew ê ji bo hemî konteynerên ku dê vê profîlê bikar bînin yek be. Ji ber vê yekê, bila em amûrek ku ji konteynerê re hatî veqetandin zêde bikin:

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

Dûv re hûn hewce ne ku konteynerê ji nû ve bidin destpêkirin:

lxc restart alp

Ger em niha li veavakirina konteynerê binêrin, ne hewce ye ku em vebijarkê bikar bînin --expanded ji bo dîtina amûrê torê eth0, ji ber ku me ew di asta konteynerê de afirand û ew li ser heman cîhazê ji profîlê veqetiya 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: ""

Rakirina konteynir ^

Ji bo rakirina konteynerek, fermanê bikar bînin lxc delete, lê berî rakirina konteynerê, divê ew bi karanîna fermanê were sekinandin lxc stop:

lxc stop alp

lxc list

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

Piştî ku me piştrast kir ku rewşa konteynerê bûye BELAVIR, ew dikare jê were rakirin Storage Pool:

lxc delete alp

Gihîştina konteyner ^

Ji bo ku emrên di konteynerek rasterast de bicîh bikin, girêdanên torê derbas bikin, fermanê bikar bînin lxc exec ku fermanan di konteynerê de bêyî destpêkirina şêlê pergalê pêk tîne. Heke hûn hewce ne ku fermanek di şêlê de bi karanîna qalibên şêlê yên wekî guhêrbar, beralîkirina pelan (boriyek) hwd pêk bînin, wê hingê hûn hewce ne ku şêlê bi eşkere dest pê bikin û fermanê wekî mifteyê derbas bikin, mînakî:

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

Ferman karakterek revê ya taybetî bikar anî ji bo karaktera taybetî $ da ku guherbar $HOME li ser makîneya mêvandar nehat şîrove kirin, lê tenê di hundurê konteynerê de hate şîrove kirin.

Di heman demê de gengaz e ku meriv moda şêlê înteraktîf bide dest pê kirin, û dûv re bi darvekirina bişkojka germê danişînê bi dawî bike CTRL+D:

lxc exec alp -- /bin/sh

Rêveberiya çavkaniyê ya konteyner ^

Di LXD de, hûn dikarin çavkaniyên konteynerê bi karanîna komek mîhengek taybetî birêve bibin. Navnîşek bêkêmasî ya parametreyên veavakirina konteynerê dikare were dîtin di belgeyê de.

Sînorkirina çavkaniya RAM ^

Parîsê limits.memory mîqdara RAM-a ku ji konteynerê re peyda dibe sînor dike. Nirx hejmarek û yek ji wan e paşgirên berdest.

Ka em sînorê RAM-ê ya konteynerê li 256 MB destnîşan bikin:

lxc config set alp limits.memory 256MB

Di heman demê de, ji bo sînorkirina bîranînê pîvanên din jî hene:

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

tîma lxc config show destûrê dide te ku tevahiya veavakirina konteynerê nîşan bide, tevî sînorê çavkaniyê yê sepandî ku hatî danîn:

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

Sînorê çavkaniya CPU ^

Gelek awayên sînorkirina çavkaniyên CPU hene. cureyên sînorkirinên:

  • limit.cpu - konteynirek bi yek an jî zêdetir core CPU ve girêdide
  • limits.cpu.allowance - Gava ku dem derbas bû, an kotayên plansazkerê CFS-ê, an dema ku ji sedî derbas bû mekanîzmaya parvekirina çavkaniya CPU-ya gerdûnî birêve dibe
  • limits.cpu.priority - Pêşengiya plansazker dema ku gelek mînakên ku komek pêvajoyan parve dikin ji sedî heman pêvajoyê têne destnîşankirin

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

Sînorkirina cîhê dîskê ^

Ji bilî qedexeyên weha limits.read, limits.write Di heman demê de em dikarin mîqdara cîhê dîskê ku ji hêla konteynerê ve tê vexwarin jî sînordar bikin (tenê bi ZFS an BTRFS re dixebite):

lxc config device set alp root size=2GB

Piştî sazkirinê, di parametreyê de devices.root.size Em dikarin sînorê destnîşankirî verast bikin:

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

Ji bo dîtina kotayên dîska hatî bikar anîn em dikarin ji fermanê bistînin 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

Tevî vê rastiyê ku me ji bo cîhaza root ya konteynerê 2 GB sînorek daniye jî, karûbarên pergalê yên wekî df dê vê sînordarkirinê nebînin. Ji bo vê yekê, em ê ceribandinek piçûk bikin û fêr bibin ka ew çawa dixebite.

Werin em di heman de 2 konteynerên nû yên wekhev biafirînin 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
+------+---------+------------------+------+-----------+-----------+
| NAME |  STATE  |       IPV4       | IPV6 |   TYPE    | SNAPSHOTS |
+------+---------+------------------+------+-----------+-----------+
| alp1 | RUNNING | 10.0.5.46 (eth0) |      | CONTAINER | 0         |
+------+---------+------------------+------+-----------+-----------+
| alp2 | RUNNING | 10.0.5.30 (eth0) |      | CONTAINER | 0         |
+------+---------+------------------+------+-----------+-----------+

Ka em pelek 1 GB di yek ji konteyneran de biafirînin:

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

Ka em piştrast bikin ku pel hatiye afirandin:

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

Ger em li konteynera duyemîn mêze bikin, hebûna pelek li heman cîhî kontrol bikin, wê hingê ev pel dê ne li wir be, ya ku tê hêvî kirin, ji ber ku konteynir bi xwe têne afirandin. Volume Storage di heman Storage Pool:

lxc exec alp2 -- ls -lh
total 0

Lê bila em nirxên ku ew hilberîne bidin ber hev df li ser yek û konteynerê din:

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

Alav /dev/loop1 wekî dabeşkirina root-ê hatî çêkirin Storage Pool ku van konteyneran bikar tînin, ji ber vê yekê ew qebareya wê di navbera du kesan de parve dikin.

Statîstîkên mezaxtina çavkaniyê ^

Hûn dikarin bi karanîna fermanê statîstîkên karanîna çavkaniyê ji bo konteynerek bibînin:

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

Bi wêneyan re dixebitin ^

LXD xwedan şiyana çêkirina wêneyan û sererastkirina rewşa konteynerê ji wan e.

Ji bo afirandina wêneyek, emrê jêrîn bicîh bikin:

lxc snapshot alp snapshot1

Tîma lxc snapshot kilît tune list, ji ber vê yekê, ji bo dîtina navnîşa wêneyan hûn hewce ne ku emrê ku agahdariya gelemperî li ser konteynerê nîşan dide bikar bînin:

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

Hûn dikarin bi karanîna fermanê konteynerek ji wêneyek nûve bikin lxc restore diyarkirina konteynera ku dê ji bo restorasyonê were kirin û navnavê wêneya wêneyê:

lxc restore alp snapshot1

Fermana jêrîn ji bo jêbirina wêneyek tê bikar anîn. Ji kerema xwe zanibin ku hevoksaziya fermanê ne mîna hemî yên din e; li vir hûn hewce ne ku li dû navê konteynerê xêzek pêşde diyar bikin. Ger xêz ji holê were rakirin, wê hingê fermana jêbirina wêneyek wekî fermanek jêbirina konteynir tê şîrove kirin!

lxc delete alp/snapshot1

Di mînaka li jor de, me li dîmenên bi navê bêdewlet mêze kir. LXD xwedan celebek wêneyek din e - dewletdar, ku rewşa heyî ya hemî pêvajoyên di konteynerê de xilas dike. Gelek taybetmendiyên balkêş û bikêr hene ku bi dîmenên dewletparêz ve girêdayî ne.

Êdî çi? ^

  • Modulek ji bo pêşdebirên Python heye PyLXD ku API-ê ji LXD re peyda dike

NAVKIRIN 10.04.2020/15/00 XNUMX:XNUMX: Navîgasyon zêde kirin

Source: www.habr.com

Add a comment