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