LXD جون بنيادي خاصيتون - لينڪس ڪنٽينر سسٽم

LXD جون بنيادي خاصيتون - لينڪس ڪنٽينر سسٽم

ايل ايڪس ڊي ايندڙ نسل سسٽم ڪنٽينر مينيجر آهي، تنهنڪري اهو چوي ٿو ذريعو. اهو پيش ڪري ٿو يوزر انٽرفيس جهڙو ورچوئل مشينس، پر ان جي بدران لينڪس ڪنٽينرز استعمال ڪري ٿو.

LXD ڪور هڪ مراعات يافته ڊيمون آهي (روٽ حقن سان هلندڙ هڪ خدمت) جيڪا مقامي يونڪس ساکٽ ذريعي REST API مهيا ڪري ٿي، انهي سان گڏ نيٽ ورڪ ذريعي جيڪڏهن مناسب ترتيب نصب ٿيل هجي. ڪلائنٽ، جيئن LXD سان مهيا ڪيل ڪمانڊ لائين ٽول، هن REST API ذريعي درخواستون ڏيو. هن جو مطلب اهو آهي ته ڇا توهان مقامي ميزبان يا ريموٽ ميزبان تائين رسائي ڪري رهيا آهيو، هر شي ساڳيو ڪم ڪري ٿو.

هن آرٽيڪل ۾ اسان LXD جي تصورات تي تفصيل سان نه رهنداسين، اسان دستاويزن ۾ بيان ڪيل سڀني موجود صلاحيتن تي غور نه ڪنداسين، بشمول ڪنٽينرز سان متوازي طور تي QEMU ورچوئل مشينن جي سپورٽ جي LXD جي جديد نسخن ۾ تازو عمل درآمد. ان جي بدران، اسان صرف ڪنٽينر مينيجمينٽ جا بنيادي اصول سکنداسين - اسٽوريج پول قائم ڪرڻ، نيٽ ورڪنگ، ڪنٽينر هلائڻ، وسيلن جي حدن کي لاڳو ڪرڻ، ۽ سنيپ شاٽ ڪيئن استعمال ڪجي ته جيئن توهان LXD جي بنيادي سمجھ حاصل ڪري سگھو ۽ Linux تي ڪنٽينرز استعمال ڪري سگھو.

مڪمل معلومات لاء، مهرباني ڪري ڏسو سرڪاري ذريعو:

چريو

انسٽاليشن LXD ^

Ubuntu تقسيم تي LXD انسٽال ڪرڻ ^

Ubuntu 19.10 تقسيم پيڪيج ۾ lxd تي هڪ نشريات آهي اسنيپ پيڪيج:

apt search lxd

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

هن جو مطلب آهي ته ٻه پيڪيجز هڪ ڀيرو تي نصب ڪيا ويندا، هڪ سسٽم پيڪيج جي طور تي ۽ ٻيو هڪ سنيپ پيڪيج جي طور تي. سسٽم تي ٻه پيڪيجز انسٽال ڪرڻ شايد ڪجهه مسئلا پيدا ڪري سگھن ٿيون جتي سسٽم پيڪيج يتيم ٿي سگهي ٿو جيڪڏهن سنيپ پيڪيج کي سنيپ پيڪيج مينيجر طرفان هٽايو ويو آهي.

پيڪيج ڳوليو lxd سنيپ مخزن ۾ توھان ھيٺ ڏنل حڪم استعمال ڪري سگھو ٿا:

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 هڪ سنيپ پيڪيج آهي، ان کي سسٽم پيڪيج ذريعي نصب ڪيو وڃي lxd، جيڪو سسٽم ۾ لاڳاپيل گروپ ٺاهيندو، ضروري افاديت ۾ /usr/bin ۽ وغيره تي.

sudo apt update
sudo apt install lxd

اچو ته پڪ ڪريو ته پيڪيج هڪ سنيپ پيڪيج جي طور تي نصب ٿيل آهي:

snap list

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

آرڪ لينڪس جي تقسيم تي LXD انسٽال ڪرڻ ^

سسٽم تي 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 يا باقاعده ڊائريڪٽري. هر اسٽوريج پول جلدن ۾ ورهايل آهي (اسٽوريج جو حجم) جنهن ۾ تصويرون، ڪنٽينر، يا ٻين مقصدن لاءِ ڊيٽا شامل هجي.

  • تصويرون - اهي خاص طور تي لينڪس ڪنيل کان سواء گڏ ڪيل تقسيم آهن ۽ ٻاهرين ذريعن کان دستياب آهن
  • ڪنٽينر - اهي تصويرون کان تقسيم ٿيل آهن، استعمال لاء تيار آهن
  • سنيپ شاٽ - اهي ڪنٽينر جي حالت جا سنيپ شاٽ آهن جيڪي توهان واپس ڪري سگهو ٿا

LXD جون بنيادي خاصيتون - لينڪس ڪنٽينر سسٽم

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 ڪجھ سوالن جا جواب.

اسٽوريج پول لاء فائل سسٽم چونڊيو ^

شروعات دوران، LXD ڪيترن ئي سوالن کان پڇي ٿو، بشمول ڊفالٽ لاء فائل سسٽم جي قسم جو تعين ڪرڻ اسٽوريج پول. ڊفالٽ طور، BTRFS فائل سسٽم ان لاء چونڊيو ويو آهي. ٺاھڻ کان پوء ٻئي FS ۾ تبديل ڪرڻ ناممڪن ٿي ويندي. FS چونڊڻ جي صلاح ڏني وئي آهي خصوصيت جي مقابلي واري جدول:

مضمون
ھدايت نامو
Btrfs
LVM
ZFS
سي پي ايڇ

اصلاح ٿيل تصوير اسٽوريج
نه
ها
ها
ها
ها

اصلاح ٿيل مثال ٺاھڻ
نه
ها
ها
ها
ها

اصلاح ٿيل سنيپ شاٽ ٺاھڻ
نه
ها
ها
ها
ها

اصلاح ٿيل تصوير جي منتقلي
نه
ها
نه
ها
ها

اصلاح ٿيل مثال جي منتقلي
نه
ها
نه
ها
ها

ڪاپي لکڻ تي
نه
ها
ها
ها
ها

بلاڪ جي بنياد تي
نه
نه
ها
نه
ها

فوري ڪلوننگ
نه
ها
ها
ها
ها

اسٽوريج ڊرائيور هڪ ڪنٽينر اندر استعمال لائق
ها
ها
نه
نه
نه

پراڻن تصويرن مان بحال ڪريو (تازو نه)
ها
ها
ها
نه
ها

اسٽوريج ڪوٽا
ها(*)
ها
ها
ها
نه

وزرڊ استعمال ڪندي نيٽ ورڪ ۽ اسٽوريج پول کي شروع ڪرڻ ^

اڳيون حڪم جيڪو اسان ڏسندا سين ته 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. هي فائيل سسٽم ايڊريس منهنجي PC ۾ جسماني SSD ڊرائيو سان ملندو آهي.

هيٺ ڏنل ڪارناما، ادا ڪيل ڪردار جي سمجھ کي وڌائڻ لاء اسٽوريج پول مخزن ۾، اسان هڪ ٻيو ٺاهينداسين اسٽوريج پول جيڪو جسماني طور تي مختلف قسم جي ڊسڪ تي واقع هوندو، HDD. مسئلو اهو آهي ته LXD توهان کي ٺاهڻ جي اجازت نٿو ڏئي اسٽوريج پول پتو کان ٻاهر /var/lib/lxd/disks/ ۽ علامتي لنڪس به ڪم نه ڪندا، ڊولپر جو جواب ڏسو. اسان شروعات / فارميٽنگ دوران هن حد کي نظرانداز ڪري سگھون ٿا اسٽوريج پول لوپ بڪ فائل جي رستي جي بدران بلاڪ ڊيوائس جي طور تي قيمت بيان ڪندي هن کي ڪي ۾ بيان ڪندي source.

تنهن ڪري، ٺاهڻ کان اڳ اسٽوريج پول توھان کي ھڪڙي لوپ بڪ فائل جي وضاحت ڪرڻ جي ضرورت آھي يا توھان جي فائل سسٽم تي ھڪڙو موجوده ورهاڱي جيڪو اھو استعمال ڪندو. هن کي ڪرڻ لاء، اسان هڪ فائل ٺاهي ۽ استعمال ڪنداسين جنهن کي اسان 10GB تائين محدود ڪنداسين.

dd if=/dev/zero of=/mnt/work/lxd/hddpool.img bs=1MB count=10000

10000+0 records in
10000+0 records out
10000000000 bytes (10 GB, 9,3 GiB) copied, 38,4414 s, 260 MB/s

اچو ته لوپ بڪ فائل کي مفت لوپ بيڪ ڊوائيس سان ڳنڍيون:

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

/dev/loop1

ڪنجي جي مهرباني --show ڪمانڊ تي عمل ڪرڻ سان اسڪرين تي ڊوائيس جو نالو واپس اچي ٿو جنهن ۾ اسان جي لوپ بڪ فائل ڳنڍيل آهي. جيڪڏهن ضروري هجي ته، اسان هن قسم جي سڀني مصروف ڊوائيسز جي هڪ فهرست ڏيکاري سگهون ٿا ته پڪ ڪرڻ لاء ته اسان جا عمل درست آهن:

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 ۾ لوپ بڪ فائل جي بنياد تي اسان صرف تيار ڪيو. LXD لوپ بڪ فائل کي فارميٽ ڪندو /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

لوپ بڪ ڊيوائس سلاٽ ۾ لوپ بڪ فائل جو خودڪار داخل ڪرڻ ^

اسان وٽ ھڪڙو ننڍڙو مسئلو آھي، جڏھن ھوسٽ سسٽم کي ريبوٽ ڪري، فائل /mnt/work/lxd/hddpool.img ڊوائيس مان "پرواز" ڪندو /dev/loop1 ۽ LXD سروس حادثو ٿيندو جڏهن لوڊ ڪندي ڇو ته اها هن ڊوائيس ۾ نه ڏسندي. هن مسئلي کي حل ڪرڻ لاء، توهان کي هڪ سسٽم سروس ٺاهڻ جي ضرورت آهي جيڪا هن فائل کي ڊوائيس ۾ داخل ڪندي /dev/loop1 جڏهن ميزبان سسٽم بوٽ ڪري ٿو.

اچو ته ٺاهي يونٽ فائل جو قسم خدمت в /etc/systemd/system/ سسٽم ڊي شروعاتي سسٽم لاءِ:

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

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

[Install]
WantedBy=local-fs.target
EOF

خدمت کي چالو ڪريو:

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 جي يو آءِ ڊي سان ڪنٽينر ۾ هلندڙ پروسيس کي 0 جي يو آءِ ڊي سان هوسٽ سسٽم تي عمل جي برابر رسائي جا حق حاصل هوندا آهن. ٻين لفظن ۾، ڪنٽينر ۾ روٽ استعمال ڪندڙ کي نه رڳو سڀ حق آهن. ڪنٽينر، پر ميزبان سسٽم تي پڻ، جيڪڏهن هو ڪنٽينر جي الڳ ٿيل نالي جي جاء کان ٻاهر وڃي سگهي ٿو.

  • اڻڄاتل ڪنٽينرز - اهي ڪنٽينر آهن جن ۾ پروسيس جو تعلق 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 جون بنيادي خاصيتون - لينڪس ڪنٽينر سسٽم

ڪنٽينر نيٽ ورڪ ذريعي ٻين ڪنٽينرز يا ميزبان سان رابطو ڪري سگھن ٿا جن تي اهي ڪنٽينر ڏنا ويندا آهن. هن کي ڪرڻ لاء، توهان کي ڪنٽينرز جي ورچوئل نيٽ ورڪ ڪارڊ کي هڪ ورچوئل سوئچ سان ڳنڍڻ جي ضرورت آهي. اسان پهرين هڪ سوئچ ٺاهينداسين، ۽ ڪنٽينر جي نيٽ ورڪ انٽرفيس کي ايندڙ بابن ۾ ڳنڍيو ويندو، پوءِ ڪنٽينر پاڻ ٺاهي وئي.

هيٺ ڏنل حڪم هڪ سبٽ سان هڪ سوئچ ٺاهي ٿو 10.0.5.0/24 ۽ IPv4 ايڊريس 10.0.5.1/24، ۽ پڻ شامل آهي ipv4.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       |
+--------+----------+---------+-------------+---------+

توھان پڻ تصديق ڪري سگھو ٿا ته ھڪڙو نيٽ ورڪ ڊيوائس ٺاھيو ويو آھي لينڪس ڊويزن جي معياري اوزار استعمال ڪندي. 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 ۾ هر ڪنٽينر جي پنهنجي ترتيب آهي ۽ ان کي عالمي سطح تي اعلان ڪيل ترتيبن سان وڌائي سگھي ٿو. تشڪيل پروفائلز. ڪنٽينر تي ٺاھ جوڙ جي پروفائيل کي لاڳو ڪرڻ ۾ ھڪڙو cascade ماڊل آھي، ھيٺ ڏنل مثال ھن کي ظاھر ڪري ٿو:

LXD جون بنيادي خاصيتون - لينڪس ڪنٽينر سسٽم

هن مثال ۾، LXD سسٽم ۾ ٽي پروفائل ٺاهيا ويا آهن: default, hddpool и hostfs. سڀئي ٽي پروفائيل هڪ ڪنٽينر تي لاڳو ڪيا ويا آهن جنهن ۾ مقامي ترتيب (گرين ايريا) آهي. پروفائل default هڪ ڊوائيس آهي root جنهن جو هڪ پيٽرول آهي pool جي برابر آهي ssdpool، پر مهرباني ڪري cascade ترتيب واري ايپليڪيشن ماڊل، اسان ڪنٽينر تي پروفائل لاڳو ڪري سگھون ٿا 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 جبل پوائنٽ سان / (root) اڳ ۾ ٺهيل استعمال ڪندي اسٽوريج پول - 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: []

تصويري ذخيرو ^

ڪنٽينر تصويرن مان ٺاهيا ويا آهن جيڪي خاص طور تي گڏ ڪيل تقسيم آهن جن ۾ لينڪس ڪنيل نه آهي. تنهن ڪري، ڪنٽينر کي هلائڻ کان اڳ، ان کي هن تصوير مان لڳايو وڃي. تصويرن جو ماخذ هڪ مقامي مخزن آهي جنهن ۾ تصويرون ٻاهرين ذخيرن مان ڊائون لوڊ ڪيون وينديون آهن.

ريموٽ تصويري ذخيرو ^

ڊفالٽ طور، LXD ترتيب ڏنل آهي ٽن ريموٽ ذريعن کان تصويرون حاصل ڪرڻ لاءِ:

  • ubuntu: (مستحڪم Ubuntu تصويرن لاءِ)
  • ubuntu-روزاني: (روزاني Ubuntu تصويرن لاءِ)
  • تصويرون (ٻين distros جي هڪ گروپ لاء)

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 parameters سان dasut، ۽ پڻ حڪم سان لسٽ جي ڊيگهه کي محدود ڪيو head.

تصويرن جي لسٽ کي ڏيکارڻ لاءِ فلٽرنگ موجود آهي. هيٺ ڏنل حڪم سڀني موجود تقسيم آرڪيٽيڪچر کي لسٽ ڪندو الپائن لينڪس:

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 تصوير عرف
تصويرن جي عرفن کي منظم ڪريو

lxc تصوير ڪاپي
سرور جي وچ ۾ تصويرون نقل ڪريو

lxc تصوير ختم ڪريو
تصويرون ختم ڪريو

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 - هڪ عرف (عرف) تصوير لاءِ مخصوص ڪيو ويو آهي جيڪا اڳ ۾ مقامي مخزن تي اپ لوڊ ڪئي وئي هئي. جيڪڏهن عرف هن تصوير لاءِ پيدا نه ڪيو ويو هو، ته پوءِ توهان هميشه هن تصوير ڏانهن اشارو ڪري سگهو ٿا فنگر پرنٽنگ جيڪو ٽيبل ۾ ڏيکاريل آهي.
  • 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"

حڪم هڪ خاص فرار ڪردار استعمال ڪيو خاص ڪردار لاء $ ته جيئن variable $HOME هوسٽ مشين تي تشريح نه ڪئي وئي، پر صرف ڪنٽينر اندر تشريح ڪئي وئي.

اهو پڻ ممڪن آهي ته انٽرايڪٽو شيل موڊ کي شروع ڪريو، ۽ پوء سيشن ختم ڪريو هاٽ ڪيئي کي عمل ڪندي CTRL+D:

lxc exec alp -- /bin/sh

ڪنٽينر وسيلن جو انتظام ^

LXD ۾، توهان ڪنٽينر وسيلن کي منظم ڪري سگھو ٿا ترتيب جي خاص سيٽ استعمال ڪندي. ڪنٽينر جي ٺاھ جوڙ جي پيراگراف جي مڪمل فهرست ڳولي سگھجي ٿو دستاويز ۾.

RAM وسيلن جي حد ^

نيم limits.memory ڪنٽينر تي موجود رام جي مقدار کي محدود ڪري ٿو. قدر ھڪڙو نمبر ۽ ھڪڙو آھي موجود لاڳاپا.

اچو ته ڪنٽينر جي رام جي حد کي 256 MB تائين مقرر ڪريو:

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 وسيلن جي حد ^

سي پي يو وسيلن کي محدود ڪرڻ جا ڪيترائي طريقا آهن. پابنديون جا قسم:

  • 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

ان حقيقت جي باوجود ته اسان ڪنٽينر جي روٽ ڊيوائس جي حد مقرر ڪئي آهي 2GB تائين، سسٽم يوٽيلٽيز جهڙوڪ 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         |
+------+---------+------------------+------+-----------+-----------+

اچو ته ھڪڙي 1GB فائل ٺاھيون ھڪڙي ڪنٽينر ۾:

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

تصويرن سان ڪم ڪرڻ ^

LXD کي سنيپ شاٽ ٺاهڻ ۽ انهن مان ڪنٽينر اسٽيٽ بحال ڪرڻ جي صلاحيت آهي.

سنيپ شاٽ ٺاھڻ لاءِ ھيٺ ڏنل حڪم ھلايو:

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 وٽ هڪ ٻيو قسم جو سنيپ شاٽ آهي - رياستي، جيڪو ڪنٽينر ۾ سڀني عملن جي موجوده حالت کي بچائيندو آهي. رياستي تصويرن سان لاڳاپيل ڪيترائي دلچسپ ۽ مفيد خاصيتون آهن.

ٻيو ڇا؟ ^

  • Python ڊولپرز لاءِ ھڪڙو ماڊل موجود آھي پي ايل ايڪس ڊي جيڪو LXD کي API مهيا ڪري ٿو

اپڊيٽ 10.04.2020/15/00 XNUMX:XNUMX: نيويگيشن شامل ڪئي وئي

جو ذريعو: www.habr.com

تبصرو شامل ڪريو