LXD کی بنیادی خصوصیات - لینکس کنٹینر سسٹم

LXD کی بنیادی خصوصیات - لینکس کنٹینر سسٹم

ایل ایکس ڈی اگلی نسل کا سسٹم کنٹینر مینیجر ہے، تو یہ کہتا ہے۔ ذرائع. یہ ورچوئل مشینوں کی طرح یوزر انٹرفیس پیش کرتا ہے، لیکن اس کے بجائے لینکس کنٹینرز استعمال کرتا ہے۔

LXD کور ایک مراعات یافتہ ڈیمون ہے (روٹ رائٹس کے ساتھ چلنے والی ایک سروس) جو کہ مقامی یونکس ساکٹ کے ساتھ ساتھ نیٹ ورک کے ذریعے اگر مناسب کنفیگریشن انسٹال ہو تو REST API فراہم کرتی ہے۔ کلائنٹ، جیسے LXD کے ساتھ فراہم کردہ کمانڈ لائن ٹول، اس REST API کے ذریعے درخواستیں کرتے ہیں۔ اس کا مطلب یہ ہے کہ چاہے آپ مقامی میزبان یا دور دراز کے میزبان تک رسائی حاصل کر رہے ہوں، سب کچھ ایک جیسا کام کرتا ہے۔

اس مضمون میں ہم LXD کے تصورات پر تفصیل سے غور نہیں کریں گے، ہم دستاویزات میں بیان کردہ تمام دستیاب صلاحیتوں پر غور نہیں کریں گے، بشمول کنٹینرز کے متوازی طور پر QEMU ورچوئل مشینوں کے لیے سپورٹ کے LXD کے تازہ ترین ورژنز میں حالیہ عمل درآمد۔ اس کے بجائے، ہم کنٹینر مینجمنٹ کی صرف بنیادی باتیں سیکھیں گے - سٹوریج پول ترتیب دینا، نیٹ ورکنگ کرنا، کنٹینر چلانا، وسائل کی حدیں لگانا، اور سنیپ شاٹس استعمال کرنے کا طریقہ تاکہ آپ LXD کی بنیادی سمجھ حاصل کر سکیں اور لینکس پر کنٹینرز استعمال کر سکیں۔

مکمل معلومات کے لیے، براہ کرم سرکاری ذریعہ سے رجوع کریں:

نیویگیشن

انسٹالیشن 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 کو منتخب کرنے کے لیے تجویز کیا جاتا ہے۔ خصوصیت کے موازنہ کی میز:

نمایاں کریں
ڈائریکٹری
بی ٹی آر ایف
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. یہ فائل سسٹم ایڈریس میرے پی سی میں فزیکل ایس ایس ڈی ڈرائیو کے مساوی ہے۔

مندرجہ ذیل اعمال، کی طرف سے ادا کردار کی تفہیم کو بڑھانے کے لئے اسٹوریج پول مخزن میں، ہم ایک دوسرا بنائیں گے۔ اسٹوریج پول جو جسمانی طور پر ایک مختلف قسم کی ڈسک، 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 لوپ بیک فائل بھی شامل ہے۔ /mnt/work/lxd/hddpool.img، اور ڈیوائس میں /dev/loop0 لوپ بیک فائل بھی شامل ہے۔ /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/ 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 کے لیے ماسک سیٹ کریں گے:

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 تاکہ کنٹینرز 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 میں ہر کنٹینر کی اپنی ترتیب ہوتی ہے اور اسے عالمی سطح پر اعلان کردہ کنفیگریشنز کے ساتھ بڑھایا جا سکتا ہے کنفیگریشن پروفائلز. کنفیگریشن پروفائلز کو کنٹینر پر لاگو کرنے میں ایک جھرن والا ماڈل ہوتا ہے، درج ذیل مثال اس کو ظاہر کرتی ہے:

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:

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-dely: (روزانہ اوبنٹو امیجز کے لیے)
  • تصاویر: (دوسرے ڈسٹرو کے ایک گروپ کے لیے)

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

مثال کے طور پر، repository 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.

تصویروں کی فہرست ظاہر کرنے کے لیے فلٹرنگ دستیاب ہے۔ درج ذیل کمانڈ تمام دستیاب ڈسٹری بیوشن آرکیٹیکچرز کی فہرست دے گی۔ الپائن لینکس:

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 پتہ ترتیب دینا ^

اگر ہم نیٹ ورک ڈیوائس کے لیے آئی پی ایڈریس سیٹ کرنے کی کوشش کرتے ہیں۔ 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 وسائل کی حد ^

پیرامیٹر limits.memory کنٹینر پر دستیاب RAM کی مقدار کو محدود کرتا ہے۔ قدر ایک عدد اور ایک ہے۔ دستیاب لاحقے.

آئیے کنٹینر کی RAM کی حد 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 وسائل کی حد ^

CPU وسائل کو محدود کرنے کے کئی طریقے ہیں۔ پابندیوں کی اقسام:

  • limit.cpu - ایک کنٹینر کو ایک یا زیادہ CPU کور سے جوڑتا ہے۔
  • limits.cpu.allowance - وقت کی حد گزر جانے پر یا تو CFS شیڈولر کوٹے کا انتظام کرتا ہے، یا فیصد گزر جانے پر یونیورسل CPU ریسورس شیئرنگ میکانزم
  • 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 کے پاس ایک اور قسم کا سنیپ شاٹ بھی ہے - اسٹیٹفول، جو کنٹینر میں تمام عمل کی موجودہ حالت کو محفوظ کرتا ہے۔ اسٹیٹفول سنیپ شاٹس متعدد دلچسپ اور مفید خصوصیات کے ساتھ آتے ہیں۔

اور کیا؟ ^

  • ایک ماڈیول ازگر کے ڈویلپرز کے لیے دستیاب ہے۔ پی ایل ایکس ڈی جو LXD کو API فراہم کرتا ہے۔

اپ ڈیٹ 10.04.2020/15/00 XNUMX:XNUMX: نیویگیشن شامل کر دی گئی۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں