یکی از رابطهای برنامهنویسی برای مدیریت ماشینهای مجازی Libvirt است. در واقع Libvirt مجموعهای از API (Application Programming Interface) است که بین هایپروایزر (hypervisor) و کاربر قرار میگیرد و از طریق آن میتوانید عملکرد هایپروایزر را مدیریت کنید. Libvirt یکی از محبوبترین ابزارهای مدیریت مجازیسازی است بنابراین اگر با ماشینهای مجازی سروکار دارید خواندن این مطلب را از دست ندهید. زیرا در این مطلب بهطور کامل به سوالات مهمی از قبیل Libvirt چیست؟ چه مزایایی دارد؟ و چگونه نصب میشود؟ پاسخ دادهایم.
⏲ مدت زمان تخمینی مطالعه: 9 دقیقه
فهرست موضوعات
Libvirt چیست؟
“libvirt” یک API منبع باز، daemon (برنامهای در یونیکس (unix) که همیشه در پشت زمینه اجرا میشود) و ابزار خط فرمان (virsh) است که برای پلتفرم مجازیسازی و stack استفاده میشود. در واقع هدف اصلی libvirt ارائه یک راهحل برای مدیریت چندین ارائهدهنده و هایپروایزر مجازیسازی مختلف از KVM، Xen، VMware ESXi گرفته تا QEMU و حتی BHyve است. این APIها بهطور گسترده در لایه تنظیم هایپروایزرها در توسعه یک راهحل مبتنی بر فضای ابری نیز استفاده میشوند.
توجه داشته باشید بهدلیل اینکه libvirt طیف وسیعی از فناوریهای مجازیسازی را پشتیبانی میکند باید با همهی آنها آشنایی داشته باشید، میتوانید تنها در یک فناوری مانند KVM از آن استفاده کنید.
با این حال، libvirt قادر است خدمات شبکهای را برای ماشینهای مجازی که مدیریت آنها را برعهده دارد، ارائه دهد. بهطور خاص، libvirt را میتوان به گونه ای پیکربندی کرد که عملکرد شبکهای مشابه نسخه ساده شده و تک گره (node) OpenStack را ارائه دهد. کاربران میتوانند از libvirt برای ایجاد شبکههای لایه 2 که شبیه شبکههای OpenStack Networking هستند و محدود به یک گره هستند نیز استفاده کنند.
فروش سوئیچ سیسکو 3750 , فروش سوئیچ سیسکو 3850 , فروش سوئیچ سیسکو 2960
Libvirt چگونه کار می کند؟
Libvirt برای کار با هر هایپروایزر طراحی شده و در طول سالها رشد کرده است بنابراین میتواند با طیف گستردهای از هایپروایزرها کار کند. daemon مخصوص libvirt دارای یک API است که قابلیت استفاده از برنامههایی مانند virt-manager یا virsh (و حتی اسکریپتهای پایتون سفارشی) را امکانپذیر میکند. بنابراین کاربر میتواند درخواستهای مختلف مانند ایجاد یک مهمان در KVM، یا نشان دادن حافظه مورد استفاده توسط یک کانتینر LX خاص و غیره را با آن انجام دهد. پس از ارسال درخواست daemon درخواست را به درایور Hypervisor مناسب ارسال میکند. این درایور تمام مشخصات یک فناوری مجازیسازی را شناسایی و پیادهسازی میکند و سپس دستورالعملها را براساس آن اجرا میکند.
زمانیکه سرویس libvirt روی سرور اجرا میشود، وظایف مدیریتی را برای مهمانان مجازی مانند شروع، توقف و انتقال مهمانها بین سرورهای میزبان، کتابخانهها و ابزارهای سرویس گیرنده libvirt منتقل میکند. برای صدور این وظایف اطلاعات براساس منابع سیستم میزبان و مهمان پیکربندی و به libvirtd متصل میشود. پیکربندی هر ماشین مجازی در یک فایل XML ذخیره میشود. که تنظیمات آن به روشهای زیر مدیریت میشود:
- استفاده از Virtual Machine Manager به دلیل رابط گرافیکی
- استفاده از virsh بهدلیل داشتن گزینه های پیکربندی در خط فرمان
- پیکربندی فایل VM Guest بهصورت دستی و وارد کردن آن در ماشین مجازی
نمایندگی فروش محصولات سیسکو
مزایای استفاده از Libvirt
Libvirt روشی مناسب برای مدیریت ماشینهای مجازی و سایر قابلیتهای مجازیسازی مانند مدیریت ذخیرهسازی و رابط شبکه است. دیگر ویژگیهای اصلی آن عبارتند از:
- مدیریت VM: عملیات چرخهی حیات دامنه مختلف مانند شروع، توقف، ذخیره، بازیابی، انتقال و … همچنین انجام عملیات Hotplug برای بسیاری از دستگاهها مانند رابطهای دیسک، شبکه حافظه و CPU
- پشتیبانی ماشین از راه دور: همه عملکردهای libvirt در هر ماشینی که daemon libvirt را اجرا میکند، از راه دور قابل دسترسی است. همچنین انواع انتقال شبکه برای اتصال از راه دور مانند SSH پشتیبانی میشود و نیازی به پیکربندی اضافی ندارد.
- مدیریت ذخیرهسازی: هر میزبانی که libvirt daemon را اجرا میکند قابلیت ذخیرهسازی، ایجاد تصاویر فایل با فرمتهای مختلف (qcow2، vmdk، raw، …)، نصب اشتراکهای NFS، شمارش حجم LVM ایجاد LVM جدید، پارتیشینبندی اشتراکهای iSCSI و … را دارد.
- مدیریت رابط شبکه: هر میزبانی که daemon libvirt را اجرا می کند می تواند برای مدیریت رابط های فیزیکی و منطقی شبکه نیز استفاده شود. همچنین رابطها، پلها، vlanها و دستگاههای پیوند را پیکربندی کنید (و ایجاد کنید).
- ساخت NAT مجازی و شبکه مبتنی بر مسیر: شبکههای مجازی Libvirt از قوانین فایروال برای عمل بهعنوان روتر استفاده میکنند و دسترسی شفاف ماشینهای مجازی به شبکه ماشینهای میزبان را فراهم میکنند.
خرید سرور hp
نصب Libvirt
Libvirt قابلیت نصب بری روی لینوکس، FreeBSD، ویندوز و macOS را دارد. با اینحال بهدلیل معماری دیمون/کلاینت، libvirt فقط باید روی دستگاهی نصب شود که میزبان سیستم مجازی است. توجه داشته باشید که سرور و کلاینت میتوانند یک ماشین فیزیکی نیز باشند.
به طور پیشفرض، عملکرد شبکه libvirt فعال است و libvirt شبکهای را هنگام بوت شدن سیستم ایجاد میکند. بهطورمعمول libvirt یک شبکه با نام پیشفرض default ایجاد میکند. جزئیات این شبکه براساس توزیع متفاوت است. در ابونتو این شبکه شامل موارد زیر است:
– یک پل لینوکس به نام virbr0 با آدرس 192.0.2.1/24
– یک فرآیند dnsmasq که براساس رابط virbr0 و آدرسهای IP در محدوده 192.0.2.2-192.0.2.254
هنگامی که libvirt یک ماشین مجازی را بوت میکند، VIF دستگاه را در پل virbr0 قرار میدهد، مگر اینکه به آن اعلام کرده باشید، این کار را انجام ندهد. در اوبونتو، مجموعه قوانین iptables که libvirt ایجاد میکند شامل قوانین زیر است:
*nat-A POSTROUTING -s 192.0.2.0/24 -d 224.0.0.0/24 -j RETURN-A POSTROUTING -s 192.0.2.0/24 -d 255.255.255.255/32 -j RETURN-A POSTROUTING -s 192.0.2.0/24 ! -d 192.0.2.0/24 -p tcp -j MASQUERADE –to-ports 1024-65535-A POSTROUTING -s 192.0.2.0/24 ! -d 192.0.2.0/24 -p udp -j MASQUERADE –to-ports 1024-65535-A POSTROUTING -s 192.0.2.0/24 ! -d 192.0.2.0/24 -j MASQUERADE*mangle-A POSTROUTING -o virbr0 -p udp -m udp –dport 68 -j CHECKSUM –checksum-fill*filter-A INPUT -i virbr0 -p udp -m udp –dport 53 -j ACCEPT-A INPUT -i virbr0 -p tcp -m tcp –dport 53 -j ACCEPT-A INPUT -i virbr0 -p udp -m udp –dport 67 -j ACCEPT-A INPUT -i virbr0 -p tcp -m tcp –dport 67 -j ACCEPT-A FORWARD -d 192.0.2.0/24 -o virbr0 -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT-A FORWARD -s 192.0.2.0/24 -i virbr0 -j ACCEPT-A FORWARD -i virbr0 -o virbr0 -j ACCEPT-A FORWARD -o virbr0 -j REJECT –reject-with icmp-port-unreachable-A FORWARD -i virbr0 -j REJECT –reject-with icmp-port-unreachable-A OUTPUT -o virbr0 -p udp -m udp –dport 68 -j ACCEPT
شکل زیر فرآیند dnsmasq را نشان میدهد که libvirt مدیریت میکند همانطور که در خروجی ps ظاهر میشود:
2881 ? S 0:00 /usr/sbin/dnsmasq –conf-file=/var/lib/libvirt/dnsmasq/default.conf
با اینحال برای اولین قدم و فعال کردن سرویس شبکه libvirt ، باید فرمان اجرایی زیر را وارد کنید:
root @ user: ~ # virsh -c qemu: /// system net-start default |
و برای ایجاد یک ماشین مجازی، از ابزار virt-install استفاده کنید:
root @ user: ~ # virt-install – connect qemu: /// system –name VM2 – hvm – ram 512 –disk path = base.qcow2, format = qcow2 –network network = default –vnc –import |
پس از این دستور یک فایل ماشین مجازی XML ایجاد میشود که در /etc/libvirt/qemu/VM1.xml قابل مشاهده است. برای بستن نصب ماشین مجازی از کلید میانبر CTRL + C استفاده کنید.
مراحل نصب libvirt
- اگر پیشتر libvirt را در دستگاه میزبان نصب نکردهاید برای انجام این کار دستورات زیر را اجرا کنید: (شکل 1)
$ sudo dnf install libvirt –y
شکل 1
- اگر قبلا virt-install را در دستگاه میزبان نصب نکردهاید، دستور زیر را برای نصب آن اجرا کنید: (شکل 2)$ sudo dnf install virt-install -y
شکل 2
غیرفعال کردن Libvirt
OpenStack برای عملکرد خود بهطورمعمول از شبکه libvirt استفاده نمیکند و فعال بودن این شبکه در فرآیندهای OpenStack تداخلی ایجاد نمیکند. با اینحال برای جلوگیری از برخی اختلالات بهویژه در هنگام اشکالزدایی مشکلات شبکه OpenStack بهتر است Libvirt را غیرفعال کنید.
از آنجایی که libvirt باعث ایجاد یک پل اضافی در فرآیند dnsmasq و مجموعه قوانین iptables میشود و مشکلاتی در این زمینه میتواند باعث درگیر شدن اپراتور در عیبیابی شود. بنابراین اگر نیاز به راهاندازی مستقیم ماشینهای مجازی با استفاده از libvirt ندارید، میتوانید با خیال راحت آن را غیرفعال کنید. برای این کار کافی است که فرمانهای دستوری زیر را انجام دهید:
برای مشاهده شبکههای libvirt تعریف شده و وضعیت آنها:
# virsh net-list
Name State Autostart Persistent
———————————————————-
default active yes yes
برای غیرفعال کردن شبکه libvirt با نام پیشفرض یا default :
# virsh net-destroy default
غیرفعال کردن شبکه باعث حذف پل virbr0، خاتمه فرآیند dnsmasq و حذف قوانین iptables میشود.
برای جلوگیری از شروع خودکار شبکه در هنگام بوت:
# virsh net-autostart –network default –disable
برای فعال کردن شبکه پس از غیرفعال شدن:
# virsh net-start default