LXD-nin əsas xüsusiyyətləri - Linux konteyner sistemləri

LXD-nin əsas xüsusiyyətləri - Linux konteyner sistemləri

LXD yeni nəsil sistem konteyner meneceridir, belə deyir mənbə. O, virtual maşınlara bənzər bir istifadəçi interfeysi təklif edir, lakin bunun əvəzinə Linux konteynerlərindən istifadə edir.

LXD nüvəsi yerli unix yuvası vasitəsilə, həmçinin müvafiq konfiqurasiya quraşdırılıbsa şəbəkə vasitəsilə REST API təmin edən imtiyazlı demondur (kök hüquqları ilə işləyən xidmət). LXD ilə təmin edilən komanda xətti aləti kimi müştərilər bu REST API vasitəsilə sorğular edir. Bu o deməkdir ki, yerli host və ya uzaq hosta daxil olmağınızdan asılı olmayaraq, hər şey eyni işləyir.

Bu yazıda biz LXD anlayışları üzərində ətraflı dayanmayacağıq, sənədlərdə göstərilən bütün mövcud imkanları, o cümlədən konteynerlərlə paralel olaraq QEMU virtual maşınlarına dəstəyin LXD-nin son versiyalarında tətbiqini nəzərdən keçirməyəcəyik. Bunun əvəzinə biz konteyner idarəçiliyinin əsaslarını öyrənəcəyik - saxlama hovuzlarının qurulması, şəbəkələrin qurulması, konteynerin idarə edilməsi, resurs məhdudiyyətlərinin tətbiqi və LXD haqqında əsas anlayış əldə etmək və Linux-da konteynerlərdən istifadə etmək üçün anlıq görüntülərdən necə istifadə etmək.

Tam məlumat üçün rəsmi mənbəyə müraciət edin:

Naviqasiya

Quraşdırma LXD ^

Ubuntu paylamalarında LXD quraşdırılması ^

Ubuntu 19.10 paylama paketində lxd verilişi var snap paketi:

apt search lxd

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

Bu o deməkdir ki, bir anda iki paket quraşdırılacaq, biri sistem paketi, digəri isə snap paketi kimi. Sistemdə iki paketin quraşdırılması bəzi problemlər yarada bilər ki, əgər snap paketi snap paket meneceri tərəfindən silinərsə, sistem paketi yetimləşə bilər.

Paketi tapın lxd snap deposunda aşağıdakı əmrdən istifadə edə bilərsiniz:

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

Komandanı işlətməklə list paketi olduğundan əmin ola bilərsiniz lxd hələ quraşdırılmayıb:

snap list

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

LXD-nin snap paketi olmasına baxmayaraq, o, sistem paketi vasitəsilə quraşdırılmalıdır lxd, sistemdə müvafiq qrup yaradacaq, lazımi kommunal xidmətlər /usr/bin və s.

sudo apt update
sudo apt install lxd

Paketin snap paketi kimi quraşdırıldığına əmin olaq:

snap list

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

Arch Linux paylamalarında LXD quraşdırılması ^

LXD paketini sistemə quraşdırmaq üçün aşağıdakı əmrləri yerinə yetirməlisiniz, birincisi depoda mövcud olan sistemdəki paketlərin siyahısını yeniləyəcək, ikincisi paketi birbaşa quraşdıracaq:

sudo pacman -Syyu && sudo pacman -S lxd

Paketi quraşdırdıqdan sonra LXD-ni adi istifadəçi tərəfindən idarə etmək üçün o, sistem qrupuna əlavə edilməlidir lxd:

sudo usermod -a -G lxd user1

Gəlin istifadəçiyə əmin olaq user1 qrupa əlavə edildi lxd:

id -Gn user1

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

Əgər qrup lxd siyahıda görünmür, onda siz istifadəçi sessiyasını yenidən aktivləşdirməlisiniz. Bunun üçün sistemdən çıxmalı və eyni istifadəçi adı altında daxil olmalısınız.

Aktivləşdirin systemd sistemin başlanğıcında LXD xidmətinin yüklənməsi:

sudo systemctl enable lxd

Xidmətə başlayaq:

sudo systemctl start lxd

Xidmət statusunun yoxlanılması:

sudo systemctl status lxd

Yaddaş LXD (Yaddaş) ^

Başlamağa başlamazdan əvvəl LXD-də yaddaşın məntiqi olaraq necə qurulduğunu başa düşməliyik.

Yaddaş (saxlama) ibarətdir bir və ya daha çox Saxlama Hovuzu ZFS, BTRFS, LVM və ya adi qovluqlar kimi dəstəklənən fayl sistemlərindən birini istifadə edən. Hər Saxlama Hovuzu cildlərə bölünür (Yaddaş həcmi) başqa məqsədlər üçün şəkilləri, konteynerləri və ya məlumatları ehtiva edən.

  • Şəkillər - bunlar Linux nüvəsi olmayan və xarici mənbələrdən əldə edilə bilən xüsusi yığılmış paylamalardır
  • Konteynerlər - bunlar istifadəyə hazır olan şəkillərdən yerləşdirilən paylamalardır
  • Ani görüntülər - bunlar geri qayıda biləcəyiniz konteynerlərin vəziyyətinin anlıq görüntüləridir

LXD-nin əsas xüsusiyyətləri - Linux konteyner sistemləri

LXD-də yaddaşı idarə etmək üçün əmrdən istifadə edin lxc storage açarı göstərərək əldə edə biləcəyiniz sertifikat - lxc storage --help

Aşağıdakı əmr hamısının siyahısını göstərir Saxlama Hovuzu LXD yaddaşında:

lxc storage list

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

Hamısının siyahısını görmək üçün Yaddaş həcmi seçilmişdə Saxlama Hovuzu komandaya xidmət edir 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       |
+-----------+----------------------------------+-------------+---------+

Həmçinin, əgər üçün Saxlama Hovuzu Yaradarkən BTRFS fayl sistemi seçildi, sonra siyahı əldə edin Yaddaş həcmi və ya alt cildlər BTRFS şərhində bu fayl sisteminin alət dəstindən istifadə edə bilərsiniz:

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

LXD işə salınır ^

Konteynerlər yaratmadan və istifadə etməzdən əvvəl siz şəbəkə və yaddaşı yaradan və konfiqurasiya edən ümumi LXD başlanğıcını yerinə yetirməlisiniz. Bu, əmrə zəng etməklə siyahıda mövcud olan standart müştəri əmrlərindən istifadə etməklə əl ilə edilə bilər lxc --help və ya başlatma sehrbazından istifadə edin lxd init bir neçə suala cavab verir.

Saxlama Hovuzu üçün fayl sisteminin seçilməsi ^

Başlama zamanı LXD bir neçə sual verir, o cümlədən defolt üçün fayl sisteminin növünü təyin etmək Saxlama Hovuzu. Varsayılan olaraq, bunun üçün BTRFS fayl sistemi seçilir. Yaradılandan sonra başqa FS-ə keçmək mümkün olmayacaq. FS seçmək tövsiyə olunur xüsusiyyətlərin müqayisə cədvəli:

Xüsusiyyət
Directory
Btrfs
LVM
ZFS
CEPH

Optimallaşdırılmış şəkil saxlama
No.
bəli
bəli
bəli
bəli

Optimallaşdırılmış nümunə yaradılması
No.
bəli
bəli
bəli
bəli

Optimallaşdırılmış snapshot yaradılması
No.
bəli
bəli
bəli
bəli

Optimallaşdırılmış şəkil ötürülməsi
No.
bəli
No.
bəli
bəli

Optimallaşdırılmış nümunə ötürülməsi
No.
bəli
No.
bəli
bəli

Yazmaq üçün kopyalayın
No.
bəli
bəli
bəli
bəli

Blok əsaslıdır
No.
No.
bəli
No.
bəli

Dərhal klonlama
No.
bəli
bəli
bəli
bəli

Saxlama sürücüsü konteyner içərisində istifadə edilə bilər
bəli
bəli
No.
No.
No.

Köhnə snapshotlardan bərpa edin (ən son deyil)
bəli
bəli
bəli
No.
bəli

Saxlama kvotaları
bəli(*)
bəli
bəli
bəli
No.

Sehrbazdan istifadə edərək şəbəkə və Saxlama Hövzəsinin işə salınması ^

Baxacağımız növbəti əmr başlatma sihirbazından istifadə edərək sadə suallara cavab verməklə LXD-nin əsas komponentlərinin qurulmasını təklif edir.

Çalıştır əmri lxc init və sualların cavablarını iki nöqtədən sonra aşağıdakı nümunədə göstərildiyi kimi daxil edin və ya şərtlərinizə uyğun olaraq dəyişdirin:

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

Əlavə Saxlama Hovuzu yaradılması ^

Əvvəlki addımda biz yaratdıq Saxlama Hovuzu adı verilmişdir ssdpool və faylı sistemimdə yerləşir /var/lib/lxd/disks/ssdpool.img. Bu fayl sistemi ünvanı mənim kompüterimdəki fiziki SSD sürücüsünə uyğundur.

Aşağıdakı hərəkətlər, oynadığı rolun anlayışını genişləndirmək üçün Saxlama Hovuzu depoda ikincisini yaradacağıq Saxlama Hovuzu fiziki olaraq fərqli bir disk növü olan HDD-də yerləşəcək. Problem ondadır ki, LXD sizə yaratmağa imkan vermir Saxlama Hovuzu ünvandan kənar /var/lib/lxd/disks/ və hətta simvolik bağlantılar işləməyəcək, tərtibatçının cavabına baxın. Biz başlatma/formatlaşdırma zamanı bu məhdudiyyəti keçə bilərik Saxlama Hovuzu açarda bunu göstərərək, geri dönmə faylına gedən yol əvəzinə dəyəri blok cihazı kimi göstərərək source.

Beləliklə, yaratmadan əvvəl Saxlama Hovuzu geri dönmə faylını və ya fayl sisteminizdə istifadə edəcəyi mövcud bölməni təyin etməlisiniz. Bunu etmək üçün ölçüsünü 10 GB-a qədər məhdudlaşdıracağımız bir fayl yaradıb istifadə edəcəyik:

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

Geri dönmə faylını pulsuz geri dönmə cihazına bağlayaq:

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

/dev/loop1

Açar sayəsində --show əmrin yerinə yetirilməsi geri dönmə faylımızın qoşulduğu cihazın adını ekrana qaytarır. Lazım gələrsə, hərəkətlərimizin düzgün olduğundan əmin olmaq üçün bu tip bütün məşğul cihazların siyahısını göstərə bilərik:

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

Siyahıdan cihazın olduğunu tapa bilərsiniz /dev/loop1 geri dönmə faylı daxildir /mnt/work/lxd/hddpool.img, və cihazda /dev/loop0 geri dönmə faylı daxildir /var/lib/lxd/disks/ssdpool.img bu standarta uyğundur Saxlama Hovuzu.

Aşağıdakı əmr yenisini yaradır Saxlama Hovuzu indicə hazırladığımız geri dönmə faylı əsasında LXD-də. LXD geri dönmə faylını formatlayacaq /mnt/work/lxd/hddpool.img cihazda /dev/loop1 BTRFS fayl sistemi üçün:

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

Gəlin hamısının siyahısını göstərək Saxlama Hovuzu ekran üçün:

lxc storage list

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

Saxlama Hovuzunun Ölçüsü Artırılır ^

Yaradıldıqdan sonra Saxlama Hovuzu, lazım gələrsə, genişləndirilə bilər. üçün Saxlama Hovuzu BTRFS fayl sisteminə əsaslanaraq, aşağıdakı əmrləri yerinə yetirin:

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

Geri dönmə faylının geri dönmə cihazı yuvasına avtomatik daxil edilməsi ^

Host sistemini, faylı yenidən yükləyərkən kiçik bir problemimiz var /mnt/work/lxd/hddpool.img cihazdan "uçacaq" /dev/loop1 və LXD xidməti yüklənərkən sıradan çıxacaq, çünki onu bu cihazda görməyəcək. Bu problemi həll etmək üçün bu faylı cihaza daxil edəcək sistem xidməti yaratmalısınız /dev/loop1 host sistemi işə salındıqda.

Yaradaq vahid fayl növü xidmət в /etc/systemd/system/ SystemD başlatma sistemi üçün:

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

Xidməti aktivləşdirin:

sudo systemctl enable lxd-hddpool

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

Host sistemini yenidən başlatdıqdan sonra xidmətin vəziyyətini yoxlayırıq:

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

Çıxışdan biz xidmət vəziyyətinin olduğunu yoxlaya bilərik aktiv, skriptimizin bir komandadan icrasının tamamlanmasına baxmayaraq, seçim bunu etməyə imkan verdi RemainAfterExit=true.

Təhlükəsizlik. Konteyner İmtiyazları ^

Bütün konteyner prosesləri əslində öz nüvəsindən istifadə edərək host sistemində təcrid olunmuş şəkildə işlədiyindən, konteyner proseslərinin host sisteminə çıxışını daha da qorumaq üçün LXD proses imtiyazı təklif edir, burada:

  • İmtiyazlı Konteynerlər - bunlar UID və GID ilə proseslərin host sistemindəki eyni sahibə uyğun olduğu konteynerlərdir. Məsələn, UID-i 0 olan konteynerdə işləyən proses, UID-i 0 olan host sistemindəki proseslə eyni giriş hüquqlarına malikdir. Başqa sözlə, konteynerdəki kök istifadəçi yalnız bütün hüquqlara malikdir: konteyner, həm də konteynerin təcrid olunmuş ad məkanından kənara çıxa bilsə, host sistemində.

  • İmtiyazsız konteynerlər - bunlar proseslərin 0-dan 65535-ə qədər olan UID və GID sahibinə aid olduğu konteynerlərdir, lakin host sistemi üçün sahibi müvafiq olaraq əlavə edilmiş SubUID və SubGID bitlərindən istifadə edərək maskalanır. Məsələn, konteynerdə UID=0 olan istifadəçi host sistemində belə görünəcək SubUID + UID. Bu, host sistemini qoruyur, çünki konteynerdəki hər hansı bir proses onun təcrid olunmuş ad məkanından qaça bilirsə, o, yalnız naməlum, çox yüksək UID/GID-ə malik proses kimi host sistemi ilə əlaqə saxlaya bilər.

Varsayılan olaraq, yeni yaradılmış konteynerlər imtiyazsız statusa malikdir və buna görə də biz SubUID və SubGID təyin etməliyik.

Gəlin, müvafiq olaraq SubUID və SubGID üçün maska ​​təyin edəcəyimiz iki konfiqurasiya faylı yaradaq:

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

Dəyişiklikləri tətbiq etmək üçün LXD xidməti yenidən işə salınmalıdır:

sudo systemctl restart lxd

Virtual şəbəkə keçidinin yaradılması ^

Biz əvvəllər başlatma sehrbazından istifadə edərək şəbəkəni işə saldığımız üçün lxd init və şəbəkə cihazı yaratdı lxdbr0, onda biz bu bölmədə sadəcə LXD-də şəbəkələşmə və müştəri əmrindən istifadə edərək virtual keçid (körpü) yaratmaqla tanış olacağıq.

Aşağıdakı diaqram keçidin (körpünün) hostu və konteynerləri şəbəkəyə necə birləşdirdiyini nümayiş etdirir:

LXD-nin əsas xüsusiyyətləri - Linux konteyner sistemləri

Konteynerlər şəbəkə vasitəsilə digər konteynerlər və ya bu konteynerlərin xidmət göstərdiyi host ilə əlaqə saxlaya bilər. Bunun üçün konteynerlərin virtual şəbəkə kartlarını virtual keçidlə əlaqələndirməlisiniz. Əvvəlcə keçid yaradacağıq və konteynerin özü yaradıldıqdan sonra konteynerin şəbəkə interfeysləri sonrakı fəsillərdə əlaqələndiriləcək.

Aşağıdakı əmr alt şəbəkə ilə keçid yaradır 10.0.5.0/24 və IPv4 ünvanı 10.0.5.1/24, həmçinin daxildir ipv4.nat konteynerlərin NAT xidmətindən istifadə edərək host vasitəsilə İnternetə daxil ola bilməsi üçün:

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

LXD-də mövcud olan şəbəkə cihazlarının siyahısı yoxlanılır:

lxc network list

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

Siz həmçinin Linux paylanmasının standart alətindən istifadə edərək şəbəkə cihazının yaradıldığını yoxlaya bilərsiniz - ip link və ya 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

Konfiqurasiya Profili ^

LXD-dəki hər bir konteynerin öz konfiqurasiyası var və onu qlobal olaraq elan edilmiş konfiqurasiyalarla genişləndirə bilər. konfiqurasiya profilləri. Konteynerə konfiqurasiya profillərinin tətbiqi kaskad modelinə malikdir, aşağıdakı nümunə bunu nümayiş etdirir:

LXD-nin əsas xüsusiyyətləri - Linux konteyner sistemləri

Bu nümunədə LXD sistemində üç profil yaradılmışdır: default, hddpool и hostfs. Hər üç profil yerli konfiqurasiyaya (boz sahə) malik konteynerə tətbiq edilir. Profil default aparatı var root parametri olan pool bərabərdir ssdpool, lakin kaskad konfiqurasiya tətbiqi modeli sayəsində konteynerə profil tətbiq edə bilərik hddpool parametri olan pool profildən eyni parametri ləğv edəcək default və konteyner cihaz konfiqurasiyasını alacaq root parametri ilə pool bərabərdir hddpool, və profil hostfs sadəcə konteynerə yeni bir cihaz əlavə edir.

Mövcud konfiqurasiya profillərinin siyahısını görmək üçün aşağıdakı əmrdən istifadə edin:

lxc profile list

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

Profillə işləmək üçün mövcud əmrlərin tam siyahısı açar əlavə etməklə əldə edilə bilər --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

Profilinizin redaktəsi ^

Defolt konfiqurasiya profili default konteyner üçün şəbəkə kartı konfiqurasiyası yoxdur və bütün yeni yaradılmış konteynerlərin şəbəkəsi yoxdur, onlar üçün ayrıca komanda ilə lokal (təxsi) şəbəkə qurğuları yaratmaq lazımdır, lakin biz konfiqurasiyada qlobal şəbəkə cihazı yarada bilərik. bu profildən istifadə edən bütün konteynerlər arasında paylaşılacaq profil. Beləliklə, yeni konteyner yaratmaq əmrindən dərhal sonra onlar şəbəkəyə çıxışı olan bir şəbəkəyə sahib olacaqlar. Eyni zamanda, heç bir məhdudiyyət yoxdur, lazım gələrsə, biz həmişə yerli şəbəkə cihazı yarada bilərik.

Aşağıdakı əmr cihazı konfiqurasiya profilinə əlavə edəcəkdir eth0 növü nic şəbəkəyə qoşulub lxdbr0:

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

Qeyd etmək vacibdir ki, cihazı həqiqətən konfiqurasiya profilinə əlavə etdiyimiz üçün cihazda statik bir IP ünvanı göstərmişiksə, bu profildən istifadə edəcək bütün konteynerlər eyni IP ünvanını paylaşacaq. Konteyner üçün ayrılmış statik IP ünvanı olan konteyner yaratmağa ehtiyac varsa, o zaman profil səviyyəsində deyil, IP ünvanı parametri ilə konteyner səviyyəsində (yerli konfiqurasiya) şəbəkə cihazı konfiqurasiyası yaratmalısınız.

Profili yoxlayaq:

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

Bu profildə görə bilərik ki, bütün yeni yaradılmış konteynerlər üçün iki cihaz yaradılacaq:

  • eth0 - Cihaz növü nic keçidə qoşulmuşdur (şəbəkə körpüsü) lxdbr0
  • root - Cihaz növü disk saxlama hovuzundan istifadə edir ssdpool

Yeni profillərin yaradılması ^

Əvvəllər yaradılmış istifadə etmək üçün Saxlama Hovuzu konteynerlər, konfiqurasiya profili yaradın ssdroot kimi bir cihaz əlavə edəcəyik disk montaj nöqtəsi ilə / (kök) əvvəllər yaradılmış istifadə edərək Saxlama Hovuzu - ssdpool:

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

Eynilə, biz kimi bir cihaz yaradırıq disk, lakin bu halda istifadə Saxlama Hovuzu - hddpool:

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

Konfiqurasiya profillərinin yoxlanılması:

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

Şəkil anbarı ^

Konteynerlər Linux nüvəsi olmayan xüsusi yığılmış paylamalar olan şəkillərdən yaradılmışdır. Buna görə də, konteyneri işə salmazdan əvvəl, bu şəkildən yerləşdirilməlidir. Şəkillərin mənbəyi xarici repozitoriyalardan şəkillərin yükləndiyi yerli depodur.

Uzaqdan görüntü anbarları ^

Varsayılan olaraq, LXD üç uzaq mənbədən şəkilləri qəbul etmək üçün konfiqurasiya edilmişdir:

  • ubuntu: (sabit Ubuntu şəkilləri üçün)
  • ubuntu-daily: (gündəlik Ubuntu şəkilləri üçün)
  • şəkillər: (bir sıra digər distroslar üçün)

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əsələn, depo ubuntu: aşağıdakı şəkillərə malikdir:

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

Məhdud sayda sütunları göstərmək üçün seçimdən istifadə etdik -c parametrləri ilə dasut, və həmçinin əmri ilə siyahının uzunluğunu məhdudlaşdırdı head.

Şəkillərin siyahısını göstərmək üçün filtrləmə mövcuddur. Aşağıdakı əmr bütün mövcud paylama arxitekturalarının siyahısını verəcəkdir 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        |
+------------------------------+--------------------------------------+--------------+

Yerli şəkil deposu ^

Konteynerdən istifadə etməyə başlamaq üçün qlobal depodan yerli birinə şəkil əlavə etməlisiniz local:. İndi yerli depo boşdur, komanda buna əmin olacaq lxc image list. Əgər üsul list repozitoriya təyin etməyin, onda yerli repozitoriya standart olaraq istifadə olunacaq - local:

lxc image list local:

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

Anbardakı şəkillər aşağıdakı üsullarla idarə olunur:

Komanda
Təsvir

lxc şəkli ləqəb
Şəkil ləqəblərini idarə edin

lxc şəkli köçürmək
Serverlər arasında şəkilləri kopyalayın

lxc şəkli silmək
Şəkillər silin

lxc şəkli redaktə etmək
Şəkil xüsusiyyətlərini redaktə edin

lxc şəkli ixrac
Şəkilləri ixrac edin və yükləyin

lxc şəkli idxal
Şəkilləri şəkil mağazasına idxal edin

lxc şəkli info
Şəkillər haqqında faydalı məlumatları göstərin

lxc şəkli siyahı
Şəkillərin siyahısı

lxc şəkli təravətləndirmək
Şəkilləri təzələyin

lxc şəkli Göstərmək
Şəkil xüsusiyyətlərini göstərin

Şəkli qlobal olandan yerli depoya kopyalayın images::

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

Image copied successfully!

Yerli depoda hazırda mövcud olan bütün şəkillərin siyahısını göstərək local::

lxc image -c lfdatsu list local:

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

LXD Konfiqurasiyası ^

İnteraktiv rejimə əlavə olaraq, LXD qeyri-interaktiv konfiqurasiya quraşdırma rejimini də dəstəkləyir, bu, konfiqurasiya YAML faylı şəklində göstərildiyi zaman, icradan yan keçərək bütün konfiqurasiyanı bir anda quraşdırmağa imkan verən xüsusi bir formatdır. Bu məqalədə yuxarıda müzakirə edilən bir çox interaktiv əmrlərdən, o cümlədən şəbəkə konfiqurasiyası, konfiqurasiya profillərinin yaradılması və s. Biz bu sahəni burada əhatə etməyəcəyik, siz özünüz yoxlaya bilərsiniz. sənədlərdə.

Növbəti interaktiv əmr lxc config baxacağımız konfiqurasiyanı təyin etməyə imkan verir. Məsələn, yerli depoya endirilmiş şəkillərin qlobal depolardan avtomatik olaraq yenilənməməsini təmin etmək üçün bu davranışı aşağıdakı əmrlə aktivləşdirə bilərik:

lxc config set images.auto_update_cached=false

Konteynerin yaradılması və idarə olunması ^

Konteyner yaratmaq üçün əmrdən istifadə edin lxc init hansı dəyərlərə keçilir репозиторий:образ və sonra konteyner üçün istədiyiniz ID. Repozitor yerli olaraq təyin edilə bilər local: hər hansı bir qlobal da belədir. Əgər repozitoriya göstərilməyibsə, defolt olaraq şəkili axtarmaq üçün yerli repozitoriyadan istifadə edilir. Şəkil qlobal depodan göstərilibsə, o zaman şəkil əvvəlcə yerli depoya yüklənəcək və sonra konteyneri yaratmaq üçün istifadə olunacaq.

İlk konteynerimizi yaratmaq üçün aşağıdakı əmri yerinə yetirək:

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

Burada istifadə etdiyimiz əmr düymələrinə sıra ilə baxaq:

  • alpine3 — Əvvəllər yerli depoya yüklənmiş şəkil üçün ləqəb (ləqəb) təyin edilib. Əgər ləqəb bu şəkil üçün yaradılmayıbsa, onda siz həmişə onun şəklinə istinad edə bilərsiniz Parmak izi olan cədvəldə göstərilir.
  • alp — Konteyner üçün identifikator təyin edir
  • --storage — Bu açar hansının olduğunu göstərir Saxlama Hovuzu konteyner yaradılacaq
  • --profile — Bu düymələr konfiqurasiyanı əvvəllər yaradılmış konfiqurasiya profillərindən konteynerə tətbiq edir

Biz paylamanın başlanğıc sistemini işə salmağa başlayan konteyneri işə salırıq:

lxc start alp

Siz həmçinin əmrdən istifadə edə bilərsiniz lxc launch komandaları birləşdirməyə imkan verir lxc init и lxc start bir əməliyyatda.

Konteynerin vəziyyətinin yoxlanılması:

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

Konteyner konfiqurasiyasının yoxlanılması:

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

Bölmədə profiles bu konteynerin iki konfiqurasiya profilindən istifadə etdiyinə əmin ola bilərik - default и hddroot. Bölmədə devices şəbəkə cihazı profil səviyyəsində yaradıldığı üçün biz yalnız bir cihazı aşkar edə bilərik default. Konteynerin istifadə etdiyi bütün cihazları görmək üçün açar əlavə etməlisiniz --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: ""

Statik IP ünvanının təyin edilməsi ^

Şəbəkə cihazı üçün bir IP ünvanı təyin etməyə çalışsaq eth0 komanda lxc config device set alp konteyner konfiqurasiyası üçün nəzərdə tutulmuşdur, onda biz cihazın mövcud olmadığını bildirəcək xəta alacağıq, çünki cihaz eth0 Konteynerin istifadə etdiyi profilə aiddir default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Biz əlbəttə ki, statik IP ünvanı təyin edə bilərik eth0 profildəki cihazlar, lakin bu profildən istifadə edəcək bütün konteynerlər üçün eyni olacaq. Buna görə konteynerə həsr olunmuş bir cihaz əlavə edək:

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

Sonra konteyneri yenidən işə salmalısınız:

lxc restart alp

İndi konteyner konfiqurasiyasına baxsaq, seçimdən istifadə etməyimiz lazım deyil --expanded şəbəkə cihazını görmək üçün eth0, çünki biz onu konteyner səviyyəsində yaratmışıq və o, profildən eyni cihazın üzərindən keçib 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: ""

Bir konteynerin çıxarılması ^

Konteyneri çıxarmaq üçün əmrdən istifadə edin lxc delete, lakin konteyneri çıxarmazdan əvvəl, əmrdən istifadə edərək dayandırılmalıdır lxc stop:

lxc stop alp

lxc list

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

Konteynerin vəziyyətini yoxladıqdan sonra vəziyyətə gəldik DAYANDI, ondan çıxarıla bilər Saxlama Hovuzu:

lxc delete alp

Konteynerə giriş ^

Şəbəkə bağlantılarını keçərək birbaşa konteynerdəki əmrləri yerinə yetirmək üçün əmrdən istifadə edin lxc exec sistem qabığını işə salmadan konteynerdəki əmrləri yerinə yetirən. Dəyişənlər, fayl yönləndirmələri (boru) və s. kimi qabıq nümunələrindən istifadə edərək qabıqda əmr yerinə yetirmək lazımdırsa, o zaman qabığı açıq şəkildə işə salmalı və əmri açar kimi ötürməlisiniz, məsələn:

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

Komanda xüsusi bir qaçış simvolundan istifadə etdi xüsusi xarakter üçün $ belə ki, dəyişən $HOME ana maşında şərh edilmədi, ancaq konteynerin içərisində şərh edildi.

Həmçinin interaktiv qabıq rejiminə başlamaq, sonra isə isti düyməni yerinə yetirməklə sessiyanı bitirmək mümkündür CTRL+D:

lxc exec alp -- /bin/sh

Konteyner resurslarının idarə edilməsi ^

LXD-də siz xüsusi konfiqurasiya dəstindən istifadə edərək konteyner resurslarını idarə edə bilərsiniz. Konteyner konfiqurasiya parametrlərinin tam siyahısını tapa bilərsiniz sənədlərdə.

RAM resursunun məhdudlaşdırılması ^

Parametr limits.memory konteyner üçün mövcud olan RAM miqdarını məhdudlaşdırır. Dəyər bir ədəd və birdir mövcud şəkilçilər.

Konteynerin RAM limitini 256 MB-a təyin edək:

lxc config set alp limits.memory 256MB

Həmçinin, yaddaşı məhdudlaşdırmaq üçün başqa parametrlər də var:

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

Komanda lxc config show Tətbiq edilmiş resurs limiti daxil olmaqla, bütün konteyner konfiqurasiyasını göstərməyə imkan verir:

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

CPU resurs məhdudiyyəti ^

CPU resurslarını məhdudlaşdırmağın bir neçə yolu var. məhdudiyyət növləri:

  • limit.cpu - konteyneri bir və ya bir neçə CPU nüvəsinə bağlayır
  • limits.cpu.allowance - vaxt limiti keçdikdə ya CFS planlaşdırıcı kvotalarını, ya da faiz keçdikdə universal CPU resurs mübadiləsi mexanizmini idarə edir
  • limits.cpu.priority - bir sıra prosessorları paylaşan birdən çox nüsxə prosessorların eyni faizi təyin edildikdə planlaşdırıcı prioriteti

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

Disk sahəsinin məhdudlaşdırılması ^

Belə məhdudiyyətlərə əlavə olaraq limits.read, limits.write biz həmçinin konteyner tərəfindən istehlak edilən disk sahəsinin miqdarını məhdudlaşdıra bilərik (yalnız ZFS və ya BTRFS ilə işləyir):

lxc config device set alp root size=2GB

Quraşdırıldıqdan sonra parametrdə devices.root.size Biz müəyyən edilmiş limiti yoxlaya bilərik:

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

İstifadə olunan disk kvotalarına baxmaq üçün əmrdən əldə edə bilərik 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

Konteynerin kök cihazı üçün 2 GB-a limit qoymağımıza baxmayaraq, sistem utilitləri, məsələn, df bu məhdudiyyəti görməyəcək. Bunu etmək üçün kiçik bir test keçirəcəyik və bunun necə işlədiyini öyrənəcəyik.

Gəlin eyni qabda 2 yeni eyni konteyner yaradaq Saxlama Hovuzu (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         |
+------+---------+------------------+------+-----------+-----------+

Konteynerlərdən birində 1GB fayl yaradaq:

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

Faylın yaradıldığına əmin olaq:

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

İkinci konteynerə baxsaq, eyni yerdə faylın olub-olmadığını yoxlayın, onda bu fayl orada olmayacaq, çünki konteynerlər özlərində yaradılır. Yaddaş həcmi eyni ilə Saxlama Hovuzu:

lxc exec alp2 -- ls -lh
total 0

Ancaq onun yaratdığı dəyərləri müqayisə edək df bir və digər konteynerdə:

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

Qurğu /dev/loop1 kök bölmə olduğu kimi quraşdırılmışdır Saxlama Hovuzu bu qabların istifadə etdiyi, ona görə də həcmini iki arasında bölüşdürürlər.

Resurs istehlakı statistikası ^

Komandadan istifadə edərək konteyner üçün resurs istehlakı statistikasına baxa bilərsiniz:

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

Snapshotlarla işləmək ^

LXD snapshotlar yaratmaq və onlardan konteyner vəziyyətini bərpa etmək imkanına malikdir.

Snapshot yaratmaq üçün aşağıdakı əmri yerinə yetirin:

lxc snapshot alp snapshot1

Komanda lxc snapshot açar yoxdur list, buna görə də, anlıq görüntülərin siyahısına baxmaq üçün konteyner haqqında ümumi məlumatı göstərən əmrdən istifadə etməlisiniz:

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

Komandadan istifadə edərək konteyneri snapshotdan bərpa edə bilərsiniz lxc restore bərpanın aparılacağı konteyneri və snapshot ləqəbini göstərərək:

lxc restore alp snapshot1

Snapshot silmək üçün aşağıdakı əmrdən istifadə olunur. Nəzərə alın ki, komanda sintaksisi bütün digərlərinə bənzəmir, burada konteyner adından sonra slash işarəsi göstərməlisiniz. Əgər kəsik işarəsi buraxılıbsa, o zaman snapshot silmək əmri konteyneri silmək əmri kimi şərh olunur!

lxc delete alp/snapshot1

Yuxarıdakı nümunədə biz vətəndaşlığı olmayan anlıq görüntülərə baxdıq. LXD-də başqa bir növ snapshot var - statuslu, konteynerdəki bütün proseslərin cari vəziyyətini saxlayır. Vəziyyəti göstərən anlıq görüntülərlə əlaqəli bir sıra maraqlı və faydalı xüsusiyyətlər var.

Başqa? ^

  • Python tərtibatçıları üçün modul mövcuddur PyLXD LXD üçün API təmin edir

YENİLƏNİB 10.04.2020/15/00 XNUMX:XNUMX: Naviqasiya əlavə edildi

Mənbə: www.habr.com

Добавить комментарий