पिछले लेख में, यदि आप प्लेटफ़ॉर्म से अपरिचित हैं, तो आप यह पता लगा सकते हैं कि LXD क्या है और इसके साथ कैसे शुरुआत करें।
ज्यादातर मामलों में, आप एक बड़े पूरे को छोटे घटकों में विभाजित करने के लिए एक ही सिस्टम पर कई कंटेनरों का उपयोग करेंगे। प्रत्येक घटक द्वारा उपयोग किए जा सकने वाले संसाधनों की मात्रा को सीमित करना समझ में आता है। लेकिन क्यों? जाहिर है, कारणों की संख्या उतनी ही असीमित है जितनी परिदृश्यों के लिए आप कंटेनरों का उपयोग कर सकते हैं।
जब LXD कंटेनरों पर सीमाएं उपयोगी हो सकती हैं
- एक सेवा प्रदान करना और प्रत्येक ग्राहक को एक एलएक्सडी उदाहरण देना। उदाहरण के लिए, यह एक बड़ा सर्वर हो सकता है, और आप प्रत्येक ग्राहक वेबसाइट को एक अलग कंटेनर में होस्ट करते हैं। यदि किसी वेबसाइट पर अचानक से ट्रैफ़िक आ जाता है, तो यह अन्य उदाहरणों को धीमा कर सकता है। सीमाओं के साथ, केवल एक कंटेनर धीमा हो जाएगा, और बाकी सामान्य रूप से काम करेगा।
- इसी तरह के परिदृश्य में, आप विभिन्न सेवा योजनाओं को आसानी से बेच सकते हैं। एक ग्राहक X राशि के संसाधनों का भुगतान कर सकता है, और दूसरा Y राशि के लिए भुगतान कर सकता है। और आप इसे कुछ सरल आदेशों के साथ आसानी से समायोजित कर सकते हैं।
- आप डेनियल ऑफ सर्विस हमलों के सरल रूपों से अपनी रक्षा कर सकते हैं। जब एक कंटेनर पर बमबारी की जाती है, तो वह अपनी संसाधन उपयोग सीमा तक पहुंच जाएगा। अन्य कंटेनर प्रभावित नहीं होंगे।
- आपके पास दो कंटेनर हैं जो प्रत्येक उपलब्ध CPU समय का 100% उपयोग करेंगे। हालाँकि, आप चाहते हैं कि एक काम दूसरे की तुलना में तेज़ी से पूरा करे। उदाहरण के लिए, कोई उस प्रोजेक्ट के लिए वीडियो प्रस्तुत कर सकता है जिसकी आपको कल आवश्यकता होगी। आप CPU समय का 90% पहले और 10% दूसरे को असाइन कर सकते हैं।
बेशक, आपके अपने कारण हो सकते हैं। और यदि आप पूरे सिस्टम पर केवल एक कंटेनर का उपयोग कर रहे हैं, तो आपको इसकी आवश्यकता भी नहीं हो सकती है। लेकिन अगर आप कई कंटेनरों का उपयोग कर रहे हैं, तो आपको लगभग हमेशा कुछ प्रकार की सीमाएँ निर्धारित करने की आवश्यकता होती है। क्योंकि, एक एलएक्सडी इंस्टेंस में एक हमला, एक बग, या किसी अन्य प्रकार का दुर्व्यवहार पूरे सिस्टम को प्रभावित कर सकता है और इसे धीमा कर सकता है। आपके पास जितने अधिक कंटेनर होंगे, ऐसे परिदृश्य की संभावना उतनी ही अधिक बढ़ेगी।
LXD कंटेनरों पर संसाधन सीमाएं कैसे सेट करें
डिस्क संचालन से संबंधित संसाधन नियंत्रण को स्थापित करने के लिए ZFS की आवश्यकता होगी। यदि आपने यहां ट्यूटोरियल का अनुसरण किया है, तो यह पहले से ही स्थापित है। अन्यथा, ट्यूटोरियल में निर्देशानुसार ZFS उपयोगिताओं को स्थापित करें और फिर नीचे दिए गए कमांड को फिर से चलाएँ। यह पूछे जाने पर कि किस स्टोरेज बैकएंड का उपयोग करना है, ZFS चुनें।
sudo lxd init
मेमोरी उपयोग सीमित करें
नीचे दिए गए आदेशों में, “container_name” को अपने कंटेनर के वास्तविक नाम से बदलें। मेमोरी लिमिट सेट करना उतना ही आसान है जितना कि एंटर करना:
lxc config set container_name limits.memory 100MB
यदि आप मेगाबाइट के बजाय गीगाबाइट का उपयोग करना चाहते हैं तो "एमबी" के बजाय "जीबी" टाइप करें।
CPU उपयोग सीमित करें
जब आप यह सीमित करना चाहते हैं कि एक कंटेनर कितने CPU कोर का उपयोग कर सकता है, तो टाइप करें:
lxc config set container_name limits.cpu 2
विशिष्ट CPU कोर को "पिन" करने के लिए, उपयोग करें:
lxc config set container_name limits.cpu 0-0
इससे कंटेनर केवल पहले CPU का उपयोग करेगा। दूसरे का उपयोग करने के लिए, आप 1-1 टाइप करेंगे। पहले से तीसरे तक सभी CPU कोर का उपयोग करने के लिए, आपको 0-3 टाइप करना होगा।
एक अन्य प्रकार की सीमा यह है कि एक कंटेनर कितने CPU समय का उपयोग कर सकता है।
lxc config set container_name limits.cpu.allowance 10ms/100ms
यह कंटेनर को प्रत्येक 100 मिलीसेकंड में से केवल दस मिलीसेकंड CPU समय का उपयोग करने देगा, इसलिए एक CPU कोर का लगभग 10%।
डिस्क के उपयोग को सीमित करें
डिस्क से संबंधित संसाधनों को सीमित करने के लिए, आपको पहले अपने कंटेनर में रूट डिस्क डिवाइस जोड़ना होगा। यह डिफ़ॉल्ट रूप से पहले से मौजूद है, डिफ़ॉल्ट LXD प्रोफ़ाइल से इनहेरिट किया गया है। लेकिन आप प्रति कंटेनर के आधार पर इसकी सेटिंग तब तक नहीं बदल सकते जब तक आप ऐसा नहीं करते।
lxc config device add container_name root disk pool=default path=/
यदि आपने अपने पूल को अलग नाम दिया है, तो "डिफ़ॉल्ट" को अपने स्टोरेज पूल के नाम से बदलें। यदि आप इसका नाम भूल गए हैं, तो आप इसे निम्न के साथ प्रदर्शित कर सकते हैं:
lxc storage list
डिस्क स्थान को सीमित करने के लिए एक LXD उदाहरण उपयोग कर सकता है:
lxc config device set container_name root size 7GB
दुर्भाग्य से, I/O सीमाएं ("गति" और 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
1Mbit एक मेगाबिट (मेगाबाइट नहीं) है। एक बाइट में 8 बिट होते हैं, जिसका अर्थ है कि यह डाउनलोड को लगभग 1/8 =0.125Mbits प्रति सेकंड, लगभग 120 किलोबाइट तक सीमित कर देगा। इसलिए, यदि आप इसे 1MB/s (मेगाबाइट) के साथ डाउनलोड करना चाहते हैं, तो 8 से गुणा करें, और प्रवेश सीमा को 8Mbit पर सेट करें।
बाहर निकलने के लिए, उपयोग करें:
lxc config device set container_name eth0 limits.egress 1Mbit
निष्कर्ष
इसमें संसाधन सीमाओं से संबंधित सबसे अधिक उपयोग की जाने वाली संपत्तियां शामिल हैं। लेकिन और भी बहुत से वेरिएबल हैं जिन्हें आप lxc config device set
के साथ सेट कर सकते हैं और lxc config set
. आप LXD के GitHub पेज पर इन समायोज्य कंटेनर गुणों के बारे में अधिक पढ़ सकते हैं।