ProHoster > Օրագիր > Վարչակազմը > LXD - Linux կոնտեյներային համակարգերի հիմնական առանձնահատկությունները
LXD - Linux կոնտեյներային համակարգերի հիմնական առանձնահատկությունները
LXD հաջորդ սերնդի համակարգի կոնտեյների կառավարիչն է, այնպես որ ասվում է աղբյուր. Այն առաջարկում է վիրտուալ մեքենաների նման ինտերֆեյս, բայց փոխարենը օգտագործում է Linux կոնտեյներներ:
LXD միջուկ արտոնյալ դեյմոն է (ծառայություն, որն աշխատում է արմատային իրավունքներով), որն ապահովում է REST API տեղական unix վարդակից, ինչպես նաև ցանցի միջոցով, եթե տեղադրված է համապատասխան կոնֆիգուրացիան։ Հաճախորդները, ինչպիսիք են LXD-ով տրամադրված հրամանի տող գործիքը, հարցումներ են կատարում այս REST API-ի միջոցով: Սա նշանակում է, որ անկախ նրանից՝ դուք մուտք եք գործում տեղական հոսթ, թե հեռավոր հոսթ, ամեն ինչ նույնն է աշխատում:
Այս հոդվածում մենք մանրամասնորեն չենք խոսի LXD հասկացությունների մասին, մենք չենք դիտարկի փաստաթղթերում նշված բոլոր հասանելի հնարավորությունները, ներառյալ բեռնարկղերի հետ զուգահեռ QEMU վիրտուալ մեքենաների աջակցության LXD-ի վերջին տարբերակներում: Փոխարենը, մենք կսովորենք միայն կոնտեյներների կառավարման հիմունքները՝ պահեստային լողավազանների տեղադրում, ցանցի ստեղծում, կոնտեյների գործարկում, ռեսուրսների սահմանափակումների կիրառում և ինչպես օգտագործել snapshots, որպեսզի կարողանաք հիմնական պատկերացում կազմել LXD-ի մասին և օգտագործել կոնտեյներներ Linux-ում:
Ամբողջական տեղեկատվության համար խնդրում ենք դիմել պաշտոնական աղբյուրին.
Սա նշանակում է, որ միանգամից երկու փաթեթ կտեղադրվի՝ մեկը որպես համակարգային փաթեթ, մյուսը՝ 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 փաթեթը համակարգում տեղադրելու համար անհրաժեշտ է գործարկել հետևյալ հրամանները, առաջինը կթարմացնի պահեստում առկա համակարգի փաթեթների ցանկը, երկրորդը ուղղակիորեն կտեղադրի փաթեթը.
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 ծառայության բեռնում համակարգի գործարկման ժամանակ.
Նախքան սկզբնավորումը սկսելը, մենք պետք է հասկանանք, թե ինչպես է LXD-ում պահեստավորումը տրամաբանորեն դասավորված:
Պահպանում (Պահեստ) բաղկացած է մեկից կամ մի քանիսից Պահեստային լողավազան որն օգտագործում է աջակցվող ֆայլային համակարգերից մեկը, ինչպիսիք են ZFS, BTRFS, LVM կամ սովորական գրացուցակներ: Ամեն Պահեստային լողավազան բաժանված է հատորների (Պահպանման ծավալը) որոնք պարունակում են պատկերներ, բեռնարկղեր կամ տվյալներ այլ նպատակների համար:
Նկարներ - սրանք հատուկ հավաքված բաշխումներ են առանց 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 սկզբնավորում, որը ստեղծում և կարգավորում է ցանցը և պահեստը: Սա կարելի է ձեռքով անել՝ օգտագործելով ստանդարտ հաճախորդի հրամանները, որոնք հասանելի են ցանկում՝ զանգահարելով հրամանը 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 սարքին.
Բանալու շնորհիվ --show հրամանի կատարումը էկրանին վերադարձնում է սարքի անունը, որին միացված է մեր loopback ֆայլը: Անհրաժեշտության դեպքում մենք կարող ենք ցուցադրել այս տեսակի բոլոր զբաղված սարքերի ցանկը՝ համոզվելու համար, որ մեր գործողությունները ճիշտ են.
Ցանկից կարող եք գտնել, որ սարքն ունի /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 ֆայլային համակարգի համար.
Ստեղծումից հետո Պահեստային լողավազան, անհրաժեշտության դեպքում այն կարող է ընդլայնվել։ Համար Պահեստային լողավազան BTRFS ֆայլային համակարգի հիման վրա գործարկեք հետևյալ հրամանները.
Մենք ունենք մեկ փոքր խնդիր, երբ վերաբեռնում ենք հոսթ համակարգը՝ ֆայլը /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-ի դիմակը կդնենք.
Քանի որ մենք նախկինում նախաստորագրել ենք ցանցը՝ օգտագործելով սկզբնավորման մոգը lxd init և ստեղծել ցանցային սարք lxdbr0, ապա այս բաժնում մենք պարզապես կծանոթանանք LXD-ում ցանցային կապին և ինչպես ստեղծել վիրտուալ անջատիչ (կամուրջ)՝ օգտագործելով հաճախորդի հրամանը։
Հետևյալ դիագրամը ցույց է տալիս, թե ինչպես է անջատիչը (կամուրջը) միացնում հյուրընկալողը և բեռնարկղերը ցանցի մեջ.
Կոնտեյներները կարող են ցանցի միջոցով հաղորդակցվել այլ բեռնարկղերի կամ հյուրընկալողի հետ, որի վրա սպասարկվում են այդ բեռնարկղերը: Դա անելու համար հարկավոր է բեռնարկղերի վիրտուալ ցանցային քարտերը միացնել վիրտուալ անջատիչով։ Մենք նախ կստեղծենք անջատիչ, և կոնտեյների ցանցային ինտերֆեյսները կկապվեն հաջորդ գլուխներում՝ հենց կոնտեյների ստեղծումից հետո:
Հետևյալ հրամանը ստեղծում է ենթացանցով անջատիչ 10.0.5.0/24 և IPv4 հասցե 10.0.5.1/24, և նաև ներառում է ipv4.nat որպեսզի կոնտեյներները կարողանան ինտերնետ մուտք գործել հոսթի միջոցով՝ օգտագործելով NAT ծառայությունը.
LXD-ի յուրաքանչյուր կոնտեյներ ունի իր սեփական կոնֆիգուրացիան և կարող է երկարացնել այն գլոբալ հայտարարված կոնֆիգուրացիաներով, որոնք կոչվում են կոնֆիգուրացիայի պրոֆիլներ. Կոնֆիգուրացիայի պրոֆիլների կիրառումը կոնտեյների վրա ունի կասկադային մոդել, սա ցույց է տալիս հետևյալ օրինակը.
Այս օրինակում 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:
Կոնտեյներները ստեղծվում են պատկերներից, որոնք հատուկ հավաքված բաշխումներ են, որոնք չունեն Linux միջուկ: Հետևաբար, նախքան բեռնարկղը գործարկելը, այն պետք է տեղակայվի այս պատկերից: Պատկերների աղբյուրը տեղական պահոցն է, որտեղ պատկերները ներբեռնվում են արտաքին պահոցներից:
Կոնտեյների օգտագործումը սկսելու համար անհրաժեշտ է գլոբալ պահոցից պատկեր ավելացնել տեղականին local:. Այժմ տեղական պահեստը դատարկ է, հրամանը կհամոզվի դրանում lxc image list. Եթե մեթոդը list մի նշեք պահեստ, ապա տեղական շտեմարանը կօգտագործվի լռելյայն. local:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+
Պահեստում պատկերները կառավարվում են հետևյալ մեթոդներով.
Թիմ
Նկարագրություն
lxc պատկեր Alias
Կառավարեք պատկերների անունները
lxc պատկեր պատճենել
Պատճենեք պատկերները սերվերների միջև
lxc պատկեր ջնջել
Deleteնջել պատկերները
lxc պատկեր խմբագրել
Խմբագրել պատկերի հատկությունները
lxc պատկեր արտահանում
Արտահանել և ներբեռնել պատկերներ
Ի լրումն ինտերակտիվ ռեժիմի, LXD-ն աջակցում է նաև ոչ ինտերակտիվ կոնֆիգուրացիայի տեղադրման ռեժիմ, սա այն դեպքում, երբ կազմաձևը նշվում է YAML ֆայլի տեսքով, հատուկ ձևաչափ, որը թույլ է տալիս միանգամից տեղադրել ամբողջ կազմաձևը՝ շրջանցելով կատարումը: շատ ինտերակտիվ հրամաններից, որոնք վերը քննարկվել են այս հոդվածում, ներառյալ ցանցի կազմաձևումը, կազմաձևման պրոֆիլների ստեղծումը և այլն: Մենք այստեղ չենք լուսաբանի այս տարածքը, դուք կարող եք ստուգել այն ինքներդ: փաստաթղթերում.
Հաջորդ ինտերակտիվ հրամանը lxc config որը մենք կդիտարկենք թույլ է տալիս սահմանել կոնֆիգուրացիան: Օրինակ, ապահովելու համար, որ ներբեռնված պատկերները տեղական պահեստում ավտոմատ կերպով չեն թարմացվում համաշխարհային պահեստներից, մենք կարող ենք միացնել այս վարքագիծը հետևյալ հրամանով.
Կոնտեյներ ստեղծելու համար օգտագործեք հրամանը 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 |
+------+---------+------------------+------+-----------+--------------+
Բաժնում profiles մենք կարող ենք համոզվել, որ այս կոնտեյները օգտագործում է երկու կոնֆիգուրացիայի պրոֆիլներ − default и hddroot. Բաժնում devices մենք կարող ենք հայտնաբերել միայն մեկ սարք, քանի որ ցանցային սարքը ստեղծվել է պրոֆիլի մակարդակով default. Կոնտեյների կողմից օգտագործվող բոլոր սարքերը տեսնելու համար անհրաժեշտ է բանալի ավելացնել --expanded:
Եթե մենք փորձենք 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 exec որը հրամաններ է կատարում կոնտեյներով՝ առանց համակարգի կեղևը գործարկելու: Եթե Ձեզ անհրաժեշտ է հրաման կատարել կեղևում՝ օգտագործելով կեղևի օրինաչափություններ, ինչպիսիք են փոփոխականները, ֆայլերի վերահղումները (խողովակ) և այլն, ապա դուք պետք է հստակ գործարկեք կեղևը և հրամանը փոխանցեք որպես բանալի, օրինակ.
lxc exec alp -- /bin/sh -c "echo $HOME"
Հրամանը օգտագործեց հատուկ փախուստի նշան հատուկ բնավորության համար $ այնպես որ փոփոխականը $HOME չի մեկնաբանվել ընդունող մեքենայի վրա, այլ մեկնաբանվել է միայն կոնտեյների ներսում:
Հնարավոր է նաև սկսել ինտերակտիվ կեղևի ռեժիմը, այնուհետև ավարտել նիստը՝ սեղմելով թեժ ստեղնը CTRL+D:
LXD-ում դուք կարող եք կառավարել կոնտեյների ռեսուրսները՝ օգտագործելով կոնֆիգուրացիայի հատուկ հավաքածու: Կարելի է գտնել կոնտեյների կազմաձևման պարամետրերի ամբողջական ցանկը փաստաթղթերում.
limit.cpu - կապում է կոնտեյները մեկ կամ մի քանի պրոցեսորի միջուկների հետ
limits.cpu.allowance - կառավարում է կամ CFS ժամանակացույցի քվոտաները, երբ լրացել է ժամկետը, կամ պրոցեսորի ռեսուրսների փոխանակման ունիվերսալ մեխանիզմը, երբ տոկոսն անցել է
limits.cpu.priority - ժամանակացույցի առաջնահերթություն, երբ պրոցեսորների մի շարք կիսող մի քանի օրինակներին վերագրվում է պրոցեսորների նույն տոկոսը
Ի լրումն սահմանափակումների, ինչպիսիք են 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 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 տեղադրված է այնպես, ինչպես արմատային միջնորմն է Պահեստային լողավազան որոնք օգտագործում են այս տարաները, ուստի դրանք կիսում են դրա ծավալը երկուսի միջև:
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, որը պահպանում է կոնտեյների բոլոր գործընթացների ներկա վիճակը: Կան մի շարք հետաքրքիր և օգտակար գործառույթներ, որոնք կապված են պետական պատկերների հետ: