LXD - Linux կոնտեյներային համակարգերի հիմնական առանձնահատկությունները

LXD - Linux կոնտեյներային համակարգերի հիմնական առանձնահատկությունները

LXD հաջորդ սերնդի համակարգի կոնտեյների կառավարիչն է, այնպես որ ասվում է աղբյուր. Այն առաջարկում է վիրտուալ մեքենաների նման ինտերֆեյս, բայց փոխարենը օգտագործում է Linux կոնտեյներներ:

LXD միջուկ արտոնյալ դեյմոն է (ծառայություն, որն աշխատում է արմատային իրավունքներով), որն ապահովում է REST API տեղական unix վարդակից, ինչպես նաև ցանցի միջոցով, եթե տեղադրված է համապատասխան կոնֆիգուրացիան։ Հաճախորդները, ինչպիսիք են LXD-ով տրամադրված հրամանի տող գործիքը, հարցումներ են կատարում այս REST API-ի միջոցով: Սա նշանակում է, որ անկախ նրանից՝ դուք մուտք եք գործում տեղական հոսթ, թե հեռավոր հոսթ, ամեն ինչ նույնն է աշխատում:

Այս հոդվածում մենք մանրամասնորեն չենք խոսի LXD հասկացությունների մասին, մենք չենք դիտարկի փաստաթղթերում նշված բոլոր հասանելի հնարավորությունները, ներառյալ բեռնարկղերի հետ զուգահեռ QEMU վիրտուալ մեքենաների աջակցության LXD-ի վերջին տարբերակներում: Փոխարենը, մենք կսովորենք միայն կոնտեյներների կառավարման հիմունքները՝ պահեստային լողավազանների տեղադրում, ցանցի ստեղծում, կոնտեյների գործարկում, ռեսուրսների սահմանափակումների կիրառում և ինչպես օգտագործել snapshots, որպեսզի կարողանաք հիմնական պատկերացում կազմել LXD-ի մասին և օգտագործել կոնտեյներներ Linux-ում:

Ամբողջական տեղեկատվության համար խնդրում ենք դիմել պաշտոնական աղբյուրին.

Նավարկություն

Տեղադրում LXD ^

LXD-ի տեղադրում Ubuntu բաշխումների վրա ^

Ubuntu 19.10 բաշխման փաթեթում lxd ունի հեռարձակում snap փաթեթ:

apt search lxd

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

Սա նշանակում է, որ միանգամից երկու փաթեթ կտեղադրվի՝ մեկը որպես համակարգային փաթեթ, մյուսը՝ snap փաթեթ։ Համակարգի վրա երկու փաթեթ տեղադրելը կարող է որոշակի խնդիր ստեղծել, երբ համակարգի փաթեթը կարող է որբանալ, եթե snap փաթեթը հեռացվի snap փաթեթի կառավարչի կողմից:

Գտեք փաթեթ lxd snap պահոցում կարող եք օգտագործել հետևյալ հրամանը.

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

Հրամանի գործարկումով list կարող եք համոզվել, որ փաթեթը lxd դեռ տեղադրված չէ.

snap list

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

Չնայած այն հանգամանքին, որ LXD-ը snap փաթեթ է, այն պետք է տեղադրվի համակարգի փաթեթի միջոցով lxd, որը համակարգում կստեղծի համապատասխան խումբ, անհրաժեշտ կոմունալ ծառայությունները /usr/bin եւ այլն:

sudo apt update
sudo apt install lxd

Եկեք համոզվենք, որ փաթեթը տեղադրված է որպես snap փաթեթ.

snap list

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

LXD-ի տեղադրում Arch Linux բաշխումների վրա ^

LXD փաթեթը համակարգում տեղադրելու համար անհրաժեշտ է գործարկել հետևյալ հրամանները, առաջինը կթարմացնի պահեստում առկա համակարգի փաթեթների ցանկը, երկրորդը ուղղակիորեն կտեղադրի փաթեթը.

sudo pacman -Syyu && sudo pacman -S lxd

Փաթեթը տեղադրելուց հետո սովորական օգտագործողի կողմից LXD-ն կառավարելու համար այն պետք է ավելացվի համակարգի խմբին lxd:

sudo usermod -a -G lxd user1

Եկեք համոզվենք, որ օգտագործողը user1 ավելացվել է խմբին lxd:

id -Gn user1

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

Եթե ​​խումբը lxd ցանկում տեսանելի չէ, այնուհետև պետք է նորից ակտիվացնեք օգտատիրոջ նիստը: Դա անելու համար դուք պետք է դուրս գաք և մուտք գործեք նույն օգտվողի տակ:

Ակտիվացրեք ներս systemd LXD ծառայության բեռնում համակարգի գործարկման ժամանակ.

sudo systemctl enable lxd

Սկսենք ծառայությունը.

sudo systemctl start lxd

Ծառայության կարգավիճակի ստուգում.

sudo systemctl status lxd

Պահպանում LXD (Պահպանում) ^

Նախքան սկզբնավորումը սկսելը, մենք պետք է հասկանանք, թե ինչպես է LXD-ում պահեստավորումը տրամաբանորեն դասավորված:

Պահպանում (Պահեստ) բաղկացած է մեկից կամ մի քանիսից Պահեստային լողավազան որն օգտագործում է աջակցվող ֆայլային համակարգերից մեկը, ինչպիսիք են ZFS, BTRFS, LVM կամ սովորական գրացուցակներ: Ամեն Պահեստային լողավազան բաժանված է հատորների (Պահպանման ծավալը) որոնք պարունակում են պատկերներ, բեռնարկղեր կամ տվյալներ այլ նպատակների համար:

  • Նկարներ - սրանք հատուկ հավաքված բաշխումներ են առանց Linux միջուկի և հասանելի արտաքին աղբյուրներից
  • Բեռնարկղեր - սրանք տեղակայված բաշխումներ են պատկերներից, պատրաստ օգտագործման համար
  • Պատկերներ - սրանք բեռնարկղերի վիճակի պատկերներ են, որոնց կարող եք վերադառնալ

LXD - Linux կոնտեյներային համակարգերի հիմնական առանձնահատկությունները

LXD-ում պահեստավորումը կառավարելու համար օգտագործեք հրամանը lxc storage վկայագիր, որի համար կարող եք ստանալ՝ նշելով բանալին. lxc storage --help

Հետևյալ հրամանը ցուցադրում է բոլորի ցանկը Պահեստային լողավազան LXD պահեստում.

lxc storage list

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

Բոլորի ցանկը դիտելու համար Պահպանման ծավալը ընտրվածի մեջ Պահեստային լողավազան ծառայում է թիմին 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       |
+-----------+----------------------------------+-------------+---------+

Նաև, եթե համար Պահեստային լողավազան Ստեղծելիս ընտրվել է BTRFS ֆայլային համակարգը, ապա ստանալ ցուցակ Պահպանման ծավալը կամ ենթահատորները BTRFS մեկնաբանության մեջ կարող եք օգտագործել այս ֆայլային համակարգի գործիքակազմը.

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 ^

Նախքան կոնտեյներներ ստեղծելը և օգտագործելը, դուք պետք է կատարեք ընդհանուր LXD սկզբնավորում, որը ստեղծում և կարգավորում է ցանցը և պահեստը: Սա կարելի է ձեռքով անել՝ օգտագործելով ստանդարտ հաճախորդի հրամանները, որոնք հասանելի են ցանկում՝ զանգահարելով հրամանը lxc --help կամ օգտագործելով սկզբնականացման հրաշագործը lxd init պատասխանելով մի քանի հարցերի.

Storage Pool-ի համար ֆայլային համակարգի ընտրություն ^

Նախաստորագրման ընթացքում LXD-ը տալիս է մի քանի հարց, ներառյալ լռելյայն ֆայլային համակարգի տեսակը որոշելը Պահեստային լողավազան. Լռելյայնորեն դրա համար ընտրված է BTRFS ֆայլային համակարգը: Ստեղծումից հետո անհնար կլինի փոխել այլ FS-ի. FS ընտրելու համար առաջարկվում է առանձնահատկությունների համեմատության աղյուսակ:

առանձնահատկություն
տեղեկատու
Btrfs
LVM
ZFS
CEPH

Օպտիմիզացված պատկերի պահպանում
ոչ
այո
այո
այո
այո

Օպտիմիզացված օրինակի ստեղծում
ոչ
այո
այո
այո
այո

Պատկերի օպտիմիզացված ստեղծում
ոչ
այո
այո
այո
այո

Օպտիմիզացված պատկերի փոխանցում
ոչ
այո
ոչ
այո
այո

Օպտիմիզացված օրինակի փոխանցում
ոչ
այո
ոչ
այո
այո

Պատճենել գրելու վրա
ոչ
այո
այո
այո
այո

Բլոկի վրա հիմնված
ոչ
ոչ
այո
ոչ
այո

Ակնթարթային կլոնավորում
ոչ
այո
այո
այո
այո

Պահպանման վարորդը կարող է օգտագործվել կոնտեյների ներսում
այո
այո
ոչ
ոչ
ոչ

Վերականգնել հին նկարներից (ոչ վերջին)
այո
այո
այո
ոչ
այո

Պահպանման քվոտաներ
այո (*)
այո
այո
այո
ոչ

Ցանցի և պահեստավորման լողավազանի սկզբնավորում՝ օգտագործելով հրաշագործը ^

Հաջորդ հրամանը, որին մենք կդիտարկենք, առաջարկում է տեղադրել LXD-ի հիմնական բաղադրիչները՝ պատասխանելով պարզ հարցերին՝ օգտագործելով սկզբնավորման մոգը:

Գործարկել հրամանը lxc init և կրկնակետից հետո մուտքագրեք հարցերի պատասխանները, ինչպես ցույց է տրված ստորև բերված օրինակում կամ փոխեք դրանք՝ ըստ ձեր պայմանների.

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

Լրացուցիչ պահեստային լողավազանի ստեղծում ^

Նախորդ քայլում մենք ստեղծեցինք Պահեստային լողավազան որին տրվել է անունը ssdpool և որի ֆայլը գտնվում է իմ համակարգում ժամը /var/lib/lxd/disks/ssdpool.img. Այս ֆայլային համակարգի հասցեն համապատասխանում է իմ համակարգչի ֆիզիկական SSD սկավառակին:

Հետևյալ գործողությունները՝ ընդլայնելու խաղացած դերի ըմբռնումը Պահեստային լողավազան պահոցում մենք կստեղծենք երկրորդը Պահեստային լողավազան որը ֆիզիկապես տեղակայված կլինի մեկ այլ տեսակի սկավառակի վրա՝ HDD: Խնդիրն այն է, որ LXD-ն թույլ չի տալիս ստեղծագործել Պահեստային լողավազան հասցեից դուրս /var/lib/lxd/disks/ և նույնիսկ խորհրդանշական հղումները չեն աշխատի, տես մշակողի պատասխանը. Մենք կարող ենք շրջանցել այս սահմանափակումը սկզբնավորման/ձևաչափման ժամանակ Պահեստային լողավազան նշելով արժեքը որպես բլոկ սարքի փոխարեն loopback ֆայլի ուղու փոխարեն՝ նշելով սա բանալիում source.

Այսպիսով, նախքան ստեղծելը Պահեստային լողավազան դուք պետք է սահմանեք loopback ֆայլ կամ գոյություն ունեցող բաժանում ձեր ֆայլային համակարգում, որը այն կօգտագործի: Դա անելու համար մենք կստեղծենք և կօգտագործենք ֆայլ, որի չափը կսահմանափակենք մինչև 10 ԳԲ.

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

Եկեք միացնենք loopback ֆայլը անվճար loopback սարքին.

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

/dev/loop1

Բանալու շնորհիվ --show հրամանի կատարումը էկրանին վերադարձնում է սարքի անունը, որին միացված է մեր loopback ֆայլը: Անհրաժեշտության դեպքում մենք կարող ենք ցուցադրել այս տեսակի բոլոր զբաղված սարքերի ցանկը՝ համոզվելու համար, որ մեր գործողությունները ճիշտ են.

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

Ցանկից կարող եք գտնել, որ սարքն ունի /dev/loop1 loopback ֆայլը ներառված է /mnt/work/lxd/hddpool.img, և սարքում /dev/loop0 loopback ֆայլը ներառված է /var/lib/lxd/disks/ssdpool.img որը համապատասխանում է լռելյայնին Պահեստային լողավազան.

Հետևյալ հրամանը ստեղծում է նորը Պահեստային լողավազան LXD-ում՝ հիմնված մեր նոր պատրաստած loopback ֆայլի վրա: LXD-ը կձևաչափի loopback ֆայլը /mnt/work/lxd/hddpool.img սարքի մեջ /dev/loop1 BTRFS ֆայլային համակարգի համար.

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

Եկեք ցուցադրենք բոլորի ցանկը Պահեստային լողավազան էկրանավորել.

lxc storage list

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

Պահպանման լողավազանի չափի մեծացում ^

Ստեղծումից հետո Պահեստային լողավազան, անհրաժեշտության դեպքում այն ​​կարող է ընդլայնվել։ Համար Պահեստային լողավազան BTRFS ֆայլային համակարգի հիման վրա գործարկեք հետևյալ հրամանները.

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 ֆայլի ավտոմատ տեղադրում loopback սարքի բնիկում ^

Մենք ունենք մեկ փոքր խնդիր, երբ վերաբեռնում ենք հոսթ համակարգը՝ ֆայլը /mnt/work/lxd/hddpool.img սարքից դուրս «թռչի»։ /dev/loop1 և LXD ծառայությունը կխափանվի բեռնման ժամանակ, քանի որ այն չի տեսնի այս սարքում: Այս խնդիրը լուծելու համար դուք պետք է ստեղծեք համակարգային ծառայություն, որը կտեղադրի այս ֆայլը սարքի մեջ /dev/loop1 երբ հյուրընկալող համակարգը գործարկվում է:

Եկեք ստեղծենք միավոր ֆայլի տեսակը ծառայություն в /etc/systemd/system/ SystemD սկզբնավորման համակարգի համար.

cat << EOF | sudo tee -a /etc/systemd/system/lxd-hddpool.service
[Unit]
Description=Losetup LXD Storage Pool (hddpool)
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img
RemainAfterExit=true

[Install]
WantedBy=local-fs.target
EOF

Ակտիվացրեք ծառայությունը.

sudo systemctl enable lxd-hddpool

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

Հյուրընկալող համակարգը վերագործարկելուց հետո մենք ստուգում ենք ծառայության կարգավիճակը.

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

Արդյունքից մենք կարող ենք ստուգել, ​​որ ծառայության վիճակը կա ակտիվ, չնայած այն հանգամանքին, որ մեր սցենարի կատարումը մեկ հրամանից ավարտվեց, տարբերակը թույլ տվեց մեզ դա անել RemainAfterExit=true.

Անվտանգություն. Կոնտեյների արտոնություններ ^

Քանի որ բոլոր կոնտեյներային գործընթացները իրականում աշխատում են մեկուսացված հյուրընկալող համակարգի վրա՝ օգտագործելով իր միջուկը, հետագայում կոնտեյներային գործընթացների մուտքը դեպի հյուրընկալող համակարգ, LXD-ն առաջարկում է գործընթացի արտոնություն, որտեղ.

  • Արտոնյալ կոնտեյներներ - դրանք կոնտեյներներ են, որոնցում UID-ով և GID-ով գործընթացները համապատասխանում են նույն սեփականատիրոջը, ինչ ընդունող համակարգում: Օրինակ, 0 UID-ով բեռնարկղում աշխատող պրոցեսն ունի մուտքի նույն իրավունքը, ինչ 0 UID-ով հյուրընկալող համակարգի պրոցեսը: Այլ կերպ ասած, կոնտեյների արմատային օգտվողն ունի բոլոր իրավունքները ոչ միայն բեռնարկղը, բայց նաև հյուրընկալող համակարգում, եթե նա կարողանա դուրս գալ կոնտեյների մեկուսացված անվանատարածքից:

  • Ոչ արտոնյալ կոնտեյներներ - սրանք կոնտեյներներ են, որոնցում գործընթացները պատկանում են UID-ի և GID-ի սեփականատիրոջը՝ 0-ից մինչև 65535 թվերով, սակայն հյուրընկալող համակարգի համար սեփականատերը դիմակավորված է, օգտագործելով համապատասխանաբար ավելացված SubUID և SubGID բիթերը: Օրինակ, կոնտեյների մեջ UID=0 ունեցող օգտվողը հյուրընկալող համակարգում կհայտնվի որպես SubUID + UID. Սա պաշտպանում է հյուրընկալող համակարգը, քանի որ եթե կոնտեյների որևէ պրոցես ի վիճակի է փախչել իր մեկուսացված անվանատարածքից, այն կարող է հաղորդակցվել միայն հյուրընկալող համակարգի հետ որպես անհայտ, շատ բարձր UID/GID պրոցես:

Լռելյայնորեն, նորաստեղծ կոնտեյներներն ունեն ոչ արտոնյալ կարգավիճակ և, հետևաբար, մենք պետք է սահմանենք SubUID և SubGID:

Եկեք ստեղծենք երկու կազմաձևման ֆայլ, որոնցում համապատասխանաբար SubUID-ի և SubGID-ի դիմակը կդնենք.

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

Փոփոխությունները կիրառելու համար LXD ծառայությունը պետք է վերագործարկվի.

sudo systemctl restart lxd

Վիրտուալ ցանցի անջատիչի ստեղծում ^

Քանի որ մենք նախկինում նախաստորագրել ենք ցանցը՝ օգտագործելով սկզբնավորման մոգը lxd init և ստեղծել ցանցային սարք lxdbr0, ապա այս բաժնում մենք պարզապես կծանոթանանք LXD-ում ցանցային կապին և ինչպես ստեղծել վիրտուալ անջատիչ (կամուրջ)՝ օգտագործելով հաճախորդի հրամանը։

Հետևյալ դիագրամը ցույց է տալիս, թե ինչպես է անջատիչը (կամուրջը) միացնում հյուրընկալողը և բեռնարկղերը ցանցի մեջ.

LXD - Linux կոնտեյներային համակարգերի հիմնական առանձնահատկությունները

Կոնտեյներները կարող են ցանցի միջոցով հաղորդակցվել այլ բեռնարկղերի կամ հյուրընկալողի հետ, որի վրա սպասարկվում են այդ բեռնարկղերը: Դա անելու համար հարկավոր է բեռնարկղերի վիրտուալ ցանցային քարտերը միացնել վիրտուալ անջատիչով։ Մենք նախ կստեղծենք անջատիչ, և կոնտեյների ցանցային ինտերֆեյսները կկապվեն հաջորդ գլուխներում՝ հենց կոնտեյների ստեղծումից հետո:

Հետևյալ հրամանը ստեղծում է ենթացանցով անջատիչ 10.0.5.0/24 և IPv4 հասցե 10.0.5.1/24, և նաև ներառում է ipv4.nat որպեսզի կոնտեյներները կարողանան ինտերնետ մուտք գործել հոսթի միջոցով՝ օգտագործելով NAT ծառայությունը.

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

LXD-ում հասանելի ցանցային սարքերի ցանկի ստուգում.

lxc network list

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

Կարող եք նաև ստուգել, ​​որ ցանցային սարքը ստեղծվել է Linux բաշխման ստանդարտ գործիքի միջոցով. ip link կամ 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

Կազմաձևման պրոֆիլ ^

LXD-ի յուրաքանչյուր կոնտեյներ ունի իր սեփական կոնֆիգուրացիան և կարող է երկարացնել այն գլոբալ հայտարարված կոնֆիգուրացիաներով, որոնք կոչվում են կոնֆիգուրացիայի պրոֆիլներ. Կոնֆիգուրացիայի պրոֆիլների կիրառումը կոնտեյների վրա ունի կասկադային մոդել, սա ցույց է տալիս հետևյալ օրինակը.

LXD - Linux կոնտեյներային համակարգերի հիմնական առանձնահատկությունները

Այս օրինակում LXD համակարգում ստեղծվել են երեք պրոֆիլներ. default, hddpool и hostfs. Բոլոր երեք պրոֆիլները կիրառվում են կոնտեյների վրա, որն ունի տեղական կոնֆիգուրացիա (գորշ տարածք): Անձնագիր default ունի սարք root որն ունի պարամետր pool հավասար է ssdpool, բայց շնորհիվ կասկադի կոնֆիգուրացիայի կիրառման մոդելի, մենք կարող ենք պրոֆիլ կիրառել կոնտեյների վրա hddpool որն ունի պարամետր pool կվերացնի նույն պարամետրը պրոֆիլից default և բեռնարկղը կստանա սարքի կոնֆիգուրացիան root պարամետրով pool հավասար hddpoolև պրոֆիլը hostfs պարզապես նոր սարք է ավելացնում տարայի մեջ:

Հասանելի կազմաձևման պրոֆիլների ցանկը տեսնելու համար օգտագործեք հետևյալ հրամանը.

lxc profile list

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

Բանալին ավելացնելով կարելի է ստանալ պրոֆիլի հետ աշխատելու հասանելի հրամանների ամբողջական ցանկը --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

Ձեր պրոֆիլի խմբագրում ^

Կանխադրված կազմաձևման պրոֆիլը default չունի կոնտեյների համար ցանցային քարտի կոնֆիգուրացիա և բոլոր նորաստեղծ կոնտեյներները չունեն ցանց, նրանց համար անհրաժեշտ է ստեղծել տեղական (նվիրված) ցանցային սարքեր առանձին հրամանով, բայց մենք կարող ենք կոնֆիգուրացիայի մեջ ստեղծել գլոբալ ցանցային սարք։ պրոֆիլը, որը կհամօգտագործվի այս պրոֆիլն օգտագործող բոլոր բեռնարկղերի միջև: Այսպիսով, նոր կոնտեյներ ստեղծելու հրամանից անմիջապես հետո նրանք կունենան ցանց՝ ցանցի հասանելիությամբ։ Միևնույն ժամանակ, սահմանափակումներ չկան, անհրաժեշտության դեպքում մենք միշտ կարող ենք ստեղծել տեղական ցանցային սարք:

Հետևյալ հրամանը կավելացնի սարքը կազմաձևման պրոֆիլին eth0 տեսակ nic միացված է ցանցին lxdbr0:

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

Կարևոր է նշել, որ քանի որ մենք իրականում ավելացրել ենք սարքը կազմաձևման պրոֆիլում, եթե սարքում նշել ենք ստատիկ IP հասցե, ապա բոլոր բեռնարկղերը, որոնք կօգտագործեն այս պրոֆիլը, կունենան նույն IP հասցեն: Եթե ​​կոնտեյների համար հատկացված ստատիկ IP հասցեով կոնտեյներ ստեղծելու անհրաժեշտություն կա, ապա դուք պետք է ստեղծեք ցանցային սարքի կոնֆիգուրացիա կոնտեյների մակարդակով (տեղական կոնֆիգուրացիա) IP հասցեի պարամետրով, և ոչ թե պրոֆիլի մակարդակով:

Եկեք ստուգենք պրոֆիլը.

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

Այս պրոֆիլում մենք կարող ենք տեսնել, որ բոլոր նորաստեղծ կոնտեյներների համար կստեղծվեն երկու սարքեր.

  • eth0 - Սարքի տեսակը nic միացված է անջատիչին (ցանցային կամուրջ) lxdbr0
  • root - Սարքի տեսակը disk որն օգտագործում է պահեստային լողավազան ssdpool

Նոր պրոֆիլների ստեղծում ^

Նախկինում ստեղծված օգտագործման համար Պահեստային լողավազան բեռնարկղեր, ստեղծեք կազմաձևման պրոֆիլ ssdroot որում մենք կավելացնենք նման սարք disk լեռան կետով / (արմատ) օգտագործելով նախկինում ստեղծված Պահեստային լողավազան - ssdpool:

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

Նմանապես, մենք ստեղծում ենք նման սարք disk, բայց այս դեպքում օգտագործելով Պահեստային լողավազան - hddpool:

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

Կազմաձևման պրոֆիլների ստուգում.

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

Պատկերների պահոց ^

Կոնտեյներները ստեղծվում են պատկերներից, որոնք հատուկ հավաքված բաշխումներ են, որոնք չունեն Linux միջուկ: Հետևաբար, նախքան բեռնարկղը գործարկելը, այն պետք է տեղակայվի այս պատկերից: Պատկերների աղբյուրը տեղական պահոցն է, որտեղ պատկերները ներբեռնվում են արտաքին պահոցներից:

Հեռավոր պատկերների պահոցներ ^

Լռելյայնորեն, LXD-ը կազմաձևված է պատկերներ ստանալու երեք հեռավոր աղբյուրներից.

  • ubuntu: (կայուն Ubuntu պատկերների համար)
  • ubuntu-օրական: (Ubuntu-ի ամենօրյա պատկերների համար)
  • պատկերներ: (մի շարք այլ բաշխումների համար)

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

Օրինակ, պահեստ ubuntu: ունի հետևյալ պատկերները.

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

Սահմանափակ թվով սյունակներ ցուցադրելու համար մենք օգտագործեցինք տարբերակը -c պարամետրերով dasut, և նաև սահմանափակեց ցանկի երկարությունը հրամանով head.

Զտումը հասանելի է պատկերների ցանկը ցուցադրելու համար: Հետևյալ հրամանը ցույց կտա բոլոր հասանելի բաշխման ճարտարապետությունները 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        |
+------------------------------+--------------------------------------+--------------+

Տեղական պատկերների պահոց ^

Կոնտեյների օգտագործումը սկսելու համար անհրաժեշտ է գլոբալ պահոցից պատկեր ավելացնել տեղականին local:. Այժմ տեղական պահեստը դատարկ է, հրամանը կհամոզվի դրանում lxc image list. Եթե ​​մեթոդը list մի նշեք պահեստ, ապա տեղական շտեմարանը կօգտագործվի լռելյայն. local:

lxc image list local:

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

Պահեստում պատկերները կառավարվում են հետևյալ մեթոդներով.

Թիմ
Նկարագրություն

lxc պատկեր Alias
Կառավարեք պատկերների անունները

lxc պատկեր պատճենել
Պատճենեք պատկերները սերվերների միջև

lxc պատկեր ջնջել
Deleteնջել պատկերները

lxc պատկեր խմբագրել
Խմբագրել պատկերի հատկությունները

lxc պատկեր արտահանում
Արտահանել և ներբեռնել պատկերներ

lxc պատկեր ներմուծում
Ներմուծեք պատկերներ պատկերների խանութ

lxc պատկեր Մանրամասն
Ցույց տալ օգտակար տեղեկություններ պատկերների մասին

lxc պատկեր ցուցակ
Թվարկեք պատկերները

lxc պատկեր լավ ուտել ու խմել
Թարմացրեք պատկերները

lxc պատկեր Ցույց տալ
Ցույց տալ պատկերի հատկությունները

Պատկերը պատճենեք տեղական պահոցում գլոբալից images::

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

Image copied successfully!

Եկեք ցուցադրենք տեղական պահոցում ներկայումս առկա բոլոր պատկերների ցանկը local::

lxc image -c lfdatsu list local:

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

LXD կոնֆիգուրացիա ^

Ի լրումն ինտերակտիվ ռեժիմի, LXD-ն աջակցում է նաև ոչ ինտերակտիվ կոնֆիգուրացիայի տեղադրման ռեժիմ, սա այն դեպքում, երբ կազմաձևը նշվում է YAML ֆայլի տեսքով, հատուկ ձևաչափ, որը թույլ է տալիս միանգամից տեղադրել ամբողջ կազմաձևը՝ շրջանցելով կատարումը: շատ ինտերակտիվ հրամաններից, որոնք վերը քննարկվել են այս հոդվածում, ներառյալ ցանցի կազմաձևումը, կազմաձևման պրոֆիլների ստեղծումը և այլն: Մենք այստեղ չենք լուսաբանի այս տարածքը, դուք կարող եք ստուգել այն ինքներդ: փաստաթղթերում.

Հաջորդ ինտերակտիվ հրամանը lxc config որը մենք կդիտարկենք թույլ է տալիս սահմանել կոնֆիգուրացիան: Օրինակ, ապահովելու համար, որ ներբեռնված պատկերները տեղական պահեստում ավտոմատ կերպով չեն թարմացվում համաշխարհային պահեստներից, մենք կարող ենք միացնել այս վարքագիծը հետևյալ հրամանով.

lxc config set images.auto_update_cached=false

Կոնտեյների ստեղծում և կառավարում ^

Կոնտեյներ ստեղծելու համար օգտագործեք հրամանը lxc init որոնց արժեքները փոխանցվում են репозиторий:образ այնուհետև կոնտեյների համար անհրաժեշտ ID-ն: Պահեստը կարող է նշվել որպես տեղական local: այդպես է ցանկացած գլոբալ: Եթե ​​պահոցը նշված չէ, ապա լռելյայնորեն տեղական պահոցն օգտագործվում է պատկերի որոնման համար: Եթե ​​պատկերը նշված է գլոբալ պահոցից, ապա պատկերը նախ կներբեռնվի տեղական պահոց, այնուհետև կօգտագործվի կոնտեյները ստեղծելու համար:

Եկեք գործարկենք հետևյալ հրամանը՝ մեր առաջին կոնտեյները ստեղծելու համար.

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

Եկեք նայենք հրամանի ստեղներին, որոնք մենք օգտագործում ենք այստեղ հերթականությամբ.

  • alpine3 — Նախկինում տեղական շտեմարան վերբեռնված պատկերի համար նշվում է կեղծանուն (alias): Եթե ​​կեղծանունը չի ստեղծվել այս պատկերի համար, ապա դուք միշտ կարող եք դրանով վերաբերվել պատկերին Մատնահետքեր որը ցուցադրված է աղյուսակում:
  • alp — Սահմանում է կոնտեյների նույնացուցիչը
  • --storage — Այս ստեղնը ցույց է տալիս, թե որում Պահեստային լողավազան կստեղծվի կոնտեյներ
  • --profile — Այս ստեղների կասկադը կիրառում է կոնֆիգուրացիան նախկինում ստեղծված կազմաձևման պրոֆիլներից կոնտեյների վրա

Մենք գործարկում ենք կոնտեյները, որը սկսում է գործարկել բաշխման սկզբնական համակարգը.

lxc start alp

Կարող եք նաև օգտագործել հրամանը lxc launch որը թույլ է տալիս միավորել թիմերը lxc init и lxc start մեկ գործողության մեջ.

Կոնտեյների վիճակի ստուգում.

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

Կոնտեյների կոնֆիգուրացիայի ստուգում.

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

Բաժնում profiles մենք կարող ենք համոզվել, որ այս կոնտեյները օգտագործում է երկու կոնֆիգուրացիայի պրոֆիլներ − default и hddroot. Բաժնում devices մենք կարող ենք հայտնաբերել միայն մեկ սարք, քանի որ ցանցային սարքը ստեղծվել է պրոֆիլի մակարդակով default. Կոնտեյների կողմից օգտագործվող բոլոր սարքերը տեսնելու համար անհրաժեշտ է բանալի ավելացնել --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: ""

Ստատիկ IP հասցեի կարգավորում ^

Եթե ​​մենք փորձենք IP հասցե սահմանել ցանցային սարքի համար eth0 թիմը lxc config device set alp նախատեսված է կոնտեյների կազմաձևման համար, այնուհետև մենք կստանանք սխալ, որը կհաղորդի, որ սարքը գոյություն չունի, քանի որ սարքը eth0 որն օգտագործվում է կոնտեյներով պատկանում է պրոֆիլին default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Մենք, իհարկե, կարող ենք սահմանել ստատիկ IP հասցե eth0 սարքեր պրոֆիլում, բայց դա նույնը կլինի բոլոր բեռնարկղերի համար, որոնք կօգտագործեն այս պրոֆիլը: Հետևաբար, եկեք ավելացնենք բեռնարկղին նվիրված սարք.

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

Այնուհետև անհրաժեշտ է վերագործարկել բեռնարկղը.

lxc restart alp

Եթե ​​հիմա նայենք կոնտեյների կոնֆիգուրացիան, մենք կարիք չունենք օգտագործելու տարբերակը --expanded ցանցային սարքը տեսնելու համար eth0, քանի որ մենք ստեղծեցինք այն կոնտեյների մակարդակով և այն կասկադով անցավ նույն սարքի վրա պրոֆիլից 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: ""

Կոնտեյների հեռացում ^

Կոնտեյներ հեռացնելու համար օգտագործեք հրամանը lxc delete, բայց նախքան բեռնարկղը հեռացնելը, այն պետք է դադարեցվի՝ օգտագործելով հրամանը lxc stop:

lxc stop alp

lxc list

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

Այն բանից հետո, երբ մենք ստուգեցինք, որ կոնտեյների վիճակը դարձել է ԴԱԴԱՐԵՑՎԵԼ, այն կարելի է հեռացնել Պահեստային լողավազան:

lxc delete alp

Կոնտեյների մուտք ^

Անմիջապես կոնտեյներով հրամաններ կատարելու համար, շրջանցելով ցանցային կապերը, օգտագործեք հրամանը lxc exec որը հրամաններ է կատարում կոնտեյներով՝ առանց համակարգի կեղևը գործարկելու: Եթե ​​Ձեզ անհրաժեշտ է հրաման կատարել կեղևում՝ օգտագործելով կեղևի օրինաչափություններ, ինչպիսիք են փոփոխականները, ֆայլերի վերահղումները (խողովակ) և այլն, ապա դուք պետք է հստակ գործարկեք կեղևը և հրամանը փոխանցեք որպես բանալի, օրինակ.

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

Հրամանը օգտագործեց հատուկ փախուստի նշան հատուկ բնավորության համար $ այնպես որ փոփոխականը $HOME չի մեկնաբանվել ընդունող մեքենայի վրա, այլ մեկնաբանվել է միայն կոնտեյների ներսում:

Հնարավոր է նաև սկսել ինտերակտիվ կեղևի ռեժիմը, այնուհետև ավարտել նիստը՝ սեղմելով թեժ ստեղնը CTRL+D:

lxc exec alp -- /bin/sh

Կոնտեյներների ռեսուրսների կառավարում ^

LXD-ում դուք կարող եք կառավարել կոնտեյների ռեսուրսները՝ օգտագործելով կոնֆիգուրացիայի հատուկ հավաքածու: Կարելի է գտնել կոնտեյների կազմաձևման պարամետրերի ամբողջական ցանկը փաստաթղթերում.

RAM ռեսուրսների սահմանափակում ^

Parameter limits.memory սահմանափակում է կոնտեյների համար հասանելի RAM-ի քանակը: Արժեքը մի թիվ է և մեկը մատչելի վերջածանցներ.

Եկեք սահմանենք կոնտեյների RAM-ի սահմանաչափը 256 ՄԲ.

lxc config set alp limits.memory 256MB

Բացի այդ, կան հիշողությունը սահմանափակելու այլ պարամետրեր.

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

Թիմ lxc config show թույլ է տալիս ցուցադրել կոնտեյների ամբողջ կազմաձևը, ներառյալ կիրառվող ռեսուրսի սահմանաչափը, որը սահմանվել է.

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 ռեսուրսների սահմանափակում ^

CPU-ի ռեսուրսները սահմանափակելու մի քանի եղանակ կա: սահմանափակումների տեսակները:

  • limit.cpu - կապում է կոնտեյները մեկ կամ մի քանի պրոցեսորի միջուկների հետ
  • limits.cpu.allowance - կառավարում է կամ CFS ժամանակացույցի քվոտաները, երբ լրացել է ժամկետը, կամ պրոցեսորի ռեսուրսների փոխանակման ունիվերսալ մեխանիզմը, երբ տոկոսն անցել է
  • limits.cpu.priority - ժամանակացույցի առաջնահերթություն, երբ պրոցեսորների մի շարք կիսող մի քանի օրինակներին վերագրվում է պրոցեսորների նույն տոկոսը

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

Սկավառակի տարածքի սահմանափակում ^

Ի լրումն սահմանափակումների, ինչպիսիք են limits.read, limits.write մենք կարող ենք նաև սահմանափակել կոնտեյների կողմից սպառվող սկավառակի տարածության քանակը (աշխատում է միայն ZFS-ի կամ BTRFS-ի հետ).

lxc config device set alp root size=2GB

Տեղադրվելուց հետո պարամետրում devices.root.size Մենք կարող ենք ստուգել սահմանված սահմանը.

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

Օգտագործված սկավառակի քվոտաները դիտելու համար մենք կարող ենք ստանալ հրամանից 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

Չնայած այն հանգամանքին, որ մենք սահմանել ենք կոնտեյների արմատային սարքի համար 2 ԳԲ, համակարգի կոմունալ ծառայությունները, ինչպիսիք են. df չի տեսնի այս սահմանափակումը: Դա անելու համար մենք փոքրիկ թեստ կանցկացնենք և կպարզենք, թե ինչպես է այն աշխատում:

Եկեք նույնում ստեղծենք 2 նոր նույնական տարա Պահեստային լողավազան (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         |
+------+---------+------------------+------+-----------+-----------+

Եկեք 1 ԳԲ ֆայլ ստեղծենք կոնտեյներներից մեկում.

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

Եկեք համոզվենք, որ ֆայլը ստեղծվել է.

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

Եթե ​​մենք նայենք երկրորդ կոնտեյներով, ստուգենք ֆայլի առկայությունը նույն վայրում, ապա այս ֆայլը այնտեղ չի լինի, ինչը և սպասվում է, քանի որ կոնտեյներները ստեղծվում են իրենց սեփական. Պահպանման ծավալը նույն Պահեստային լողավազան:

lxc exec alp2 -- ls -lh
total 0

Բայց եկեք համեմատենք դրա արտադրած արժեքները df մեկ և մյուս տարայի վրա.

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

Սարքը /dev/loop1 տեղադրված է այնպես, ինչպես արմատային միջնորմն է Պահեստային լողավազան որոնք օգտագործում են այս տարաները, ուստի դրանք կիսում են դրա ծավալը երկուսի միջև:

Ռեսուրսների սպառման վիճակագրություն ^

Դուք կարող եք դիտել ռեսուրսների սպառման վիճակագրությունը կոնտեյների համար՝ օգտագործելով հրամանը.

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

Աշխատեք snapshot-ի հետ ^

LXD-ն ունի snapshot-ներ ստեղծելու և դրանցից կոնտեյների վիճակը վերականգնելու հնարավորություն։

Պատկերապատկեր ստեղծելու համար գործարկեք հետևյալ հրամանը.

lxc snapshot alp snapshot1

Թիմը lxc snapshot բանալին հասանելի չէ list, հետևաբար, լուսանկարների ցանկը դիտելու համար անհրաժեշտ է օգտագործել հրամանը, որը ցուցադրում է կոնտեյների մասին ընդհանուր տեղեկություններ.

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

Դուք կարող եք վերականգնել կոնտեյները պատկերից՝ օգտագործելով հրամանը lxc restore նշելով այն կոնտեյները, որի համար կիրականացվի վերականգնումը և ակնթարթային կեղծանունը.

lxc restore alp snapshot1

Պատկերը ջնջելու համար օգտագործվում է հետևյալ հրամանը. Խնդրում ենք նկատի ունենալ, որ հրամանի շարահյուսությունը նման չէ բոլոր մյուսներին, այստեղ դուք պետք է նշեք կոնտեյների անունից հետո առաջ կտրվածք: Եթե ​​շեղը բաց է թողնվել, ապա պատկերը ջնջելու հրամանը մեկնաբանվում է որպես կոնտեյներ ջնջելու հրաման:

lxc delete alp/snapshot1

Վերոնշյալ օրինակում մենք նայեցինք, այսպես կոչված, քաղաքացիություն չունեցող լուսանկարներին: LXD-ն ունի մեկ այլ տեսակի snapshots՝ stateful, որը պահպանում է կոնտեյների բոլոր գործընթացների ներկա վիճակը: Կան մի շարք հետաքրքիր և օգտակար գործառույթներ, որոնք կապված են պետական ​​պատկերների հետ:

Էլ ինչ? ^

  • Python մշակողների համար հասանելի է մոդուլ PyLXD որը տրամադրում է API LXD-ին

ԹԱՐՄԱՑՈՒՄ 10.04.2020/15/00 XNUMX:XNUMX. Ավելացված է նավիգացիա

Source: www.habr.com

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