كيفية تقييد الموارد التي يمكن استخدامها من حاوية LXD

في مقال سابق ، عرضنا مقدمة تفصيلية عن حاوية LXD وكيفية البدء ، في حال لم تكن معتادًا على النظام الأساسي.

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

كيفية تقييد الموارد التي يمكن استخدامها من حاوية LXD - لينكس

متى تكون الحدود على حاويات LXD مفيدة

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

في سيناريو مشابه ، يمكنك بسهولة بيع خطط خدمة مختلفة. يمكن لأحد العملاء الدفع مقابل حجم الموارد X ، والآخر يمكنه الدفع مقابل الحجم Y. ويمكنك بسهولة ضبط هذا باستخدام بعض الأوامر البسيطة.

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

لديك حاويتان تستخدم كل منهما 100٪ من وحدة المعالجة المركزية المتاحة. ومع ذلك ، تريد لواحدة  أن تقوم بإنهاء المهمة بشكل أسرع من الأخرى. على سبيل المثال ، قد يعرض المرء مقطع فيديو لمشروع تحتاجه غدًا. يمكنك تعيين 90٪ من وقت وحدة المعالجة المركزية إلى الأولى و 10٪ إلى الثانية.

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

كيفية تعيين حدود الموارد على حاويات LXD

سيحتاج التحكم في الموارد المتعلقة بعمليات القرص إلى تثبيت ZFS. إذا تابعت البرنامج التعليمي هنا ، فلقد تم تثبيته بالفعل. خلاف ذلك ، قم بتثبيت الأدوات المساعدة لـ ZFS كما هو موضح في البرنامج التعليمي ثم أعد تشغيل الأمر أدناه. اختر ZFS عند سؤالك عن خلفية التخزين المراد استخدامها.

sudo lxd init

الحد من استخدام الذاكرة

في الأوامر أدناه ، استبدل “container_name” بالاسم الفعلي للحاوية الخاصة بك. وضع حد بسيط للذاكرة مثل الإدخال التالي:

lxc config set container_name limits.memory 100MB

اكتب “GB” بدلاً من “MB” إذا كنت تريد استخدام غيغا بايت بدلاً من ميغابايت.

الحد من استخدام وحدة المعالجة المركزية

عندما تريد تحديد عدد نوى وحدة المعالجة المركزية التي يمكن أن تستخدمها الحاوية ، اكتب:

lxc config set container_name limits.cpu 2

لتحديد نوى وحدة المعالجة المركزية محددة ، استخدم:

lxc config set container_name limits.cpu 0-0

هذا سيجعل الحاوية فقط تقوم باستخدام وحدة المعالجة المركزية الأولى. لاستخدام الثانية ، يمكنك كتابة 1-1. لاستخدام جميع النوى في وحدة المعالجة المركزية من الأول إلى الثالث ، يمكنك كتابة 0-3.

وهناك نوع آخر من التقييد وهو مقدار وقت وحدة المعالجة المركزية التي يمكن أن تستخدمه الحاوية.

lxc config set container_name limits.cpu.allowance 10ms/100ms

هذا من شأنه أن يسمح للحاوية فقط باستخدام عشرة مللي ثانية من وقت وحدة المعالجة المركزية من بين كل 100 مللي ثانية ، أي حوالي 10٪ من وحدة المعالجة المركزية الواحدة.

الحد من استخدام القرص

للحد من الموارد المتعلقة بالقرص ، يجب عليك أولاً إضافة root disk device إلى الحاوية الخاصة بك. إنه موجود بالفعل بشكل افتراضي ، مستخلص من ملف تعريف LXD الافتراضي. لكن لا يمكنك تغيير إعداداته على أساس كل حاوية حتى تقوم بذلك.

lxc config device add container_name root disk pool=default path=/

إذا قمت بتسمية pool الخاص بك بشكل مختلف ، استبدل كلمة “default” باسم تجميع التخزين الخاص بك. إذا نسيت اسمه ، فيمكنك عرضه مع:

lxc storage list

للحد من مساحة القرص التي يمكن لمثيل LXD استخدامها:

lxc config device set container_name root size 7GB

لسوء الحظ ، لا تعمل حدود الإدخال / الإخراج (القراءة / الكتابة “السرعات” و IOPS) في الوقت الحالي.

الحد من استخدام الشبكة

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

lxc network list

استبدل “lxdbr0” إذا لزم الأمر (إذا تم تسمية الجسر بشكل مختلف في حالتك). إذا لم تختر نوع الشبكة كجسر (إجابة افتراضية) ، في خطوات التكوين “lxd init” قد تضطر إلى تكييف الأمر أدناه ليعكس اختيارك. على سبيل المثال ، قد تضطر إلى استبدال كلمة “nictype” أيضًا بكل ما استخدمته لشبكة LXD الخاصة بك.

lxc config device add container_name eth0 nic name=eth0 nictype=bridged parent=lxdbr0

أخيرًا ، ضع قيودًا على دخول الشبكة (تنزيل) و / أو الخروج (تحميل).

lxc config device set container_name eth0 limits.ingress 1Mbit

1 ميغابت هو واحد megabit (وليس megabyte). يحتوي byte الواحد على 8 بتات ، مما يعني أن هذا سيحد من التنزيلات إلى حوالي 1/8 = 0.125 ميغابت في الثانية ، أي ما يقرب من 120 كيلو بايت. لذلك ، إذا كنت ترغب في تنزيله بسرعة 1 ميجابايت / ثانية (ميغابايت) ، اضربه في 8 ، واضبط الحد الأقصى على 8Mbit.

من أجل الخروج ، استخدم:

lxc config device set container_name eth0 limits.egress 1Mbit

الخلاصة

يغطي هذا الخصائص الأكثر استخدامًا المتعلقة بتقييد إستخدام الموارد. ولكن هناك الكثير من المتغيرات التي يمكنك ضبطها باستخدام مجموعة أجهزة lxc config ومجموعة lxc config. يمكنك قراءة المزيد حول خصائص الحاوية القابلة للتعديل على صفحة GitHub من LXD.

زر الذهاب إلى الأعلى