वर्चुअलाइज़ेशन

Nested virtualisation क्या है?

परिभाषा

Nested virtualisation lets a virtual machine itself run virtual machines, by exposing the processor virtualisation extensions to the guest. It is required for Proxmox VE, VM-based CI jobs and some Docker configurations. Many providers disable it, which is the usual reason those workloads fail elsewhere.

Nested virtualisation क्यों मायने रखता है

यह Proxmox VE, VM-आधारित CI जॉब्स और कुछ Docker कॉन्फ़िगरेशन के लिए आवश्यक है। कई प्रदाता इसे अक्षम कर देते हैं, जो आमतौर पर अन्यत्र उन वर्कलोड के विफल होने का कारण है।

व्यवहार में Nested virtualisation

जब आप नेस्टेड वर्चुअलाइज़ेशन चलाते हैं, तो आप KVM गेस्ट के अंदर एक हाइपरवाइज़र बूट करते हैं और होस्ट CPU के वर्चुअलाइज़ेशन एक्सटेंशन पास करते हैं। आप गेस्ट में /proc/cpuinfo में svm या vmx फ्लैग जांचेंगे। यदि वे अनुपस्थित हैं, तो आपका आंतरिक हाइपरवाइज़र सॉफ़्टवेयर एमुलेशन पर वापस आ जाता है, जो प्रदर्शन को परिमाण के क्रम से काट सकता है। आपको वे फ्लैग पाने के लिए जेनेरिक मॉडल के बजाय 'host' CPU प्रकार सक्षम करने की भी आवश्यकता हो सकती है। इसे गलत करें और आपका Proxmox या CI वर्कलोड रेंगता है।

लोग Nested virtualisation के बारे में क्या गलत समझते हैं

लोग मानते हैं कि नेस्टेड वर्चुअलाइज़ेशन केवल VM में Windows जैसे पूर्ण OS चलाने के लिए मायने रखता है। सुधार: यह Docker के डिफ़ॉल्ट ओवरले नेटवर्किंग और कुछ कर्नेल मॉड्यूल को भी तोड़ता है, क्योंकि वे गेस्ट के अंदर वर्चुअलाइज़ेशन सुविधाओं पर निर्भर करते हैं। इसलिए एक कंटेनर वर्कलोड ऐसे प्रदाता पर विफल हो सकता है जो नेस्टिंग अक्षम करता है, भले ही आपने कभी VM चलाने का इरादा न किया हो।

Nested virtualisation — सामान्य प्रश्न

क्या मैं नेस्टेड VM के अंदर Docker चला सकता हूँ?

हाँ, और यह सबसे आम कारण है जिसके लिए लोगों को नेस्टेड वर्चुअलाइज़ेशन की आवश्यकता होती है। Docker की डिफ़ॉल्ट ब्रिज नेटवर्किंग iptables और कर्नेल मॉड्यूल का उपयोग करती है जो CPU वर्चुअलाइज़ेशन एक्सटेंशन उजागर किए बिना अलग व्यवहार कर सकते हैं। हमारी KVM योजनाओं में नेस्टेड वर्चुअलाइज़ेशन शामिल है, इसलिए आपके Docker कंटेनर अपेक्षित रूप से चलते हैं।

मैं कैसे जांचूं कि नेस्टेड वर्चुअलाइज़ेशन सक्षम है या नहीं?

अपने VM के अंदर, grep -E '(svm|vmx)' /proc/cpuinfo चलाएं। यदि आप फ्लैग देखते हैं, तो नेस्टिंग उपलब्ध है। यदि नहीं, तो हाइपरवाइज़र उन्हें उजागर नहीं कर रहा है, जिसका आमतौर पर मतलब है कि प्रदाता ने इसे अक्षम कर दिया है।

Nested virtualisation कहाँ चर्चा में आता है

वर्चुअलाइज़ेशन से अधिक

KVM
KVM लिनक्स कर्नेल में निर्मित पूर्ण हार्डवेयर वर्चुअलाइज़ेशन है, जो प्रत्येक अतिथि को अपना कर्नेल और अन्य टेनेंट से हार्डवेयर-प्रवर्तित अलगाव देता है।
OpenVZ
OpenVZ कंटेनर-आधारित वर्चुअलाइज़ेशन है जिसमें प्रत्येक इंस्टेंस होस्ट कर्नेल साझा करता है, इसलिए अतिथि कर्नेल मॉड्यूल लोड नहीं कर सकते हैं या एक अलग ऑपरेटिंग सिस्टम नहीं चला सकते हैं।
LXC
LXC लिनक्स-नेटिव कंटेनरीकरण है जो नेमस्पेस और cgroups के साथ प्रक्रियाओं को अलग करता है जबकि होस्ट कर्नेल साझा करता है।
हाइपरवाइज़र
हाइपरवाइज़र सॉफ़्टवेयर परत है जो वर्चुअल मशीन बनाता है और चलाता है, उनके बीच भौतिक CPU, मेमोरी और IO आवंटित करता है।
vCPU
वीपीयू एक वर्चुअल प्रोसेसर है जो गेस्ट को प्रस्तुत होता है, जो भौतिक कोर या थ्रेड पर शेड्यूलिंग समय द्वारा समर्थित होता है।
cloud-init
cloud-init पहले बूट पर वर्चुअल मशीन को कॉन्फ़िगर करने का मानक तंत्र है, जो प्लेटफ़ॉर्म द्वारा प्रदान किए गए मेटाडेटा का उपयोग करता है।