مجازیسازی تو در تو با ویندوز سرور 2016
16 سال پیش که برای اولین بار یک ماشین مجازی را در ویندوز بالا آوردم این کار یک پدیده جدید و شگفت انگیز بود و بیشتر افرادی که در زمینه کامپیوتر مشغول به کار بودند وجود چنین ماشینهایی را فقط در ابعاد تست و آزمایشی پیشبینی میکردند و کسی فکر نمیکرد زمانی از این ماشینهای مجازی برای اجرای سنگینترین بارهای کاری دنیا استفاده شود. سرعت تغییرات در کمتر از دو دهه به جایی رسید که حالا این امکان فراهم شده است تا در همان ماشین مجازی یک ماشین مجازی با هایپروایزر نصب شود و در آن هایپروایزر ماشین مجازی دیگری نصب کرد! در این مطلب قصد دارم به طور مختصر و مفید به مجازیسازی تو در تو با استفاده از Hyper-V 2016 بپردازم.
مایکروسافت در ویندوز سرور 2016 از تکنولوژی مجازیسازی تو در تو یا Nested Virtualization به طور رسمی پشتیبانی کرد. در نسخه جدید Hyper-V این امکان فراهم شده است تا ماشینهای مجازی مبتنی بر Hyper-V را در یک هاست Hyper-V اجرا و راهاندازی شود. در این روش بایستی پردازشگر (64 بیتی) سرور یا کامپیوتر از قابلیت hardware-assisted virtualization و second-level address translation (SLAT) پشتیبانی کند. با استفاده از این قابلیتها ماشینهای مجازی میتوانند به منابع دسترسی مستقیم داشته باشند و دستورات را برای اجرا به پردازشگر ارسال کنند.
برای اینکه بتوان در ماشین مجازی یک هایپروایزر نصب و اجرای کرد بایستی با چند دستور PowerShell به آن ماشین مجازی دسترسی خاص به منابع سرور فیزیکی تعلق گیرد و علاوه بر آن برخی از قابلیتهایی که هم اکنون در این شرایط پشتیبانی نمیشود مانند تخصیص حافظه به صورت پویا یا Dynamic Memory assignment را بهطور موقت غیرفعال کرد.
اما کارکرد اصلی مجازیسازی تو در تو برای اجرای بارهای کاری کانتینرها است و دیگری برای توسعه نرمافزار و اجرای سناریوهای آزمایشی. از ضعفهای کانتینرها عدم وجود سیستم کنترل مرکزی برای مدیریت منابع است که با استفاده از مجازیسازی تو در تو این امکان فراهم میشود. اغلب در ابرهای عمومی سرورها به صورت ماشین مجازی به مشتریان تخصیص داده میشوند و به این خاطر اگر قصد اجرا بارهای کاری بر روی کانتینر را داشته باشید نمیتوانید کنترل ذکر شده را بر منابع اعمال کنید. با این راه حل میتوانید یک هایپروایزر را بر روی ماشین مجازی نصب کنید و در درون ماشینهای مجازی آن هایپروایزر کانتینرهای متعددی اجرا کنید و منابع را با توجه به نیاز هر دسته تخصیص دهید.
کارکرد دوم همانطور که بیان شد در زمینه راهاندازی محیطهای تست و توسعه است. اجرای سناریوهای بزرگ مجازیسازی مانند راهاندازی یک زیرساخت مجازیسازی یکپارچه شده متشکل از راهکارهای System Center که نیازمند سرورهای فیزیکی متعدد و با منابع بسیار زیاد است در این روش با اجرای تمامی بارهای کاری در یک سرور قدرتمند با استفاده از تکنولوژی مجازیسازی تو در تو قابل تحقق است. همچنین در این روش میتوان با کلاسترسازی و تقسیم بارهای کاری قابلیتهای پیشرفته محیط مجازی مانند توزیع پویای منابع و مهاجرت ماشینهای مجازی را به طور واقعی عملیاتی کرد.