الميزات الأساسية لنظام LXD - Linux Container Systems

الميزات الأساسية لنظام LXD - Linux Container Systems

LXD هو مدير حاويات النظام من الجيل التالي ، كما تقول مصدر. يقدم واجهة مستخدم مشابهة للأجهزة الافتراضية ، ولكن باستخدام حاويات Linux بدلاً من ذلك.

LXD الأساسية هو برنامج خفي ذو امتياز (خدمة تعمل كجذر) يوفر واجهة برمجة تطبيقات REST عبر مقبس يونكس محلي ، وكذلك عبر الشبكة إذا تم تعيين التكوين المناسب. يرسل العملاء مثل أداة سطر الأوامر المتوفرة مع LXD الطلبات من خلال REST API. هذا يعني أنه سواء كنت تقوم بالوصول إلى مضيف محلي أو مضيف بعيد ، فإن كل شيء يعمل بنفس الطريقة.

في هذه المقالة ، لن نتطرق إلى مفاهيم LXD ، ولن نأخذ في الاعتبار جميع الميزات المتاحة الموضحة في الوثائق ، بما في ذلك التنفيذ الأخير في أحدث إصدارات LXD لدعم أجهزة QEMU الافتراضية بالتوازي مع الحاويات. بدلاً من ذلك ، سنتعلم فقط أساسيات إدارة الحاويات - إعداد مجموعات التخزين ، والشبكات ، وتشغيل حاوية ، وتطبيق حدود الموارد ، والنظر في كيفية استخدام اللقطات حتى تتمكن من الحصول على فهم أساسي لـ LXD واستخدام الحاويات على Linux.

للحصول على معلومات كاملة ، يرجى الرجوع إلى المصدر الرسمي:

ملاحة

تركيب LXD ^

تثبيت LXD على توزيعات Ubuntu ^

في توزيع Ubuntu 19.10 ، الحزمة lxd له بث على حزمة المفاجئة:

apt search lxd

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

هذا يعني أنه سيتم تثبيت حزمتين في وقت واحد ، حزمة نظام واحدة ، والأخرى كحزمة snap. يمكن أن يؤدي تثبيت حزمتين على النظام إلى إنشاء مشكلة حيث يمكن أن تصبح حزمة النظام معزولة إذا تمت إزالة حزمة snap بواسطة مدير الحزم snap.

ابحث عن حزمة 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:

snap list

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

تثبيت LXD على توزيعات Arch Linux ^

لتثبيت حزمة LXD في النظام ، تحتاج إلى تشغيل الأوامر التالية ، الأول يقوم بتحديث قائمة الحزم في النظام المتاح في المستودع ، والثاني يقوم بتثبيت الحزمة مباشرة:

sudo pacman -Syyu && sudo pacman -S lxd

بعد تثبيت الحزمة ، من أجل إدارة LXD كمستخدم عادي ، يجب إضافتها إلى مجموعة النظام lxd:

sudo usermod -a -G lxd user1

تأكد من المستخدم user1 تمت إضافته إلى المجموعة lxd:

id -Gn user1

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

إذا كانت المجموعة lxd غير مرئي في القائمة ، فأنت بحاجة إلى إعادة تنشيط جلسة المستخدم. للقيام بذلك ، تحتاج إلى تسجيل الخروج وتسجيل الدخول باعتبارك نفس المستخدم.

تنشيط في systemd تحميل خدمة LXD عند بدء تشغيل النظام:

sudo systemctl enable lxd

نبدأ الخدمة:

sudo systemctl start lxd

التحقق من حالة الخدمة:

sudo systemctl status lxd

التخزين LXD (التخزين) ^

قبل بدء التهيئة ، نحتاج إلى فهم كيفية ترتيب التخزين في LXD منطقيًا.

تخزين (الخزائن ) يتكون من من واحد أو أكثر تجمع التخزين الذي يستخدم أحد أنظمة الملفات المدعومة مثل ZFS أو BTRFS أو LVM أو الدلائل العادية. كل تجمع التخزين مقسمة إلى مجلداتحجم التخزين) التي تحتوي على صور أو حاويات أو بيانات لأغراض أخرى.

  • الصور هي توزيعات مبنية خصيصًا بدون نواة Linux ومتاحة من مصادر خارجية
  • حاويات - هذه توزيعات منتشرة من الصور جاهزة للتشغيل
  • لقطات - هذه لقطات لحالة الحاويات التي يمكنك العودة إليها

الميزات الأساسية لنظام LXD - Linux Container Systems

لإدارة التخزين في 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
CEPH

التخزين الأمثل للصور
لا
نعم فعلا
نعم فعلا
نعم فعلا
نعم فعلا

إنشاء المثيل الأمثل
لا
نعم فعلا
نعم فعلا
نعم فعلا
نعم فعلا

إنشاء لقطة محسن
لا
نعم فعلا
نعم فعلا
نعم فعلا
نعم فعلا

نقل الصورة الأمثل
لا
نعم فعلا
لا
نعم فعلا
نعم فعلا

نقل المثيل الأمثل
لا
نعم فعلا
لا
نعم فعلا
نعم فعلا

نسخ عند الكتابة
لا
نعم فعلا
نعم فعلا
نعم فعلا
نعم فعلا

قائم على الكتلة
لا
لا
نعم فعلا
لا
نعم فعلا

الاستنساخ الفوري
لا
نعم فعلا
نعم فعلا
نعم فعلا
نعم فعلا

سائق التخزين يمكن استخدامها داخل الحاوية
نعم فعلا
نعم فعلا
لا
لا
لا

استعادة من اللقطات القديمة (ليست الأحدث)
نعم فعلا
نعم فعلا
نعم فعلا
لا
نعم فعلا

حصص التخزين
نعم(*)
نعم فعلا
نعم فعلا
نعم فعلا
لا

تهيئة الشبكة وتجمع التخزين باستخدام المعالج ^

الأمر التالي الذي سننظر إليه هو إعداد المكونات الرئيسية لـ LXD من خلال الإجابة على أسئلة بسيطة باستخدام معالج التهيئة.

الأمر Run 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 الفعلي في جهاز الكمبيوتر الخاص بي.

الإجراءات التالية ، من أجل زيادة فهم الدور الذي يلعبه تجمع التخزين في المستودع ، سننشئ ثانية تجمع التخزين والذي سيكون موجودًا فعليًا على نوع آخر من الأقراص ، على محرك الأقراص الثابتة. المشكلة هي أن LXD لا يسمح لك بإنشاء ملفات تجمع التخزين خارج العنوان /var/lib/lxd/disks/ وحتى الروابط الرمزية لن تعمل ، انظر إجابة المطور. يمكننا التغلب على هذا القيد عند التهيئة / التنسيق تجمع التخزين من خلال تحديد القيمة كجهاز كتلة بدلاً من المسار إلى ملف الاسترجاع عن طريق تحديد هذا في المفتاح source.

لذلك قبل الخلق تجمع التخزين تحتاج إلى تحديد ملف استرجاع أو قسم موجود على نظام الملفات الخاص بك والذي سيستخدمه. للقيام بذلك ، سننشئ ونستخدم ملفًا يقتصر حجمه على 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

قم بتوصيل ملف الاسترجاع بجهاز استرجاع مجاني:

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/ لنظام init 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 مع المالك نفسه كما هو الحال في النظام المضيف. على سبيل المثال ، العملية التي يتم تشغيلها في حاوية مع UID 0 لها نفس الأذونات مثل عملية نظام مضيف مع UID 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 - Linux Container Systems

يمكن للحاويات التواصل عبر الشبكة مع الحاويات الأخرى أو المضيف الذي يتم تقديم هذه الحاويات عليه. للقيام بذلك ، تحتاج إلى ربط بطاقات الشبكة الافتراضية للحاويات بالمحول الظاهري. لنقم بإنشاء المحول أولاً ، وسيتم ربط واجهات شبكة الحاوية في فصول لاحقة بعد إنشاء الحاوية نفسها.

يقوم الأمر التالي بإنشاء مفتاح تبديل بشبكة فرعية 10.0.5.0/24 وعنوان IPv4 10.0.5.1/24ويشمل أيضًا ipv4.nat حتى تتمكن الحاويات من الوصول إلى الإنترنت من خلال المضيف باستخدام خدمة NAT:

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

تحقق من قائمة أجهزة الشبكة المتوفرة LXD:

lxc network list

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

أيضًا ، يمكنك التأكد من إنشاء جهاز شبكة باستخدام أداة توزيع Linux القياسية - ip link أو ip addr:

ip addr

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

ملف التكوين ^

كل حاوية في LXD لها تكوينها الخاص ويمكن أن تمدها مع التكوينات المعلنة عالميًا المسماة ملفات تعريف التكوين. تطبيق ملفات تعريف التكوين على حاوية له نموذج متتالي ، يوضح المثال التالي هذا:

الميزات الأساسية لنظام LXD - Linux Container Systems

في هذا المثال ، يتم إنشاء ثلاثة ملفات تعريف في نظام LXD: default, hddpool и hostfs. يتم تطبيق ملفات التعريف الثلاثة على حاوية لها تكوين محلي (منطقة رمادية). حساب تعريفي default لديه جهاز root المعلمة التي pool يساوي ssdpool، ولكن بفضل نموذج تطبيق التكوين المتتالي ، يمكننا تطبيق ملف تعريف على الحاوية hddpool المعلمة التي pool سوف يتجاوز نفس المعلمة من ملف التعريف default وستحصل الحاوية على تكوين الجهاز root مع المعلمة pool متساو hddpoolوالملف الشخصي hostfs ببساطة يضيف جهازًا جديدًا إلى الحاوية.

للاطلاع على قائمة ملفات تعريف التكوين المتوفرة ، استخدم الأمر التالي:

lxc profile list

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

يمكن الحصول على قائمة كاملة بالأوامر المتاحة للعمل مع ملف تعريف عن طريق إضافة المفتاح --help:

lxc profile --help

Description:
  Manage profiles

Usage:
  lxc profile [command]

Available Commands:
  add         Add profiles to instances
  assign      Assign sets of profiles to instances
  copy        Copy profiles
  create      Create profiles
  delete      Delete profiles
  device      Manage instance devices
  edit        Edit profile configurations as YAML
  get         Get values for profile configuration keys
  list        List profiles
  remove      Remove profiles from instances
  rename      Rename profiles
  set         Set profile configuration keys
  show        Show profile configurations
  unset       Unset profile configuration keys

تحرير الملف الشخصي ^

ملف التكوين الافتراضي default لا يحتوي على تكوين بطاقة شبكة للحاوية ولا تحتوي جميع الحاويات التي تم إنشاؤها حديثًا على شبكة ، فمن الضروري إنشاء أجهزة شبكة محلية (مخصصة) بأمر منفصل ، ولكن يمكننا إنشاء جهاز شبكة عالمية في التكوين ملف التعريف الذي ستتم مشاركته بين جميع الحاويات التي تستخدم هذا الملف الشخصي. وبالتالي ، مباشرة بعد الأمر بإنشاء حاوية جديدة ، سيكون لديهم شبكة مع إمكانية الوصول إلى الشبكة. ومع ذلك ، لا توجد قيود ، يمكننا دائمًا إنشاء جهاز شبكة محلي لاحقًا إذا لزم الأمر.

سيضيف الأمر التالي جهازًا إلى ملف تعريف التكوين eth0 نوع nic متصل بالشبكة lxdbr0:

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

من المهم ملاحظة أنه نظرًا لأننا أضفنا الجهاز بالفعل إلى ملف تعريف التكوين ، إذا حددنا عنوان IP ثابتًا في الجهاز ، فإن جميع الحاويات التي ستستخدم هذا الملف الشخصي ستشترك في نفس عنوان IP. إذا كانت هناك حاجة لإنشاء حاوية بعنوان IP ثابت مخصص للحاوية ، فيجب عليك إنشاء تكوين جهاز شبكة على مستوى الحاوية (التكوين المحلي) باستخدام معلمة عنوان IP ، وليس على مستوى ملف التعريف.

دعنا نتحقق من الملف الشخصي:

lxc profile show default

config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic
  root:
    path: /
    pool: ssdpool
    type: disk
name: default
used_by: []

في ملف التعريف هذا ، يمكننا أن نرى أنه سيتم إنشاء جهازين (جهازين) لجميع الحاويات التي تم إنشاؤها حديثًا:

  • eth0 - نوع الجهاز nic متصل بمحول (جسر شبكة) lxdbr0
  • root - نوع الجهاز disk الذي يستخدم مجمع التخزين ssdpool

إنشاء ملفات تعريف جديدة ^

لاستخدام تم إنشاؤه مسبقًا تجمع التخزين حاويات ، قم بإنشاء ملف تعريف التكوين ssdroot التي نضيف فيها جهاز من النوع disk مع نقطة جبل / (الجذر) باستخدام ملف تجمع التخزين - ssdpool:

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

وبالمثل ، نقوم بإنشاء جهاز من النوع disk، ولكن في هذه الحالة باستخدام تجمع التخزين - hddpool:

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

التحقق من ملفات تعريف التكوين:

lxc profile show ssdroot

config: {}
description: ""
devices:
  root:
    path: /
    pool: ssdpool
    type: disk
name: ssdroot
used_by: []

lxc profile show hddroot

config: {}
description: ""
devices:
  root:
    path: /
    pool: hddpool
    type: disk
name: hddroot
used_by: []

مستودع الصور ^

يتم إنشاء الحاويات من الصور التي تم إنشاؤها خصيصًا للتوزيعات التي لا تحتوي على نواة Linux. لذلك ، قبل تشغيل الحاوية ، يجب نشرها من هذه الصورة. مصدر الصور هو مستودع محلي يتم تحميل الصور فيه من مستودعات خارجية.

مستودعات الصور البعيدة ^

بشكل افتراضي ، يتم تكوين LXD لتلقي الصور من ثلاثة مصادر بعيدة:

  • أوبونتو: (لصور Ubuntu المستقرة)
  • أوبونتو يوميا: (لصور Ubuntu اليومية)
  • الصور: (لمجموعة من التوزيعات الأخرى)

lxc remote list

+-----------------+------------------------------------------+--------+--------+
|      NAME       |                   URL                    | PUBLIC | STATIC |
+-----------------+------------------------------------------+--------+--------+
| images          | https://images.linuxcontainers.org       | YES    | NO     |
+-----------------+------------------------------------------+--------+--------+
| local (default) | unix://                                  | NO     | YES    |
+-----------------+------------------------------------------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | YES    | YES    |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily    | YES    | YES    |
+-----------------+------------------------------------------+--------+--------+

على سبيل المثال ، المستودع ubuntu: بالصور التالية:

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

+----------------------------------------------+--------------+----------+------------+
|                   DESCRIPTION                | ARCHITECTURE |   SIZE   |   TYPE     |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150728)  | x86_64       | 153.72MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150819)  | x86_64       | 152.91MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150906)  | x86_64       | 154.69MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150930)  | x86_64       | 153.86MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+

لعرض عدد محدود من الأعمدة ، استخدمنا الخيار -c مع المعلمات dasut، وكذلك تحديد طول القائمة بالأمر head.

التصفية متاحة لعرض قائمة من الصور. سيسرد الأمر التالي جميع بنى التوزيع المتاحة ألبين لينكس:

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 info
عرض معلومات مفيدة حول الصور

صورة 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 ما هي القيم التي يتم تمريرها репозиторий:образ ثم المعرف المطلوب للحاوية. يمكن تحديد المستودع كمستودع محلي local: وكذلك أي عالمية. إذا لم يتم تحديد المستودع ، فسيتم استخدام المستودع المحلي افتراضيًا للبحث عن الصورة. إذا تم تحديد الصورة من المستودع العام ، فسيتم أولاً تحميل الصورة إلى المستودع المحلي ثم استخدامها لإنشاء الحاوية.

لنقم بتشغيل الأمر التالي لإنشاء أول حاوية لدينا:

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

دعنا نحلل بالترتيب مفاتيح الأوامر التي نستخدمها هنا:

  • alpine3 - تم تحديد الاسم المستعار (الاسم المستعار) للصورة التي تم تحميلها مسبقًا إلى المستودع المحلي. إذا لم يتم إنشاء الاسم المستعار لهذه الصورة ، فيمكنك دائمًا الرجوع إلى الصورة من خلال البصمة الذي يتم عرضه في الجدول.
  • alp - تم تعيين معرف الحاوية
  • --storage - يشير هذا المفتاح إلى أي تجمع التخزين سيتم إنشاء الحاوية
  • --profile - تتالي هذه المفاتيح التكوين من ملفات تعريف التكوين التي تم إنشاؤها مسبقًا إلى الحاوية

نبدأ الحاوية ، التي تبدأ في تشغيل نظام init للتوزيع:

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 الذي ينفذ الأوامر في حاوية دون بدء قذيفة النظام. إذا كنت بحاجة إلى تنفيذ أمر في shell ، باستخدام أنماط shell مثل المتغيرات ، وإعادة توجيه الملفات (الأنبوب) ، وما إلى ذلك ، فيجب عليك بدء تشغيل shell بشكل صريح وتمرير الأمر كمفتاح ، على سبيل المثال:

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

تم استخدام حرف الهروب في الأمر لطابع خاص $ متغير $HOME لم يتم تفسيره على الجهاز المضيف ، ولكن تم تفسيره داخل الحاوية فقط.

من الممكن أيضًا بدء وضع shell التفاعلي ، ثم إنهاء الجلسة بتنفيذ مفتاح الاختصار CTRL+D:

lxc exec alp -- /bin/sh

إدارة موارد الحاويات ^

في LXD ، يمكنك إدارة موارد الحاوية باستخدام مجموعة تكوين خاصة. يمكن العثور على قائمة كاملة بمعلمات تكوين الحاوية في التوثيق.

حد موارد ذاكرة الوصول العشوائي (RAM) ^

المعلمة limits.memory يحد من مقدار ذاكرة الوصول العشوائي المتاحة للحاوية. القيمة هي رقم وواحد من اللاحقات المتاحة.

دعنا نضع حدًا للحاوية على مقدار ذاكرة الوصول العشوائي التي تساوي 256 ميجابايت:

lxc config set alp limits.memory 256MB

هناك أيضًا خيارات أخرى للحد من الذاكرة:

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

فريق lxc config show يسمح لك بعرض التكوين الكامل للحاوية ، بما في ذلك حد الموارد المطبق الذي تم تعيينه:

lxc config show alp

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine 3.11 amd64 (20200220_13:00)
  image.os: Alpine
  image.release: "3.11"
  image.serial: "20200220_13:00"
  image.type: squashfs
  limits.memory: 256MB
  volatile.base_image: 73a3093d4a5ce0148fd84b95369b3fbecd19a537ddfd2e2d20caa2eef0e8fd60
  volatile.eth0.host_name: veth75b6df07
  volatile.eth0.hwaddr: 00:16:3e:a1:e7:46
  volatile.idmap.base: "0"
  volatile.idmap.current: '[]'
  volatile.idmap.next: '[]'
  volatile.last_state.idmap: '[]'
  volatile.last_state.power: RUNNING
devices: {}
ephemeral: false
profiles:
- default
stateful: false
description: ""

حد موارد وحدة المعالجة المركزية (CPU) ^

للحد من موارد وحدة المعالجة المركزية ، هناك العديد أنواع القيود:

  • limit.cpu - ربط الحاوية بواحد أو أكثر من مراكز وحدة المعالجة المركزية
  • limits.cpu.allowance - يدير إما حصص جدولة CFS عند انقضاء المهلة الزمنية ، أو آلية مشاركة موارد وحدة المعالجة المركزية العامة عند مرور النسبة المئوية
  • limits.cpu.priority - أولوية المجدول عندما يتم تخصيص نفس النسبة المئوية للمعالجات لمثيلات متعددة تشترك في مجموعة من المعالجات

lxc config set alp limits.cpu.allowance 40%

lxc config show alp

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine 3.11 amd64 (20200220_13:00)
  image.os: Alpine
  image.release: "3.11"
  image.serial: "20200220_13:00"
  image.type: squashfs
  limits.cpu.allowance: 40%
  limits.memory: 256MB
  volatile.base_image: 73a3093d4a5ce0148fd84b95369b3fbecd19a537ddfd2e2d20caa2eef0e8fd60
  volatile.eth0.host_name: veth75b6df07
  volatile.eth0.hwaddr: 00:16:3e:a1:e7:46
  volatile.idmap.base: "0"
  volatile.idmap.current: '[]'
  volatile.idmap.next: '[]'
  volatile.last_state.idmap: '[]'
  volatile.last_state.power: RUNNING
devices: {}
ephemeral: false
profiles:
- default
stateful: false
description: ""

حد مساحة القرص ^

بالإضافة إلى قيود مثل limits.read, limits.write يمكننا أيضًا تحديد مقدار مساحة القرص التي تستهلكها الحاوية (تعمل فقط مع ZFS أو BTRFS):

lxc config device set alp root size=2GB

بعد التثبيت ، في المعلمة devices.root.size يمكننا التحقق من تعيين القيد:

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

لعرض حصص القرص قيد الاستخدام ، يمكننا الحصول عليها من الأمر lxc info:

lxc info alp
...
Resources:
  Processes: 5
  Disk usage:
    root: 1.05GB
  CPU usage:
    CPU usage (in seconds): 1
  Memory usage:
    Memory (current): 5.46MB
  Network usage:
    eth0:
      Bytes received: 802B
      Bytes sent: 1.59kB
      Packets received: 4
      Packets sent: 14
    lo:
      Bytes received: 0B
      Bytes sent: 0B
      Packets received: 0
      Packets sent: 0

على الرغم من أننا قمنا بتعيين حد جهاز جذر الحاوية على 2 جيجابايت ، إلا أن أدوات النظام مثل df لن ترى هذا القيد. للقيام بذلك ، سنجري اختبارًا صغيرًا ونكتشف كيف يعمل.

لنقم بإنشاء حاويتين متطابقتين جديدتين في نفس الوقت تجمع التخزين (HDD):

lxc init alpine3 alp1 --storage=hddpool --profile=default --profile=hddroot
lxc init alpine3 alp2 --storage=hddpool --profile=default --profile=hddroot

lxc list
+------+---------+------------------+------+-----------+-----------+
| NAME |  STATE  |       IPV4       | IPV6 |   TYPE    | SNAPSHOTS |
+------+---------+------------------+------+-----------+-----------+
| alp1 | RUNNING | 10.0.5.46 (eth0) |      | CONTAINER | 0         |
+------+---------+------------------+------+-----------+-----------+
| alp2 | RUNNING | 10.0.5.30 (eth0) |      | CONTAINER | 0         |
+------+---------+------------------+------+-----------+-----------+

لنقم بإنشاء ملف 1 جيجا بايت في إحدى الحاويات:

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

تأكد من إنشاء الملف:

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

إذا نظرنا في الحاوية الثانية ، تحقق من وجود ملف في نفس الموقع ، فلن يكون هذا الملف موجودًا ، وهو أمر متوقع ، نظرًا لأن الحاويات يتم إنشاؤها بمفردها حجم التخزين في نفس تجمع التخزين:

lxc exec alp2 -- ls -lh
total 0

لكن دعنا نقارن القيم التي ينتجها df على إحدى الحاويات والأخرى:

lxc exec alp1 -- df -hT
Filesystem           Type            Size      Used Available Use% Mounted on
/dev/loop1           btrfs           9.3G   1016.4M      7.8G  11% /
...

lxc exec alp2 -- df -hT
Filesystem           Type            Size      Used Available Use% Mounted on
/dev/loop1           btrfs           9.3G   1016.4M      7.8G  11% /
...

الجهاز /dev/loop1 شنت كقسم الجذر تجمع التخزين التي تستخدمها هذه الحاويات ، لذا فهم يتشاركون حجمها بين اثنين.

إحصاءات استهلاك الموارد ^

يمكنك عرض إحصائيات استهلاك الموارد لحاوية باستخدام الأمر:

lxc info alp

Name: alp
Location: none
Remote: unix://
Architecture: x86_64
Created: 2020/04/08 18:05 UTC
Status: Running
Type: container
Profiles: default, hddroot
Pid: 19219
Ips:
  eth0: inet    10.0.5.5        veth2a1dc59d
  eth0: inet6   fe80::216:3eff:fe0e:e271        veth2a1dc59d
  lo:   inet    127.0.0.1
  lo:   inet6   ::1
Resources:
  Processes: 5
  Disk usage:
    root: 495.62kB
  CPU usage:
    CPU usage (in seconds): 1
  Memory usage:
    Memory (current): 4.79MB
  Network usage:
    eth0:
      Bytes received: 730B
      Bytes sent: 1.59kB
      Packets received: 3
      Packets sent: 14
    lo:
      Bytes received: 0B
      Bytes sent: 0B
      Packets received: 0
      Packets sent: 0

العمل مع اللقطات ^

تتمتع 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 ، هناك نوع آخر من اللقطة - ذو الحالة ، والذي يحفظ الحالة الحالية لجميع العمليات في الحاوية. هناك عدد من الميزات الشيقة والمفيدة المرتبطة باللقطات ذات الحالة.

ماذا بعد؟ ^

  • وحدة متاحة لمطوري بايثون بيلكسد الذي يوفر API لـ LXD

تحديث 10.04.2020/15/00 XNUMX:XNUMX: تمت إضافة التنقل

المصدر: www.habr.com

إضافة تعليق