LXD-in əsas imkanları — Linux-da konteyner sistemidir

LXD-in əsas imkanları — Linux-da konteyner sistemidir

LXD — bu, növbəti nəsil konteyner meneceri sistemidir kaynak. O, virtual maşınları xatırladan bir istifadəçi interfeysi təqdim edir, lakin bunun əvəzinə Linux konteynerləri istifadə edir.

LXD nüvəsi — bu, yerli unix soketi vasitəsilə və müvafiq konfiqurasiya qurulsa, şəbəkə vasitəsilə REST API təqdim edən bir icazəli dəmordur (root hüquqları ilə işləyən xidmət). LXD ilə təmin edilən komandalar alətləri bu REST API vasitəsilə sorğu göndərir. Bu, yerli ev sahibi ilə və ya uzaqda əlaqə qurursunuzsa, hər şeyin eyni şəkildə işlədiyini göstərir.

Bu məqalədə biz LXD-nin konsepsiyalarına dərindən toxunmayacağıq, sənədlərdə əksini tapmış bütün imkanları, daxil olmaqla son versiyalarda QEMU virtual maşınlarının konteynerlərlə paralel dəstəklənməsini müzakirə etməyəcəyik. Bunun əvəzinə, yalnız konteynerlərin idarə olunması ilə bağlı əsas imkanları öyrənəcəyik — anbar yığınları quracağıq, şəbəkələr yaradacağıq, konteyneri işə salacağıq, resurs limitlərini tətbiq edəcəyik və konteynerləri Linux-da istifadə etməyinizi asanlaşdırmaq üçün snapshotlardan necə istifadə edəcəyimizi araşdıracağıq.

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

Navigasiya

LXD quraşdırılması ^

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

Ubuntu 19.10 paylamasında paket lxd bununla snap-paketi:

apt search lxd

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

Bu, eyni anda iki paket quraşdırılacaq deməkdir, biri sistem paketi, digəri isə snap-paketdir. Sistemdə iki paket quraşdırılması, sistem paketi snap-paket meneceri tərəfindən silindiyi zaman orfoz hala gələ bilər.

Paket tapmaq lxd snap-anbarında aşağıdakı əmrlə tapıla bilər:

snap tap lxd

Ad     Versiya       Qısa məlumat
lxd    3.21        Sistem konteyner meneceri və API
lxd-demo-server  0+git.6d54658  LXD istifadə edərək onlayn proqram demosu seansları
nova           ocata        OpenStack Hesablama Xidməti (nova)
nova-hypervisor ocata        OpenStack Hesablama Xidməti - KVM Hypervisor (nova)
distrobuilder  1.0          LXC və LXD üçün görüntü yaratma aləti
fabrica        0.1          Veb formasına yönəldərək sadəcə snəplar qurun...
satellite      0.1.2        İrəliləyən miqyaslana bilən açıq mənbəli intellekt platforması

Komandayı işə salmaqla list paketin lxd hələ quraşdırılmadığını təsdiqləyə bilərik:

snap list

Ad   Versiya    Rev   İzləmə  Nəşr edən   Qeydlər
core 16-2.43.3  8689  stabil   canonical✓  core

LXD snəplə paket olsa da, onu sistem paketi vasitəsilə quraşdırmaq lazımdır lxd, bununla sistemdə uyğun bir qrup yaradılacaq, lazım olan utilitlər ilə /usr/bin və s.

sudo apt update
sudo apt install lxd

Snəp-paket kimi quraşdırıldığını təsdiqləyək:

snap list

Ad   Versiya    Rev     İzləmə  Nəşr edən   Qeydlər
core 16-2.43.3  8689   stabil   canonical✓  core
lxd  3.21       13474  stabil/…  canonical✓  -

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

Sistemdə LXD paketini quraşdırmaq üçün aşağıdakı komandaları yerinə yetirmək lazımdır, birincisi — repozitoriyalarda mövcud olan paketlərin siyahısını yeniləyir, ikincisi — paketi birbaşa quraşdırır:

sudo pacman -Syyu && sudo pacman -S lxd

Paketi quraşdırdıqdan sonra, LXD-ni adi istifadəçi ilə idarə etmək üçün onu sistem qrupuna daxil etmək lazımdır lxd:

sudo usermod -a -G lxd user1

İstifadəçini user1 qruplara daxil edildiyini təsdiqləyək lxd:

id -Gn user1

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

Əgər qrup siyahıda görünmürsə, o zaman istifadəçi sessiyasını yenidən aktivləşdirmək lazım olacaq. Bunun üçün bu eyni istifadəçi ilə sistemdən çıxıb yenidən daxil olun. lxd LXD servisini sistem başladığında yüklenmək üçün aktivləşdirək:

sudo systemctl enable lxd systemd sudo systemctl start lxd

Servisin vəziyyətini yoxlayaq:

Xidməti işə salırıq:

sudo systemctl status lxd

İnitializasyondan əvvəl, LXD-də depolamanın necə qurulduğuna başa düşmək lazım olacaq.

Depolama (

LXD Anbarı (Storage) ^

Storage

bir və ya bir neçədepolama) nadan ibarətdir bir neçəsini istifadə edərək birini dəstəklənən fayl sistemləri kimi ZFS, BTRFS, LVM və ya adi direktoriyalar. Hər Saxlama İçi hissəsi cildlərə ( Saxlama İçi Storage Volume) bölünür ki, bunlar görüntüləri, konteynerləri və ya digər məqsədlər üçün məlumatları saxlayır.— Linux nüvəsi olmayan xüsusi toplanmış distribyutlardır və xarici mənbələrdən mövcuddur

  • Şəkillər — işləməyə hazır görüntülərdən yerləşdirilmiş distribyutlardır
  • Konteynerlər Snapshotlar
  • — geri dönə biləcəyiniz konteynerlərin vəziyyət şəkilləridir. Depolamanı LXD-da idarə etmək üçün

LXD-in əsas imkanları — Linux-da konteyner sistemidir

lxc storage komandası var, ona kömək üçün soruşa bilərsiniz: lxc storage --help Aşağıdakı komanda, LXD depolamasındakı bütün

siyahısını ekranda göstərir: Saxlama İçi lxc storage list+---------+-------------+--------+--------------------------------+---------+ | AD | TƏSVİR | İDARƏÇİ | MƏNBƏ | İSTİFADƏ EDİLİR | +---------+-------------+--------+--------------------------------+---------+ | hddpool | | btrfs | /dev/loop1 | 2 | +---------+-------------+--------+--------------------------------+---------+ | ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 4 | +---------+-------------+--------+--------------------------------+---------+

Seçilmiş

üçün bütün ) bölünür ki, bunlar görüntüləri, konteynerləri və ya digər məqsədlər üçün məlumatları saxlayır. siyahısını görün Saxlama İçi lxc storage volume list lxc saxlama həcmi siyahısı:

lxc saxlama həcmi siyahısı hddpool

+-------+----------------------------------+-------------+---------+
| TIP   |          AD                      | TƏSVİR      | İSTİFADƏ EDİLİR |
+-------+----------------------------------+-------------+---------+
| image | ebd565585223487526ddb3607f515... |             | 1       |
+-------+----------------------------------+-------------+---------+

lxc saxlama həcmi siyahısı ssdpool

+-----------+----------------------------------+-------------+---------+
|  TIP      |            AD                    | TƏSVİR      | İSTİFADƏ EDİLİR |
+-----------+----------------------------------+-------------+---------+
| konteyner | alp3                             |             | 1       |
+-----------+----------------------------------+-------------+---------+
| konteyner | jupyter                          |             | 1       |
+-----------+----------------------------------+-------------+---------+
| image     | ebd565585223487526ddb3607f515... |             | 1       |
+-----------+----------------------------------+-------------+---------+

Həmçinin, əgər Saxlama İçi yaradılarkən BTRFS fayl sisteminin seçilməsi halında, siyahını əldə etmək üçün ) bölünür ki, bunlar görüntüləri, konteynerləri və ya digər məqsədlər üçün məlumatları saxlayır.subvolumes BTRFS'in anlayışında bu fayl sisteminin alətləri vasitəsilə əldə edilə bilər:

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-ni başlayan ^

Konteynerlər yaradılmadan və istifadədən əvvəl LXD-nin ümumi ilkinizasiyası həyata keçirilməlidir, bu şəbəkəni və eyni zamanda saxlama yerini yaradıb konfiqurasiya edir. Bu, standart müştəri komandaları vasitəsilə əl ilə edilə bilər, bunlar komanda çağırışı ilə mövcuddur lxc --help və ya ilkinizasiya ustası vasitəsilə lxd init bir neçə suala cavab verərək.

Anbar yığını üçün fayl sisteminin seçilməsi ^

LXD ilkinizasiyası zamanı bir neçə sual verilir, bunlar arasında defolt üçün fayl sisteminin tipi müəyyən edilməlidir. Saxlama İçiDefolt olaraq BTRFS fayl sistemi seçilir. Yaradıldıqdan sonra başqasına keçmək mümkün olmayacaq. Fayl sistemini seçmək üçün imkanların müqayisə cədvəli:

Xüsusiyyət
Kataloq
Btrfs
LVM
diskin qalan sahəsinə bölmə əlavə edirik
CEPH

Optimallaşdırılmış görüntü saxlama
no
yes
yes
yes
yes

Optimallaşdırılmış nümunə yaradılması
no
yes
yes
yes
yes

Optimallaşdırılmış snapshot yaradılması
no
yes
yes
yes
yes

Optimallaşdırılmış görüntü köçürməsi
no
yes
no
yes
yes

Optimallaşdırılmış nümunənin köçürülməsi
no
yes
no
yes
yes

Yazılış zamanı kopyala
no
yes
yes
yes
yes

Blok əsaslı
no
no
yes
no
yes

Ani klonlama
no
yes
yes
yes
yes

Konteynerin içində istifadə edilə bilən saxlama sürücüsü
yes
yes
no
no
no

Köhnə snapshot-lardan geri qayıtma (ən son deyil)
yes
yes
yes
no
yes

Saxlama kvotaları
bəli(*)
yes
yes
yes
no

Maqistar vasitəsilə şəbəkə və Anbar yığını başlama ^

Növbəti müzakirə edəcəyimiz komanda, sadə suallara cavab verməklə LXD-nin əsas komponentlərini konfiqurasiya etməyə imkan tanıyır.

Aşağıdakı komandanı yerinə yetirin lxc init və suallara cavabları iki nöqtədən sonra aşağıda göstərildiyi kimi daxil edin və ya onların şərtlərinizə uyğunlaşdırın:

lxd init

LXD klasterlaşdırmasını istifadə etmək istəyirsiniz? (bəli/xeyr) [default=xeyr]: 
Yeni saxlama hovuzu konfiqurasiya etmək istəyirsiniz? (bəli/xeyr) [default=bəli]: 
Yeni saxlama hovuzunun adı [default=default]: ssdpool         
İstifadə olunacaq saxlama arxitekturasının adı (lvm, btrfs, dir) [default=btrfs]: 
Yeni BTRFS hovuzu yaratmaq istəyirsiniz? (bəli/xeyr) [default=bəli]: 
Mövcud blok cihazına qoşulmaq istəyirsiniz? (bəli/xeyr) [default=xeyr]: 
Yeni döngə cihazının ölçüsü (minimum 1GB) [default=15GB]: 10GB
MAAS serverinə qoşulmaq istəyirsiniz? (bəli/xeyr) [default=xeyr]: 
Yeni yerli şəbəkə körpüsü yaratmaq istəyirsiniz? (bəli/xeyr) [default=bəli]: 
Yeni körpüyə nə ad vermək lazımdır? [default=lxdbr0]: 
Hansı IPv4 ünvanı istifadə olunmalıdır? (CIDR subnet notası, “auto” və ya “none”) [default=auto]: 10.0.5.1/24
LXD-nin körpüdə IPv4 trafikini NAT-ediyini istəyirsiniz? [default=bəli]: 
Hansı IPv6 ünvanı istifadə olunmalıdır? (CIDR subnet notası, “auto” və ya “none”) [default=auto]: none
LXD-nin şəbəkə üzərindən əlçatan olmasını istəyirsiniz? (bəli/xeyr) [default=xeyr]: 
Keçmişdəki keçirilmiş şəkillərin avtomatik yenilənməsini istəyirsiniz? (bəli/xeyr) [default=bəli]: xeyr
“lxd init” öncədən konfiqurasiya edilmiş YAML-ın çıxarılmasını istəyirsiniz? (bəli/xeyr) [default=xeyr]: 

Əlavə Anbar yığını yaratmaq ^

Keçmiş mərhələdə biz yaratdıq Saxlama İçi adı verilmiş ssdpool və fayl mənim sistemimdə /var/lib/lxd/disks/ssdpool.imgünvanında yerləşir. Bu fayl sistemi ünvanı mənim PC-də fiziki SSD diskinə uyğundur.

Növbəti addımlar, Saxlama İçi depo içindəki rolunu anlamaq üçün, biz ikinci Saxlama İçi kreat olacaq, bu dəfə HDD-də fiziki olaraq yerləşəcək. Problemi odur ki, LXD Saxlama İçi ünvanın xaricində yaradılmasına imkan vermir /var/lib/lxd/disks/ və hətta simvolik bağlantılar da işləməyəcək, işləyici tərəfindən verilən cavaba baxın. Bu məhdudiyyəti aşmağa, biz Saxlama İçi yeni bir loopback faylı yaratdıqda ya da formatdığımızda, bu dəyəri blok cihazı kimi təyin edərək, mənbə.

belə bir qiymət verərək. Beləliklə, Saxlama İçi bir loopback faylı ya da mövcud bölməni təyin etmədən, hansı ki, istifadə ediləcək, lazım olacaq. Bunun üçün, biz 10GB ölçüsünü məhdudlaşdıracağıq:

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) kopyalandı, 38,4414 s, 260 MB/s

Loopback faylını boş loopback cihazında qoşaq:

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

/dev/loop1

Komanda, istifadə etdiyimiz loopback-faylının adı göstərilən bir girişlə dönür. Gerekirse, doğru sürüşdürmə üçün bütün işğal olunmuş cihazlar siyahısını göstərə bilərik: losetup -lNAME 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 görünür ki, cihazda

loopback-faylı qoşulmuşdur

, lakin cihazda /dev/loop1 bu, defolt olaraq uyğundur /mnt/work/lxd/hddpool.imgSonrakı komanda, yeni yaradılmış bir /dev/loop0 bu, defolt olaraq uyğundur /var/lib/lxd/disks/ssdpool.img loopback-faylı ilə LXD-də yaradılır. LXD bu loopback faylını Saxlama İçi.

BTRFS fayl sistemi ilə formatlayacaq: Saxlama İçi lxc storage create hddpool btrfs size=10GB source=/dev/loop1 /mnt/work/lxd/hddpool.img Bütün /dev/loop1 siyahısını ekranda göstərəcəyik:

lxc saxlama yaradın hddpool btrfs ölçü=10GB mənbə=\/dev\/loop1

Bütünlərin siyahısını Saxlama İçi ekrana çıxardaq:

lxc saxlama siyahısı

+---------+-------------+--------+--------------------------------+---------+
|  ADI   | TƏSVİR      | SÜRÜCÜ |             MƏNBƏ             | İSTİFADƏ EDİLİB |
+---------+-------------+--------+--------------------------------+---------+
| hddpool |             | btrfs  | /dev/loop1                     | 0       |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool |             | btrfs  | /var/lib/lxd/disks/ssdpool.img | 0       |
+---------+-------------+--------+--------------------------------+---------+

Anbar yığının ölçüsünü artırmaq ^

Yaradıldıqdan sonra Saxlama İçi, lazım gələrsə, onu artırmaq mümkündür. Bunun üçün Saxlama İçi 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

Loopback cihazı slotuna loopback-faylının avtoplazması ^

Bizim bir kiçik problemimiz var, ev sahibi sistem yenidən başladıqda, fayl /mnt/work/lxd/hddpool.img "çıxacaq" cihazdan /dev/loop1 və LXD xidməti, onu bu cihazda görmədiyi üçün yükləmə zamanı dayanacaq. Bu problemi həll etmək üçün, sistemin yüklənməsi zamanı bu faylı cihaza yerləşdirəcək bir sistem xidməti yaratmaq lazımdır. /dev/loop1 ev sahibi sistem yüklənərkən.

Şimdi bir unit fayl tipi service daxilindədir. /etc/systemd/system/ SystemD üçün ilkin sistem:

cat << EOF | sudo tee -a /etc/systemd/system/lxd-hddpool.service
[Unit]
Description=LXD Saxlama Yığını üçün Losetup (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 aktiv edirik:

sudo systemctl enable lxd-hddpool

Yaradıldı symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.

Ev sahibi sistem yenidən başladıqdan sonra xidmətin statusunu yoxlayırıq:

systemctl status lxd-hddpool.service 

● lxd-hddpool.service - LXD Saxlama Yığını üçün Losetup (hddpool)
     Yüklənmiş: yüklənmiş (/etc/systemd/system/lxd-hddpool.service; aktiv; tədarükçü təyinatı: deaktiv)
     Aktiv: aktiv (çıxmış) 2020-04-08 03:43:53 MSK tarixindən bəri; 1 dəq 37 s əvvəl
    Proses: 711 ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img (kod=çıxmış, status=0/UĞUR)
   Əsas PID: 711 (kod=çıxmış, status=0/UĞUR)

apr 08 03:43:52 manjaro systemd[1]: LXD Saxlama Yığını (hddpool) başlamaqda...
apr 08 03:43:53 manjaro systemd[1]: LXD Saxlama Yığını (hddpool) tamamlandı.

Çıxışdan biz xidmətin statusunun aktiv olduğunu təsdiq edə bilirik, bizim skriptimizin bir komanda ilə yerinə yetirilməsi başa çatmasına baxmayaraq, bu bizə imkan verdi RemainAfterExit=true seçimi.

Təhlükəsizlik. Konteynerlərin imtiyazları ^

Çünki bütün konteyner prosesləri faktiki olaraq ev sahibi sistemdə onun nüvəsini istifadə edərək izolyasiyada yerinə yetirilir, konteyner proseslərinin ev sahibi sistemə girişini əlavə qorumaq üçün LXD proseslərin imtiyazını təqdim edir, burada:

  • İmtizaqlı konteynerlər — ev sahibi sistemlə eyni sahib olan UID və GID-yə malik proseslərin olduğu konteynerlərdir. Məsələn, UID 0 olan bir konteynerdə işləyən proses ev sahibi sistemdə UID 0 olan bir proseslə eyni hüquqlara malikdir. Başqa sözlə, konteynerdəki root istifadəçisi yalnız konteynerdə deyil, eyni zamanda ev sahibi sistemdə də bütün hüquqlara sahibdir əgər o, konteynerin izolyasiya olunmuş ad məkanından kənara çıxa bilsə.

  • İmtizaqsız konteynerlər — bu, UID və GID 0-dan 65535-ə qədər olan sahibinə aid olan proseslərin yerləşdiyi konteynerlərdir, lakin ev sahibi sistemdə sahiblənmə, müvafiq olaraq, əlavə olunan SubUID və SubGID bitləri ilə maskalanır. Məsələn, UID=0 olan istifadəçi konteynerdə ev sahibi sistemdə SubUID + UID. Bu, ev sahibi sistemi qoruyur, çünki konteynerdə olan hər hansı bir proses izolyasiya olunmuş ad məkanından çıxa bilsə, yalnız tanınmamış, çox yüksək UID/GID ilə ev sahibi sistemlə qarşılıqlı əlaqə qura bilər.

Standart olaraq, yeni yaradılan konteynerlərin imtiyazsız statusu olduğu üçün, SubUID və SubGID-ni müəyyən etməliyik.

SubUID və SubGID üçün uyğun maskanı 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ərin tətbiq edilməsi üçün LXD xidməti yenidən başladılmalıdır:

sudo systemctl restart lxd

Virtual şəbəkə açarı yaratmaq ^

Daha əvvəl şəbəkəni başlatma ustası ilə başladığımız üçün lxd init və şəbəkə cihazı yaratdığımız üçün lxdbr0, bu hissədə LXD-nin şəbəkəsi ilə tanış olacağıq və müştəri komandası vasitəsilə virtual keçid (şəbəkə körpüsü) necə yaradılacağını öyrənəcəyik.

Aşağıdakı sxem, keçidin (şəbəkə körpüsü) ev sahibini və konteynerləri şəbəkəyə birləşdirdiyini göstərir:

LXD-in əsas imkanları — Linux-da konteyner sistemidir

Konteynerlər, xidmət göstərilən ev sahibi ilə digər konteynerlər arasında şəbəkə vasitəsilə qarşılıqlı əlaqə qura bilərlər. Bunun üçün konteynerlərin virtual şəbəkə kartlarını virtual keçidlə birləşdirmək lazımdır. Əvvəlcə keçidi yaradaq, konteynerin şəbəkə interfeysləri daha sonra yaradıldıqdan sonra birləşdiriləcək.

Aşağıdakı komanda, alt şəbəkə ilə bir keçid yaradır 10.0.5.0/24 və IPv4 ünvanı 10.0.5.1/24, həmçinin ipv4.nat aktiv edir ki, konteynerlər NAT xidməti vasitəsilə ev sahibindən internet əldə edə bilsinlər:

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

LXD-yə mövcud şəbəkə cihazlarının siyahısını yoxlayırıq:

lxc network list

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

Həmçinin, şəbəkə cihazının yaradıldığını yoxlamaq üçün Linux distrosunun standart alətindən istifadə edə bilərsiniz — ip linkip addr:

ip addr

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:ee:7b:5a:6b:44 brd ff:ff:ff:ff:ff:ff
    altname enp0s25
    inet6 fe80::9571:11f3:6e0c:c07b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: lxdbr0:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether c2:38:90:df:cb:59 brd ff:ff:ff:ff:ff:ff
    inet 10.0.5.1/24 scope global lxdbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::c038:90ff:fedf:cb59/64 scope link 
       valid_lft forever preferred_lft forever
5: veth3ddab174@if4:  mtu 1500 qdisc noqueue master lxdbr0 state UP group default qlen 1000
    link/ether ca:c3:5c:1d:22:26 brd ff:ff:ff:ff:ff:ff link-netnsid 0

Konfiqurasiya profili ^

Hər bir konteyner LXD-də özünəməxsus konfiqurasiyaya malikdir və onu qlobal elan edilmiş konfiqurasiyalarla genişləndirmək mümkündür ki, bunlara da konfiqurasiya profillərideyilir. Konfiqurasiya profillərinin konteynerə tətbiqi kaskad modelinə malikdir, aşağıdakı nümunə bunu göstərir:

LXD-in əsas imkanları — Linux-da konteyner sistemidir

Bu nümunədə, LXD sistemində üç profil yaradılıb: default, hddpoolhostfs. Bütün üç profil konteynerə tətbiq edilib, burada lokal konfiqurasiya var (boz zona). Profil default bir cihazı root məlumatına malikdir ki, burada parametr pool bərabərdir ssdpool, lakin konfiqurasiyanın kaskad modelinə görə biz konteynerə profil təyin edə bilərik hddpool məlumatına malikdir ki, burada parametr pool bu eyni parametri profilin default üstələsin və konteyner cihazın konfiqurasiyasını root -ni pool bərabər olsa hddpool, profil yalnız konteynerə yeni bir cihaz əlavə edir. hostfs Mövcud konfiqurasiya profillərinin siyahısını görmək üçün aşağıdakı əmr istifadə olunur:

lxc profile list+---------+---------+ | NAME | USED BY | +---------+---------+ | default | 1 | +---------+---------+ | hddroot | 0 | +---------+---------+ | ssdroot | 1 | +---------+---------+

Profil ilə işləmək üçün bütün əmr siyahısını əldə etmək üçün

açarı əlavə edin --help:

lxc profile --help

Təsvir:
  Profilləri idarə et

İstifadə:
  lxc profile [command]

Mövcud Əmr Kategoriyaları:
  add         Instansiyalara profillər əlavə et
  assign      Instansiyalara profil dəstləri təyin et
  copy        Profilləri kopyala
  create      Profilləri yarat
  delete      Profilləri sil
  device      Instansiya cihazlarını idarə et
  edit        Profil konfiqurasiyalarını YAML formatında redaktə et
  get         Profil konfiqurasiya açarları üçün dəyərləri əldə et
  list        Profilləri siyahıya al
  remove      Instansiyalardan profilləri sil
  rename      Profilləri yenidən adlandır
  set         Profil konfiqurasiya açarlarını təyin et
  show        Profil konfiqurasiyalarını göstər
  unset       Profil konfiqurasiya açarlarını ləğv et

Profilin redaktə edilməsi ^

Standart konfiqurasiya profili default konteyner üçün şəbəkə kartı konfiqurasiyası yoxdur və yeni yaradılan konteynerlərin heç biri şəbəkəyə sahib deyil, onların üçün ayrıca yerli (ikinci) şəbəkə cihazları yaratmaq lazımdır, lakin biz konfiqurasiya profilində bütün konteynerlər arasında bölüşməyə imkan verən qlobal şəbəkə cihazı yarada bilərik. Beləliklə, yeni konteyner yaradılması komandasından dərhal sonra onların şəbəkəyə çıxışı olacaq. Bununla belə, hər zaman ehtiyac olarsa, qeyri-məhdud olmağımızla bizim yerli şəbəkə cihazı yaratmağımız mümkündür.

Növbəti komanda konfiqurasiya profilinə cihaz əlavə edəcək eth0 növü nic şəbəkəyə qoşulan lxdbr0:

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

Qeyd etmək lazımdır ki, biz faktiki olaraq cihazı konfiqurasiya profilinə əlavə etdiyimiz üçün, əgər cihazda statik IP ünvanı göstərsək, bu profili tətbiq edəcək bütün konteynerlər eyni IP ünvanını paylaşacaq. Əgər konteyner üçün ayrılmış statik IP ünvanı yaratmaq lazımdırsa, o zaman IP ünvanı parametrini istifadə edərək konteyner səviyyəsində (yerli konfiqurasiya) şəbəkə cihazı yaratmalıyıq, profil səviyyəsində deyil.

Profilimizi 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ə yeni yaradılan bütün konteynerlər üçün iki cihazın (devices) yaradılacağını görə bilərik:

  • eth0 — Növü nic dəstək commutatoru (şəbəkə körpüsü) ilə birləşdirilmiş lxdbr0
  • root — Növü path bu, saxlama hovuzunu istifadə edir. ssdpool

Yeni profillərin yaradılması ^

Öncə yaradılmış Saxlama İçi konteynerlər üçün konfiqurasiya profili yaradacağıq ssdroot və onunla cihaz növünü əlavə edəcəyik path yalnızca montaj nöqtəsi / (root) daha öncə yaradılmış Saxlama İçissdpool:

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

Eynilə, biz növü yaradırıq path, lakin bu halda istifadə edir Saxlama İçihddpool:

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

Konfiqurasiya profillərini yoxlayaq:

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 hazırlanmış distirbütivlər olan şəkillərdən yaradılır. Beləliklə, konteyneri işə salmadan əvvəl onu bu şəkildən açılmaq lazımdır. Şəkil mənbəyi, xarici repozitoriyalardan şəkillərin yükləndiyi yerli repozitoriyadır.

Uzaq şəkil anbarları ^

Default olaraq LXD üç uzaq mənbədən şəkil almaq üçün konfiqurasiya olunmuşdur:

  • ubuntu: (sabit Ubuntu şəkilləri üçün)
  • ubuntu-daily: (gündəlik Ubuntu şəkilləri üçün)
  • images: (digər distros üçün bir çox)

lxc remote list

+-----------------+------------------------------------------+--------+--------+
|      AD       |                   URL                    | PUBLIC | STATIC |
+-----------------+------------------------------------------+--------+--------+
| images          | https://images.linuxcontainers.org       | BƏLİ    | XAHİŞ ETMİR |
+-----------------+------------------------------------------+--------+--------+
| yerli (default) | unix://                                  | XAHİŞ ETMİR    | BƏLİ     |
+-----------------+------------------------------------------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | BƏLİ    | BƏLİ     |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily    | BƏLİ    | BƏLİ     |
+-----------------+------------------------------------------+--------+--------+

Məsələn, depo ubuntu: aşağıdakı imicləri saxlayır:

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

+----------------------------------------------+--------------+----------+------------+
|                   TƏSVİR                      | MEMARİ       |   BOYUT  |   TİP     |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150728)  | x86_64       | 153.72MB | KONTEYNER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150819)  | x86_64       | 152.91MB | KONTEYNER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150906)  | x86_64       | 154.69MB | KONTEYNER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150930)  | x86_64       | 153.86MB | KONTEYNER  |
+----------------------------------------------+--------------+----------+------------+

Məhdud sayda sütun göstərmək üçün biz -c opsiyaları istifadə etdik dasut, həmçinin siyahının uzunluğunu head.

təqdim etdik. Mövcud arxitekturaların siyahısını göstərmək üçün aşağıdakı əmrdən istifadə olunur AlpineLinux:

lxc image -c ldast list images:alpine/3.11

+------------------------------+--------------------------------------+--------------+
|            ALIAS             |             TƏSVİR               | MEMARİ       |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11 (3 daha)         | Alpine 3.11 amd64 (20200220_13:00)   | x86_64       |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/arm64 (1 daha)   | Alpine 3.11 arm64 (20200220_13:00)   | aarch64      |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/armhf (1 daha)   | Alpine 3.11 armhf (20200220_13:00)   | armv7l       |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/i386 (1 daha)    | Alpine 3.11 i386 (20200220_13:01)    | i686         |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/ppc64el (1 daha) | Alpine 3.11 ppc64el (20200220_13:00) | ppc64le      |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/s390x (1 daha)   | Alpine 3.11 s390x (20200220_13:00)   | s390x        |
+------------------------------+--------------------------------------+--------------+

Yerli şəkil anbarı ^

Konteyneri istifadə etməyə başlamaq üçün qlobal depodan yerli depoya şəkil əlavə etmək lazımdır yerli:. Hal-hazırda yerli depo boşdur, bunu lxc image listəmri ilə yoxlaya bilərik. Əgər metodun list depo göstərilməzsə, standart olaraq yerli depo istifadə ediləcək — yerli:

lxc image list local:

+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | TƏSVİR      | MEMARİ       | TİP  | BOYUT |
+-------+-------------+--------+-------------+--------------+------+------+

Depodakı imicləri idarə etmək üçün aşağıdakı metodlardan istifadə olunur:

Əmr
Təsvir

lxc image alias
Şəkil aliaslarını idarə et

lxc image copy
Serverlər arasında imicləri kopyala

lxc image delete
Şəkilləri sil

lxc image redaktə et
Şəkil xüsusiyyətlərini redaktə et

lxc image ixrac et
Şəkilləri ixrac et və yüklə

lxc image idxal
Şəkilləri şəkil anbarına idxal et

lxc image — lazım olan bölmə.
Şəkillər haqqında faydalı məlumat göstərin

lxc image list
Şəkilləri siyahıya alın

lxc image yenilə
Şəkilləri yenilə

lxc image göstər
Şəkil xüsusiyyətlərini göstərin

Məlumat deposuna qlobaldan lokal depozitə şəkil kopyalayıram images::

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

Şəkil uğurla kopyalandı!

Hazırda lokal depoda mövcud olan bütün şəkillərin siyahısını verək yerli::

lxc image -c lfdatsu list local:

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

LXD konfiqurasiyası ^

İnteraktiv rejimdən əlavə, LXD konfiqurasiyanı YAML-faylı formasında verərək qeyri-interaktiv rejimdə də dəstəkləyir. Bu, konfiqurasiyanın birdən çox interaktiv komandaların icrasını keçərək bir anda qurulmasını təmin edən xüsusi bir formattır, o cümlədən şəbəkə konfiqurasiyası, konfiqurasiya profillərinin yaradılması və s. Burada bu sahəni müzakirə etməyəcəyik, siz bu barədə özünüz məlumat əldə edə bilərsiniz. sənəddə.

Növbəti interaktiv komanda lxc config hansı ki, konfiqurasiyanı qurmağa imkan tanıyır. Məsələn, lokalda yüklənmiş şəkillərin qlobal depozitlərdən avtomatik olaraq yenilənməməsi üçün biz bu davranışı növbəti komanda ilə aktivləşdirmək olar:

lxc config set images.auto_update_cached=false

Konteyner yaratma və idarəetmə ^

Konteyner yaratmaq üçün istifadə olunan komandadır lxc init bu komandanın parametrlərini qəbul edir depo:şəkil və daha sonra konteyner üçün istədiyiniz identifikator. Depo lokal olaraq yerli: və ya istənilən qlobal olaraq göstərilə bilər. Depo göstərilməsə, standart olaraq şəkilin axtarılması lokal depodan həyata keçirilir. Şəkil qlobal depodan qeyd olunursa, əvvəlcə şəkil lokal depoya yüklənəcək, daha sonra konteyner yaratmaq üçün istifadə ediləcək.

İlk konteynerimizi yaratmaq üçün növbəti komandaları icra edək:

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

Burada istifadə etdiyimiz komanda açarlarını bir-bir araşdıraq:

  • alpine3 — Depoda daha əvvəl yüklənmiş olan şəkil üçün bir alias (lazım) göstərilir. Eğer bu şəkil üçün alias yaradılmamışsa, onu həmişə Fingerprint çıxan cədvəldə göstərilən
  • alp — Konteyner üçün identifikator təyin olunur
  • --storage — Bu açar konteynerin hansı Saxlama İçi yaradılacağını göstərir
  • --profile — Bu açarlar, daha əvvəl yaradılan profil konfiqurasiyalarını konteynerə kaskad şəkildə tətbiq edir

Konteynerimizi işə salırıq ki, o da dağıtımın init sistemini başlatmağa başlayır:

lxc start alp

Həmçinin, lxc launch komandasından istifadə edə bilərsiniz lxc initlxc start bir əməliyyatda birləşdirmək imkanı verir.

Konteynerin vəziyyətini yoxlayırıq:

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

Konteynerin konfiqurasiyasını yoxlayırıq:

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

clients.conf profillər biz iki konfiqurasiya profilinin istifadə edildiyini təsdiq edə bilərik — defaulthddroot. Bölmədə cihazlar biz yalnız bir cihaz aşkar edə bilərik, çünki şəbəkə cihazı profil səviyyəsində yaradılıb default. Konteynerin istifadə etdiyi bütün cihazları görmək üçün açarı əlavə etmək lazımdır --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ı təyin etmək ^

Əgər şəbəkə cihazı üçün IP ünvanı təyin etməyə çalışsaq eth0 əmri ilə lxc config device set alp konteyner konfiqurasiyası üçün nəzərdə tutulmuşdur, biz xəta alacağıq ki, cihaz yoxdur, çü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

Təqdim olunan statik IP ünvanını yerləşdirə bilərik eth0 profil daxilində, lakin bu, həmin profili istifadə edən bütün konteynerlər üçün eyni olacaq. Buna görə, konteynerlər üçün ayrılmış 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 başlatmalıyıq:

lxc restart alp

İndi konteynerin konfiqurasiyasına baxsaq, şəbəkə cihazını görmək üçün əlavə açarı tətbiq etməyə ehtiyacımız olmayacaq --expanded bunu görmək üçün eth0, çünki biz onu konteyner səviyyəsində yaratdıq və bu, eyni vəziyyəti profilin içindən üstünü örtmüşdür. 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: ""

Konteyneri silmək ^

Konteyneri silmək üçün komanda lxc delete, amma konteyneri silmədən əvvəl onu dayandırmaq lazımdır, bunun üçün: lxc stop:

lxc stop alp

lxc list

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

Konteynerin vəziyyətini DAYANAN, artdıqdan sonra onu silmək olar Saxlama İçi:

lxc delete alp

Konteynere giriş ^

Konteynerdə birbaşa əmrləri yerinə yetirmək üçün, şəbəkə bağlantılarından keçmədən istifadə olunan komanda lxc exec komanda konteyner içərisində komanda yerinə yetirir, sistem terminalını açmadan. Əgər siz terminalda dəyişənlər, fayl yönləndirmələri (pipe) kimi shell nümunələrini istifadə etməlisinizsə, onda terminalı açmalı və komandanı açar kimi təqdim etməlisiniz, məsələn:

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

Komanda daxilində xüsusi simvolun qaçırılması istifadə olunmuşdur xüsusi simvol üçün $ dəyişənin $HOME host maşınında şərh olunmaması üçün, yalnız konteyner daxilində şərh olunması üçün.

Həmçinin, interaktiv terminal rejimini başlada bilərsiniz, sonra seansı tamamlayıb hotkey icrası ilə lxc config device add:

lxc exec alp -- \/bin\/sh

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

LXD-də konteynerin qaynaqlarını xüsusi konfiqurasiya dəsti vasitəsilə idarə edə bilərsiniz. Konteyner üçün bütün konfiqurasiya parametrlərinin tam siyahısını tapa bilərsiniz sənəddə.

RAM (Yaddaş) resurslarının məhdudlaşdırılması ^

Parametr limits.memory konteyner üçün mövcud RAM həcmini məhdudlaşdırır. Dəyər olaraq bir ədəd və onlardan biri mövcud əlavələr.

Konteynerin RAM həcminin 256 MB olması üçün məhdudiyyət təyin edək:

lxc config set alp limits.memory 256MB

Eyni zamanda, yaddaşı məhdudlaşdırmaq üçün digər parametrlər də vardır:

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

Əmr lxc config show konteynerin bütün konfiqurasiyasını, daxil olmaqla tətbiq olunan resurs məhdudiyyətini ekrana çıxarmaq üçün istifadə edilir:

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 (Prosessor) resurslarının məhdudlaşdırılması ^

CPU resurslarını məhdudlaşdırmaq üçün bir neçə müxtəlif növ məhdudiyyətlər:

  • limit.cpu — konteyneri bir və ya bir neçə CPU nüvəsinə bağlayır
  • limits.cpu.allowance — ya CFS planlayıcısının kvotalarını idarə edir, vaxt məhdudiyyətindən keçdikdə, ya da CPU resurslarının ümumi bölüşdürülməsi mexanizmini, faizlik dəyəri keçdikdə
  • limits.cpu.priority — eyni processor dəstini paylaşan bir neçə nüsxə üçün planlayı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ı ^

limits.read, limits.write kimi məhdudiyyətlərin yanında biz həmçinin konteynerin disk məkanını istehlakı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 Təyin etdikdən sonra,

devices.root.size

parametrində müəyyən edilmiş məhdudiyyəti görə bilərik: lxc config show alp ... devices: root: path: \/ pool: hddpool size: 2GB type: disk ephemeral: false profiles: - default - hddroot stateful: false description: "" Diskdə istifadə olunan kvotaları görmək üçün biz aşağıdakı əmri icra edə bilərik

lxc info

lxc info alp ... Resurslar: İşləmlər: 5 Disk istifadası: root: 1.05GB CPU istifadası: CPU istifadəsi (saniyədə): 1 Yaddaş istifadası: Yaddaş (cari): 5.46MB Şəbəkə istifadası: eth0: Alınan baytlar: 802B Göndərilən baytlar: 1.59kB Alınan paketlər: 4 Göndərilən paketlər: 14 lo: Alınan baytlar: 0B Göndərilən baytlar: 0B Alınan paketlər: 0 Göndərilən paketlər: 0 Konteynerin kök cihazı üçün 2GB məhdudiyyət tətbiq etdiyimizə baxmayaraq, sistem utilitələri bu məhdudiyyəti görməyəcək. Bunun üçün bir kiçik test edərək bunun necə işlədiyini öyrənəcəyik.:

Eyni

müəssisənin (hddpool) daxilində iki eyni konteyner yaradacağıq: df 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) | | KONTEYNER | 0 | +------+---------+------------------+------+-----------+-----------+ | alp2 | RUNNING | 10.0.5.30 (eth0) | | KONTEYNER | 0 | +------+---------+------------------+------+-----------+-----------+ Saxlama İçi Konteynerlərdən birində 1GB ölçüsündə fayl yaradacağıq:

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

lxc siyahısı
+------+---------+------------------+------+-----------+-----------+
| AD   |  VAZİYYƏT  |       IPV4       | IPV6 |   NÖV     | SNAPSHOTLAR |
+------+---------+------------------+------+-----------+-----------+
| alp1 | İŞLƏYİR  | 10.0.5.46 (eth0) |      | KONTAYNER | 0         |
+------+---------+------------------+------+-----------+-----------+
| alp2 | İŞLƏYİR  | 10.0.5.30 (eth0) |      | KONTAYNER | 0         |
+------+---------+------------------+------+-----------+-----------+

Konteynerlərdən birində 1GB ölçüsündə fayl yaradaq:

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

Gəlin faylın yaradıldığını təsdiq edək:

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-olmamasını yoxlayaq, bu fayl orada olmayacaq, bu gözləniləndir, çünki konteynerlər özlərinin ) bölünür ki, bunlar görüntüləri, konteynerləri və ya digər məqsədlər üçün məlumatları saxlayır. öz mühitlərində yaradılır. Saxlama İçi:

lxc exec alp2 -- ls -lh
total 0

Amma gəlin qiymətləri müqayisə edək ki, df hər iki konteynerdə belədir:

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

Cihaz /dev/loop1 mənbə kimi kök bölməsi olaraq montajlanır Saxlama İçi bütün bu konteynerlərin istifadə etdiyi üçün, onu ikisi arasında bölüşür.

Resurs istehlakının statistikası ^

Konteyner üçün resurs istifadə statistikalarını görmək üçün aşağıdakı komandadan istifadə edə 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-də konteynerin vəziyyətinin müharizəsi və bərpası üçün snapshotlar yaratmaq imkanı var.

Snapshot yaratmaq üçün aşağıdakı komandayı icra edin:

lxc snapshot alp snapshot1

Komandada lxc snapshot açar yoxdur list, buna görə snapshotların siyahısını görmək üçün konteynerin ümumi məlumatını verən komandanı istifadə etmək lazımdır:

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

Snapshotdan konteyneri bərpa etmək üçün lxc restore bərpa ediləcək konteyneri və snapshotun adını göstərərək icra edilməlidir:

lxc restore alp snapshot1

Aşağıdakı komanda snapshot'ı silmək üçün istifadə olunur. Diqqət edin ki, komandanın sintaksisi digər bütün komandalarla oxşar deyil, konteynerin adından sonra birbaşa slash göstərilməlidir. Əgər slash buraxılsa, snapshot silmə komandası konteyneri silmə komandası kimi başa düşüləcək!

lxc delete alp/snapshot1

Yuxarıda göstərilən nümunədə

Başqa nə? ^

  • Python proqramçıları üçün mövcud modul PyLXD LXD-yə API təqdim edir.

GÜNCƏLƏNİB 10.04.2020 15:00: Naviqasiyanı əlavə etdim.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster