Mga pangunahing tampok ng LXD - Linux container system

Mga pangunahing tampok ng LXD - Linux container system

LXD ay ang susunod na henerasyon ng system container manager, kaya sabi nito pinagmulan. Nag-aalok ito ng user interface na katulad ng mga virtual machine, ngunit gumagamit ng mga lalagyan ng Linux sa halip.

LXD core ay isang privileged daemon (isang serbisyong tumatakbo na may mga karapatan sa ugat) na nagbibigay ng REST API sa pamamagitan ng lokal na unix socket, gayundin sa pamamagitan ng network kung naka-install ang naaangkop na configuration. Ang mga kliyente, tulad ng command line tool na ibinigay kasama ng LXD, ay gumagawa ng mga kahilingan sa pamamagitan ng REST API na ito. Nangangahulugan ito na kung nag-a-access ka sa isang lokal na host o isang malayong host, lahat ay gumagana nang pareho.

Sa artikulong ito, hindi namin tatalakayin nang detalyado ang mga konsepto ng LXD, hindi namin isasaalang-alang ang lahat ng magagamit na mga kakayahan na nakabalangkas sa dokumentasyon, kabilang ang kamakailang pagpapatupad sa pinakabagong mga bersyon ng LXD ng suporta para sa mga virtual machine ng QEMU na kahanay ng mga lalagyan. Sa halip, matututunan lang natin ang mga pangunahing kaalaman sa pamamahala ng container - pag-set up ng mga storage pool, networking, pagpapatakbo ng container, paglalapat ng mga limitasyon sa resource, at kung paano gumamit ng mga snapshot para makakuha ka ng pangunahing pag-unawa sa LXD at gumamit ng mga container sa Linux.

Para sa kumpletong impormasyon, mangyaring sumangguni sa opisyal na mapagkukunan:

Nabigasyon

Pag-install LXD ^

Pag-install ng LXD sa mga distribusyon ng Ubuntu ^

Sa Ubuntu 19.10 distribution package lxd ay may broadcast sa snap package:

apt search lxd

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

Nangangahulugan ito na dalawang pakete ang mai-install nang sabay-sabay, ang isa bilang isang package ng system at ang isa bilang isang snap package. Ang pag-install ng dalawang package sa isang system ay maaaring lumikha ng ilang problema kung saan ang system package ay maaaring maging ulila kung ang snap package ay inalis ng snap package manager.

Maghanap ng package lxd sa snap repository maaari mong gamitin ang sumusunod na command:

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

Sa pamamagitan ng pagpapatakbo ng utos list maaari mong tiyakin na ang pakete lxd hindi pa naka-install:

snap list

Name  Version    Rev   Tracking  Publisher   Notes
core  16-2.43.3  8689  stable    canonicalβœ“  core

Sa kabila ng katotohanan na ang LXD ay isang snap package, dapat itong mai-install sa pamamagitan ng system package lxd, na lilikha ng kaukulang grupo sa system, ang mga kinakailangang kagamitan sa /usr/bin at iba pa

sudo apt update
sudo apt install lxd

Siguraduhin nating naka-install ang package bilang snap package:

snap list

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

Pag-install ng LXD sa mga pamamahagi ng Arch Linux ^

Upang mai-install ang LXD package sa system, kailangan mong patakbuhin ang mga sumusunod na command, i-update ng una ang listahan ng mga package sa system na magagamit sa repository, ang pangalawa ay direktang i-install ang package:

sudo pacman -Syyu && sudo pacman -S lxd

Pagkatapos i-install ang package, upang pamahalaan ang LXD ng isang regular na user, dapat itong idagdag sa pangkat ng system lxd:

sudo usermod -a -G lxd user1

Siguraduhin natin ang gumagamit user1 idinagdag sa pangkat lxd:

id -Gn user1

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

Kung ang grupo lxd ay hindi nakikita sa listahan, pagkatapos ay kailangan mong i-activate muli ang session ng user. Upang gawin ito, kailangan mong mag-log out at mag-log in sa ilalim ng parehong user.

I-activate sa systemd nilo-load ang serbisyo ng LXD sa pagsisimula ng system:

sudo systemctl enable lxd

Simulan natin ang serbisyo:

sudo systemctl start lxd

Sinusuri ang katayuan ng serbisyo:

sudo systemctl status lxd

Storage LXD (Storage) ^

Bago magsimula ang pagsisimula, kailangan nating maunawaan kung paano lohikal na nakaayos ang storage sa LXD.

Imbakan (Imbakan) binubuo ng mula sa isa o higit pa Pool ng Imbakan na gumagamit ng isa sa mga sinusuportahang file system gaya ng ZFS, BTRFS, LVM o mga regular na direktoryo. Bawat Pool ng Imbakan ay nahahati sa mga volume (Dami ng Imbakan) na naglalaman ng mga larawan, lalagyan, o data para sa iba pang layunin.

  • Mga Larawan - ang mga ito ay espesyal na pinagsama-samang mga pamamahagi nang walang Linux kernel at makukuha mula sa mga panlabas na mapagkukunan
  • Mga lalagyan - ang mga ito ay naka-deploy na mga distribusyon mula sa mga larawan, handa nang gamitin
  • Mga snapshot - ito ay mga snapshot ng estado ng mga container na maaari mong balikan

Mga pangunahing tampok ng LXD - Linux container system

Para pamahalaan ang storage sa LXD, gamitin ang command lxc storage isang sertipiko kung saan maaari mong makuha sa pamamagitan ng pagtukoy ng susi - lxc storage --help

Ang sumusunod na command ay nagpapakita ng isang listahan ng lahat Pool ng Imbakan sa LXD storage:

lxc storage list

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

Upang tingnan ang isang listahan ng lahat Dami ng Imbakan sa napili Pool ng Imbakan naglilingkod sa pangkat 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       |
+-----------+----------------------------------+-------------+---------+

Gayundin, kung para sa Pool ng Imbakan Kapag lumilikha, napili ang BTRFS file system, pagkatapos ay kumuha ng listahan Dami ng Imbakan o subvolume sa interpretasyon ng BTRFS, maaari mong gamitin ang toolkit ng file system na ito:

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

Sinisimulan ang LXD ^

Bago gumawa at gumamit ng mga container, dapat kang magsagawa ng pangkalahatang pagsisimula ng LXD na gumagawa at nagko-configure sa network at storage. Magagawa ito nang manu-mano gamit ang mga karaniwang command ng kliyente na magagamit sa listahan sa pamamagitan ng pagtawag sa command lxc --help o gamit ang initialization wizard lxd init pagsagot sa ilang katanungan.

Pagpili ng file system para sa Storage Pool ^

Sa panahon ng pagsisimula, nagtatanong ang LXD ng ilang katanungan, kabilang ang pagtukoy sa uri ng file system para sa default Pool ng Imbakan. Bilang default, ang BTRFS file system ay pinili para dito. Imposibleng lumipat sa isa pang FS pagkatapos ng paglikha. Upang pumili ng isang FS ito ay iminungkahi talahanayan ng paghahambing ng tampok:

tampok
Directory
Mga Btrf
LVM
ZFS
CEPH

Na-optimize na imbakan ng imahe
hindi
oo
oo
oo
oo

Na-optimize na paggawa ng instance
hindi
oo
oo
oo
oo

Na-optimize na paggawa ng snapshot
hindi
oo
oo
oo
oo

Na-optimize na paglipat ng imahe
hindi
oo
hindi
oo
oo

Na-optimize na paglilipat ng instance
hindi
oo
hindi
oo
oo

kopyahin sa pagsulat
hindi
oo
oo
oo
oo

Nakabatay sa block
hindi
hindi
oo
hindi
oo

Instant cloning
hindi
oo
oo
oo
oo

Ang driver ng storage ay magagamit sa loob ng isang lalagyan
oo
oo
hindi
hindi
hindi

I-restore mula sa mas lumang mga snapshot (hindi pinakabagong)
oo
oo
oo
hindi
oo

Mga quota sa imbakan
oo(*)
oo
oo
oo
hindi

Sinisimulan ang network at Storage Pool gamit ang wizard ^

Ang susunod na command na titingnan natin ay nagmumungkahi ng pag-set up ng mga pangunahing bahagi ng LXD sa pamamagitan ng pagsagot sa mga simpleng tanong gamit ang initialization wizard.

Patakbuhin ang utos lxc init at ilagay ang mga sagot sa mga tanong pagkatapos ng colon gaya ng ipinapakita sa halimbawa sa ibaba o baguhin ang mga ito ayon sa iyong mga kundisyon:

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

Paggawa ng karagdagang Storage Pool ^

Sa nakaraang hakbang na aming ginawa Pool ng Imbakan na binigyan ng pangalan ssdpool at ang file na kung saan ay matatagpuan sa aking system sa /var/lib/lxd/disks/ssdpool.img. Ang address ng file system na ito ay tumutugma sa pisikal na SSD drive sa aking PC.

Ang mga sumusunod na aksyon, upang mapalawak ang pag-unawa sa papel na ginagampanan ni Pool ng Imbakan sa repositoryo, gagawa kami ng pangalawa Pool ng Imbakan na pisikal na matatagpuan sa ibang uri ng disk, HDD. Ang problema ay hindi ka pinapayagan ng LXD na lumikha Pool ng Imbakan wala sa address /var/lib/lxd/disks/ at kahit ang mga simbolikong link ay hindi gagana, tingnan ang tugon ng developer. Maaari naming lampasan ang limitasyong ito sa panahon ng pagsisimula/pag-format Pool ng Imbakan sa pamamagitan ng pagtukoy sa halaga bilang isang block device sa halip na ang path sa loopback file sa pamamagitan ng pagtukoy nito sa key source.

Kaya, bago lumikha Pool ng Imbakan kailangan mong tukuyin ang isang loopback file o isang umiiral na partition sa iyong file system na gagamitin nito. Upang gawin ito, gagawa kami at gagamit ng isang file na lilimitahan namin sa laki sa 10GB:

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

Ikonekta natin ang loopback file sa isang libreng loopback device:

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

/dev/loop1

Salamat sa susi --show ang pagpapatupad ng command ay nagbabalik sa screen ng pangalan ng device kung saan nakakonekta ang aming loopback file. Kung kinakailangan, maaari kaming magpakita ng listahan ng lahat ng abalang device ng ganitong uri upang matiyak na tama ang aming mga aksyon:

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

Mula sa listahan makikita mo na mayroon ang device /dev/loop1 isinama ang loopback file /mnt/work/lxd/hddpool.img, at sa device /dev/loop0 isinama ang loopback file /var/lib/lxd/disks/ssdpool.img na tumutugma sa default Pool ng Imbakan.

Ang sumusunod na command ay lumilikha ng bago Pool ng Imbakan sa LXD base sa loopback file na kakahanda lang namin. I-format ng LXD ang loopback na file /mnt/work/lxd/hddpool.img sa device /dev/loop1 para sa BTRFS file system:

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

Ipakita natin ang isang listahan ng lahat Pool ng Imbakan sa screen:

lxc storage list

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

Pagtaas ng Laki ng Storage Pool ^

Pagkatapos ng paglikha Pool ng Imbakan, kung kinakailangan, maaari itong palawakin. Para sa Pool ng Imbakan batay sa BTRFS file system, patakbuhin ang mga sumusunod na command:

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

Awtomatikong paglalagay ng loopback file sa loopback device slot ^

Mayroon kaming isang maliit na problema, kapag nire-reboot ang host system, ang file /mnt/work/lxd/hddpool.img ay "lilipad" palabas ng device /dev/loop1 at ang serbisyo ng LXD ay mag-crash kapag naglo-load dahil hindi ito makikita sa device na ito. Upang malutas ang problemang ito kailangan mong lumikha ng isang serbisyo ng system na maglalagay ng file na ito sa device /dev/loop1 kapag nag-boot ang host system.

Lumikha tayo yunit uri ng file serbisyo Π² /etc/systemd/system/ para sa SystemD initialization system:

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

I-activate ang serbisyo:

sudo systemctl enable lxd-hddpool

Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service β†’ /etc/systemd/system/lxd-hddpool.service.

Pagkatapos i-restart ang host system, sinusuri namin ang katayuan ng serbisyo:

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

Mula sa output maaari naming i-verify na ang estado ng serbisyo ay aktibo, sa kabila ng katotohanan na ang pagpapatupad ng aming script mula sa isang utos ay nakumpleto, pinapayagan kami ng opsyon na gawin ito RemainAfterExit=true.

Kaligtasan. Mga Pribilehiyo sa Lalagyan ^

Dahil ang lahat ng mga proseso ng container ay aktwal na tumatakbo nang hiwalay sa host system gamit ang kernel nito, upang higit pang maprotektahan ang pag-access ng mga proseso ng container sa host system, nag-aalok ang LXD ng pribilehiyo ng proseso, kung saan:

  • Mga Pribilehiyo na Lalagyan - ito ay mga lalagyan kung saan ang mga prosesong may UID at GID ay tumutugma sa parehong may-ari tulad ng sa host system. Halimbawa, ang isang prosesong tumatakbo sa isang container na may UID na 0 ay may parehong mga karapatan sa pag-access tulad ng isang proseso sa host system na may UID na 0. Sa madaling salita, ang root user sa container ay may lahat ng karapatan hindi lamang sa ang lalagyan, ngunit gayundin sa host system kung maaari siyang lumabas sa nakahiwalay na namespace ng lalagyan.

  • Mga lalagyan na walang karapatan - ito ay mga lalagyan kung saan ang mga proseso ay pagmamay-ari ng may-ari ng UID at GID na may numero mula 0 hanggang 65535, ngunit para sa host system ang may-ari ay naka-mask gamit ang idinagdag na SubUID at SubGID bits, ayon sa pagkakabanggit. Halimbawa, ang isang user na may UID=0 sa isang container ay makikita sa host system bilang SubUID + UID. Pinoprotektahan nito ang host system dahil kung ang anumang proseso sa container ay makakatakas sa nakahiwalay na namespace nito, maaari lamang itong makipag-ugnayan sa host system bilang isang proseso na may hindi alam, napakataas na UID/GID.

Bilang default, ang mga bagong likhang container ay may unprivileged status at samakatuwid dapat tayong tumukoy ng SubUID at SubGID.

Gumawa tayo ng dalawang configuration file kung saan itatakda natin ang mask para sa SubUID at SubGID, ayon sa pagkakabanggit:

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

Upang mailapat ang mga pagbabago, dapat na i-restart ang serbisyo ng LXD:

sudo systemctl restart lxd

Paglikha ng virtual network switch ^

Dahil dati naming sinimulan ang network gamit ang initialization wizard lxd init at gumawa ng network device lxdbr0, pagkatapos sa seksyong ito ay makikilala lamang natin ang networking sa LXD at kung paano lumikha ng isang virtual switch (tulay) gamit ang command ng kliyente.

Ipinapakita ng sumusunod na diagram kung paano ikinokonekta ng switch (tulay) ang host at mga container sa isang network:

Mga pangunahing tampok ng LXD - Linux container system

Maaaring makipag-ugnayan ang mga container sa pamamagitan ng network sa iba pang container o sa host kung saan inihahatid ang mga container na ito. Upang gawin ito, kailangan mong i-link ang mga virtual network card ng mga container gamit ang isang virtual switch. Gagawa muna kami ng switch, at mali-link ang mga interface ng network ng container sa mga susunod na kabanata, pagkatapos magawa ang container mismo.

Ang sumusunod na command ay lumilikha ng switch na may subnet 10.0.5.0/24 at IPv4 address 10.0.5.1/24, at kasama rin ipv4.nat upang ma-access ng mga lalagyan ang Internet sa pamamagitan ng host gamit ang serbisyo ng NAT:

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

Sinusuri ang listahan ng mga network device na available sa LXD:

lxc network list

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

Maaari mo ring i-verify na ang isang network device ay nalikha gamit ang karaniwang tool ng pamamahagi ng Linux - ip link o 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

Profile ng Configuration ^

Ang bawat container sa LXD ay may sarili nitong configuration at maaari itong palawigin gamit ang globally declared configurations na tinatawag mga profile ng pagsasaayos. Ang paglalapat ng mga profile ng configuration sa isang container ay may modelong cascade, ipinapakita ito ng sumusunod na halimbawa:

Mga pangunahing tampok ng LXD - Linux container system

Sa halimbawang ito, tatlong profile ang ginawa sa LXD system: default, hddpool ΠΈ hostfs. Inilapat ang lahat ng tatlong profile sa isang lalagyan na may lokal na configuration (gray na lugar). Profile default may device root na may parameter pool ay pantay sa ssdpool, ngunit salamat sa cascade configuration application model, maaari kaming maglapat ng profile sa container hddpool na may parameter pool ay i-override ang parehong parameter mula sa profile default at matatanggap ng container ang configuration ng device root may parameter pool katumbas hddpool, at ang profile hostfs nagdaragdag lang ng bagong device sa container.

Upang makita ang listahan ng mga available na profile ng configuration, gamitin ang sumusunod na command:

lxc profile list

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

Ang isang kumpletong listahan ng mga magagamit na command para sa pagtatrabaho sa isang profile ay maaaring makuha sa pamamagitan ng pagdaragdag ng susi --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

Pag-edit ng iyong profile ^

Default na profile ng pagsasaayos default ay walang configuration ng network card para sa container at lahat ng bagong likhang container ay walang network, para sa kanila kinakailangan na lumikha ng mga lokal (nakatuon) na device sa network na may hiwalay na command, ngunit maaari tayong lumikha ng isang global network device sa configuration profile na ibabahagi sa pagitan ng lahat ng container gamit ang profile na ito. Sa ganitong paraan, kaagad pagkatapos ng command na gumawa ng bagong container, magkakaroon sila ng network na may access sa network. Kasabay nito, walang mga paghihigpit; maaari kaming palaging lumikha ng isang lokal na aparato sa network sa ibang pagkakataon kung kinakailangan.

Idaragdag ng sumusunod na command ang device sa configuration profile eth0 uri nic konektado sa network lxdbr0:

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

Mahalagang tandaan na dahil talagang idinagdag namin ang device sa configuration profile, kung tumukoy kami ng static na IP address sa device, ang lahat ng container na gagamit sa profile na ito ay magbabahagi ng parehong IP address. Kung may pangangailangang gumawa ng container na may nakalaan na static na IP address para sa container, dapat kang gumawa ng configuration ng network device sa antas ng container (lokal na configuration) gamit ang parameter ng IP address, at hindi sa antas ng profile.

Tingnan natin ang profile:

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

Sa profile na ito makikita natin na para sa lahat ng bagong likhang container ay gagawa ng dalawang device:

  • eth0 β€” Uri ng device nic nakakonekta sa isang switch (tulay ng network) lxdbr0
  • root β€” Uri ng device disk na gumagamit ng storage pool ssdpool

Paglikha ng mga bagong profile ^

Upang gamitin ang naunang ginawa Pool ng Imbakan container, lumikha ng profile ng pagsasaayos ssdroot kung saan magdaragdag kami ng device na tulad ng disk may mount point / (ugat) gamit ang naunang ginawa Pool ng Imbakan - ssdpool:

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

Katulad nito, lumikha kami ng isang aparato tulad ng disk, ngunit sa kasong ito gamit Pool ng Imbakan - hddpool:

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

Sinusuri ang mga profile ng pagsasaayos:

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

Imbakan ng larawan ^

Ang mga lalagyan ay nilikha mula sa mga imahe na espesyal na pinagsama-samang mga pamamahagi na walang Linux kernel. Samakatuwid, bago patakbuhin ang lalagyan, dapat itong i-deploy mula sa larawang ito. Ang pinagmulan ng mga larawan ay isang lokal na imbakan kung saan dina-download ang mga larawan mula sa mga panlabas na imbakan.

Mga remote na imbakan ng imahe ^

Bilang default, ang LXD ay naka-configure upang makatanggap ng mga larawan mula sa tatlong malalayong mapagkukunan:

  • ubuntu: (para sa mga stable na imahe ng Ubuntu)
  • ubuntu-araw-araw: (para sa araw-araw na mga imahe ng Ubuntu)
  • mga imahe: (para sa isang grupo ng iba pang mga distro)

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

Halimbawa, imbakan ubuntu: ay may mga sumusunod na larawan:

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

Upang magpakita ng limitadong bilang ng mga column ginamit namin ang opsyon -c may mga parameter dasut, at limitado rin ang haba ng listahan gamit ang command head.

Ang pag-filter ay magagamit upang magpakita ng isang listahan ng mga larawan. Ililista ng sumusunod na command ang lahat ng magagamit na mga arkitektura ng pamamahagi 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        |
+------------------------------+--------------------------------------+--------------+

Lokal na imbakan ng imahe ^

Upang simulan ang paggamit ng lalagyan, kailangan mong magdagdag ng isang imahe mula sa pandaigdigang repositoryo sa lokal local:. Ngayon ang lokal na imbakan ay walang laman, titiyakin ito ng utos lxc image list. Kung ang pamamaraan list huwag tukuyin ang isang imbakan, pagkatapos ay ang lokal na imbakan ay gagamitin bilang default - local:

lxc image list local:

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

Ang mga larawan sa repositoryo ay pinamamahalaan gamit ang mga sumusunod na pamamaraan:

Koponan
ОписаниС

lxc na imahe bansag
Pamahalaan ang mga alias ng larawan

lxc na imahe kopyahin
Kopyahin ang mga larawan sa pagitan ng mga server

lxc na imahe alisin
Tanggalin ang mga imahe

lxc na imahe i-edit
I-edit ang mga katangian ng larawan

lxc na imahe i-export
I-export at i-download ang mga larawan

lxc na imahe angkat
Mag-import ng mga larawan sa tindahan ng larawan

lxc na imahe info
Magpakita ng kapaki-pakinabang na impormasyon tungkol sa mga larawan

lxc na imahe listahan
Maglista ng mga larawan

lxc na imahe papanariwain
I-refresh ang mga larawan

lxc na imahe Ipakita
Ipakita ang mga katangian ng larawan

Kopyahin ang larawan sa lokal na imbakan mula sa pandaigdigan images::

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

Image copied successfully!

Ipakita natin ang isang listahan ng lahat ng mga larawan na kasalukuyang magagamit sa lokal na imbakan local::

lxc image -c lfdatsu list local:

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

LXD Configuration ^

Bilang karagdagan sa interactive na mode, sinusuportahan din ng LXD ang isang non-interactive na mode ng pag-install ng configuration, ito ay kapag ang configuration ay tinukoy sa anyo ng isang YAML file, isang espesyal na format na nagbibigay-daan sa iyo upang i-install ang buong configuration nang sabay-sabay, na lumalampas sa pagpapatupad ng maraming interactive na command na tinalakay sa itaas sa artikulong ito, kabilang ang configuration ng network, paglikha ng mga profile ng configuration, atbp. Hindi namin sasaklawin ang lugar na ito dito, maaari mo itong suriin nang mag-isa. sa dokumentasyon.

Susunod na interactive na utos lxc config na aming titingnan ay nagbibigay-daan sa iyo upang itakda ang pagsasaayos. Halimbawa, upang matiyak na ang mga na-download na larawan sa lokal na imbakan ay hindi awtomatikong na-update mula sa mga pandaigdigang imbakan, maaari naming paganahin ang gawi na ito gamit ang sumusunod na command:

lxc config set images.auto_update_cached=false

Paglikha at pamamahala ng isang lalagyan ^

Para gumawa ng container gamitin ang command lxc init kung saan ipinapasa ang mga halaga Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:ΠΎΠ±Ρ€Π°Π· at pagkatapos ay ang gustong ID para sa lalagyan. Maaaring tukuyin ang repository bilang lokal local: gayundin ang alinmang pandaigdigan. Kung ang imbakan ay hindi tinukoy, pagkatapos ay sa pamamagitan ng default ang lokal na imbakan ay ginagamit upang maghanap para sa imahe. Kung tinukoy ang larawan mula sa pandaigdigang repositoryo, ida-download muna ang larawan sa lokal na repositoryo at pagkatapos ay gagamitin sa paggawa ng container.

Patakbuhin natin ang sumusunod na command upang likhain ang ating unang lalagyan:

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

Tingnan natin ang mga command key na ginagamit natin dito sa pagkakasunud-sunod:

  • alpine3 β€” Tinukoy ang isang alias (alias) para sa larawang nauna nang na-upload sa lokal na repositoryo. Kung ang alias ay hindi ginawa para sa larawang ito, maaari mong palaging sumangguni sa larawan sa pamamagitan nito tatak ng daliri na ipinapakita sa talahanayan.
  • alp β€” Itinatakda ang identifier para sa lalagyan
  • --storage β€” Ang susi na ito ay nagpapahiwatig kung saan Pool ng Imbakan gagawa ng lalagyan
  • --profile β€” Ang mga key cascade na ito ay naglalapat ng configuration mula sa mga naunang ginawang configuration profile sa container

Inilunsad namin ang lalagyan, na nagsisimulang ilunsad ang init system ng pamamahagi:

lxc start alp

Maaari mo ring gamitin ang utos lxc launch na nagpapahintulot sa iyo na pagsamahin ang mga koponan lxc init ΠΈ lxc start sa isang operasyon.

Sinusuri ang estado ng lalagyan:

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

Sinusuri ang configuration ng container:

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

Sa seksyon profiles matitiyak namin na ang lalagyang ito ay gumagamit ng dalawang profile ng pagsasaayos βˆ’ default ΠΈ hddroot. Sa seksyon devices isang device lang ang matutukoy namin dahil ginawa ang network device sa antas ng profile default. Para makita ang lahat ng device na ginagamit ng container kailangan mong magdagdag ng key --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: ""

Pagtatakda ng isang static na IP address ^

Kung susubukan naming magtakda ng IP address para sa isang network device eth0 koponan lxc config device set alp nilayon para sa configuration ng container, pagkatapos ay makakatanggap kami ng isang error na mag-uulat na ang device ay wala dahil ang device eth0 na ginagamit ng lalagyan ay kabilang sa profile default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Siyempre, maaari tayong magtakda ng isang static na IP address para sa eth0 mga device sa profile, ngunit magiging pareho ito para sa lahat ng container na gagamit sa profile na ito. Samakatuwid, magdagdag tayo ng device na nakatuon sa container:

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

Pagkatapos ay kailangan mong i-restart ang lalagyan:

lxc restart alp

Kung titingnan natin ngayon ang configuration ng container, hindi na natin kailangang gamitin ang opsyon --expanded para makita ang network device eth0, dahil ginawa namin ito sa antas ng container at nag-cascade ito sa parehong device mula sa profile 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: ""

Pag-alis ng lalagyan ^

Para mag-alis ng container, gamitin ang command lxc delete, ngunit bago alisin ang lalagyan, dapat itong ihinto gamit ang command lxc stop:

lxc stop alp

lxc list

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

Pagkatapos naming ma-verify na ang estado ng lalagyan ay naging STOPPED, maaari itong alisin mula sa Pool ng Imbakan:

lxc delete alp

Pag-access sa lalagyan ^

Upang direktang magsagawa ng mga utos sa isang lalagyan, lampasan ang mga koneksyon sa network, gamitin ang command lxc exec na nagpapatupad ng mga utos sa lalagyan nang hindi inilulunsad ang shell ng system. Kung kailangan mong magsagawa ng isang utos sa isang shell gamit ang mga pattern ng shell tulad ng mga variable, pag-redirect ng file (pipe), atbp., pagkatapos ay kailangan mong tahasang ilunsad ang shell at ipasa ang command bilang isang susi, halimbawa:

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

Gumamit ang utos ng isang espesyal na karakter sa pagtakas para sa espesyal na karakter $ upang ang variable $HOME ay hindi na-interpret sa host machine, ngunit na-interpret lamang sa loob ng container.

Posible ring simulan ang interactive na shell mode, at pagkatapos ay tapusin ang session sa pamamagitan ng pag-execute ng hotkey CTRL+D:

lxc exec alp -- /bin/sh

Pamamahala ng mapagkukunan ng lalagyan ^

Sa LXD, maaari mong pamahalaan ang mga mapagkukunan ng container gamit ang isang espesyal na hanay ng configuration. Makakakita ng kumpletong listahan ng mga parameter ng configuration ng container sa dokumentasyon.

Limitasyon sa mapagkukunan ng RAM ^

Parametro limits.memory nililimitahan ang dami ng RAM na magagamit sa lalagyan. Ang halaga ay isang numero at isa sa magagamit na mga suffix.

Itakda natin ang limitasyon ng RAM ng container sa 256 MB:

lxc config set alp limits.memory 256MB

Gayundin, mayroong iba pang mga parameter para sa paglilimita ng memorya:

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

Koponan lxc config show nagbibigay-daan sa iyong ipakita ang buong configuration ng container, kabilang ang inilapat na limitasyon sa mapagkukunan na itinakda:

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

Limitasyon ng mapagkukunan ng CPU ^

Mayroong ilang mga paraan upang limitahan ang mga mapagkukunan ng CPU. mga uri ng mga paghihigpit:

  • limit.cpu - nagbibigkis ng lalagyan sa isa o higit pang mga core ng CPU
  • limits.cpu.allowance - namamahala sa alinman sa mga CFS scheduler quota kapag lumipas na ang limitasyon sa oras, o ang unibersal na mekanismo ng pagbabahagi ng mapagkukunan ng CPU kapag lumipas na ang porsyento
  • limits.cpu.priority - priority ng scheduler kapag maraming pagkakataon na nagbabahagi ng isang set ng mga processor ay itinalaga ng parehong porsyento ng mga processor

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

Limitasyon sa espasyo ng disk ^

Bilang karagdagan sa mga paghihigpit tulad limits.read, limits.write maaari rin naming limitahan ang dami ng puwang sa disk na natupok ng lalagyan (gumagana lamang sa ZFS o BTRFS):

lxc config device set alp root size=2GB

Pagkatapos ng pag-install, sa parameter devices.root.size Maaari naming i-verify ang itinakdang limitasyon:

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

Upang tingnan ang mga ginamit na disk quota na makukuha natin mula sa command 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

Sa kabila ng katotohanan na nagtakda kami ng limitasyon para sa root device ng container sa 2GB, ang mga utility ng system tulad ng df hindi makikita ang paghihigpit na ito. Upang gawin ito, magsasagawa kami ng isang maliit na pagsubok at alamin kung paano ito gumagana.

Gumawa tayo ng 2 bagong magkaparehong lalagyan sa pareho Pool ng Imbakan (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         |
+------+---------+------------------+------+-----------+-----------+

Gumawa tayo ng 1GB na file sa isa sa mga container:

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

Siguraduhin nating nalikha ang file:

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

Kung titingnan natin ang pangalawang lalagyan, suriin ang pagkakaroon ng isang file sa parehong lokasyon, kung gayon ang file na ito ay hindi naroroon, na inaasahan, dahil ang mga lalagyan ay nilikha sa kanilang sarili Dami ng Imbakan sa parehong Pool ng Imbakan:

lxc exec alp2 -- ls -lh
total 0

Ngunit ihambing natin ang mga halaga na ginagawa nito df sa isa at sa isa pang lalagyan:

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

Device /dev/loop1 naka-mount bilang root partition ay Pool ng Imbakan na ginagamit ng mga lalagyang ito, kaya't ibinabahagi nila ang dami nito sa pagitan ng dalawa.

Mga istatistika ng pagkonsumo ng mapagkukunan ^

Maaari mong tingnan ang mga istatistika ng pagkonsumo ng mapagkukunan para sa isang lalagyan gamit ang command:

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

Paggawa gamit ang mga snapshot ^

Ang LXD ay may kakayahang lumikha ng mga snapshot at ibalik ang estado ng lalagyan mula sa kanila.

Upang lumikha ng isang snapshot, patakbuhin ang sumusunod na command:

lxc snapshot alp snapshot1

Ang koponan lxc snapshot walang available na susi list, samakatuwid, upang tingnan ang listahan ng mga snapshot kailangan mong gamitin ang command na nagpapakita ng pangkalahatang impormasyon tungkol sa lalagyan:

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

Maaari mong ibalik ang isang lalagyan mula sa isang snapshot gamit ang command lxc restore pagtukoy sa lalagyan kung saan isasagawa ang pagpapanumbalik at ang snapshot alias:

lxc restore alp snapshot1

Ang sumusunod na command ay ginagamit upang tanggalin ang isang snapshot. Pakitandaan na ang command syntax ay hindi katulad ng lahat ng iba pa; dito kailangan mong tumukoy ng forward slash pagkatapos ng pangalan ng container. Kung ang slash ay tinanggal, ang utos na tanggalin ang isang snapshot ay binibigyang kahulugan bilang isang utos na magtanggal ng isang lalagyan!

lxc delete alp/snapshot1

Sa halimbawa sa itaas, tiningnan namin ang tinatawag na stateless snapshot. Ang LXD ay may isa pang uri ng mga snapshot - stateful, na nagse-save sa kasalukuyang estado ng lahat ng mga proseso sa container. Mayroong ilang mga kawili-wili at kapaki-pakinabang na tampok na nauugnay sa mga stateful na snapshot.

Ano pa? ^

  • Available ang isang module para sa mga developer ng Python PyLXD na nagbibigay ng API sa LXD

I-UPDATE 10.04.2020/15/00 XNUMX:XNUMX: Idinagdag ang nabigasyon

Pinagmulan: www.habr.com

Magdagdag ng komento