يشير مصطلح الحوسبة الافتراضيّة (التخيّليّة أو الوهميّة) Virtualization إلى إمكانيّة استخدام أنظمة تشغيل مستقلّة ومنفصلة في وقت واحد على نفس العتاد Hardware. يُعرَف النظام الذي يشغّل العتاد الذي تعمل عليه الأنظمة الأخرى، يُعرَف بالمضيف Host؛ في ما يُعدّ كلّ من واحد الأنظمة الأخرى ضيفا Guest.
يتولّى برنامج يُعرف بالمراقِب Hypervisor توفير موارد افتراضيّة (معالج، ذاكرة عشوائيّة، واجهات شبكة وغيرها) بالاعتماد على الموارد الفعليّة (العتاد). يُطلَق عادة على نظامٍ ضيف اسمُ الآلة الافتراضية (الجهاز الافتراضي) Virtual machine.
تمكّن الحوسبة الافتراضيّة من الاقتصاد في النفقات من حيث العتاد المطلوب، البنية التحتيّة للشبكة وجهد الصيّانة؛ إضافةً إلى التقليل من المساحة المطلوب تخصيصها لإنشاء بيئة تحتية لنظام معلوماتي. يتناول هذا المقال أساسيّات الحوسبة الافتراضية في Red Hat Enterprise Linux 7 باستخدام KVM (اختصار Kernel-based Virtual Machine؛ الأجهزة الافتراضيّة المعتمدة على نواة لينكس).
التحقّق من المتطلّبات وتثبيت الحزم
يكمن الشّرط الأول لإنشاء أجهزة افتراضيّة في ضرورة دعم المعالج لتقنيّة الحوسبة الافتراضيّة. يمكن التأكد بتنفيذ الأمر التالي من ذلك:
# grep -E 'svm|vmx' /proc/cpuinfo
إن كان لديك معالج Intel يدعم الحوسبة الافتراضيّة فستظهر vmx
في النتيجة؛ أما إذا كان المعالج من نوع AMD ويدعم هذه التقنيّة فستظهر svm
في نتيجة تنفيذ الأمر. ستحتاج إلى تفعيل الحوسبة الافتراضية على محمِّل الإقلاع الأولى (BIOS أو UEFI)؛ بعد التأكد من دعم المعالج لها.
ثم ننتقل للخطوة التاليّة وهيّ تثبيت الحزم التي تجلب المراقب KVM وتجعله متاحا على النظام (المُضيف). هذه الحزم هي:
-
qemu-kvm
: توفّر إمكانيّة محاكاة العتاد من أجل إنشاء الموارد الافتراضية وجعلها تحت تصرّف النظام الضّيف. -
qemu-img
: أداة تعمل على سطر الأوامر للتعامل مع نظائر الأقراص Disk images. -
libvirt
: تتوفّر هذه الحزمة على الأدوات التي تمكّن من استغلال إمكانيّات الحوسبة الافتراضية التي يتوفّر عليها نظام التّشغيل. -
libvirt-python
: وحدة تتيح للتطبيقات المكتوبة بلغة البرمجة Python استخدامَ الأدوات التي توفّرها الحزمة السّابقة. -
libguestfs-tools
وvirt-install
: مجموعة من الأدوات تعمل على سطر الأومار لإدارة الأجهزة الافتراضية.
ملحوظة: نظائر الأقراص Images هي ملفّات تضمّ المحتوى والبنية الخاصّين بتجزئة قرص أو قرص تخزين كامل؛ مثل الأقراص الصّلبة، الأقراص الضّوئية أو مفاتيح USB. تمكّن النظائر من تكرار محتوى القرص وبنيته تماما، بغضّ النظر عن نوعية نظام الملفات المستخدم على القرص. تأخذ هذه الملفات عادة الامتداد img
او iso
.
أمر التثبيت:
# yum update && yum install qemu-kvm qemu-img libvirt libvirt-python libguestfs-tools virt-install
ننفذ الأمرين التاليّين - بعد اكتمال تثبيت الحزم - لبدء تشغيل الخدمة libvirtd
وتفعيلها مع إقلاع النظام:
# systemctl start libvirtd.service # systemctl enable libvirtd.service
لا يمكن مبدئيًّا للجهاز الافتراضي التخاطب مع الشبكة المحليّة LAN أو الإنترنت؛ ولكن يمكنه التخاطب مع الأجهزة الافتراضية الموجودة على نفس المضيف، ومع المضيف نفسه. يجب، لكي يُتاح للأجهزة الضيفة (Guests) الوصولُ إلى الشبكة المحليّة أو الإنترنت؛ إعداد إحدى واجهات الشبكة على المُضيف لتكون جسرا Bridge للأجهزة الضيفة:
-
نضيف السّطر التالي إلى ملفّ إعداد الواجهة (يوجد على الأرجح في المجلّد
etc/sysconfig/network-scripts/
ويبدأ اسمه بـifcfg
):BRIDGE=br0
حيثُ
br0
الاسم الذي اخترناه للجسر.ننشئ ملفّ إعداد للجسر
br0
باسمifcfg-br0
ضمن المجلّد etc/sysconfig/network-scripts/ ونضيف إليه المحتوى التالي؛ غيّر عنوان IP، عنوان البوّابة Gateway ومعلومات DNS بما يناسب:DEVICE=br0 TYPE=Bridge BOOTPROTO=static IPADDR=192.168.0.18 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 NM_CONTROLLED=no DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=br0 ONBOOT=yes DNS1=8.8.8.8 DNS2=8.8.4.4
ثم نفعّل إمكانيّة إعادة التوجيه في الملفّ
etc/sysctl.conf/
:net.ipv4.ip_forward = 1
لم يتبقّ لنا سوى اعتماد التعديلات بتنفيذ الأمر:
# sysctl -p
تذكّر أنه يمكنك تحديد نوعيّة البيانات المسموح بمرورها عن طريق الجدار الناري FirewallD
إنشاء الأجهزة الافتراضية
يحتفظ مراقب الأجهزة الافتراضية مبدئيا بملفات الأجهزة التي ينشئها في المجلد var/lib/libvirt/images/
؛ يُنصَح بألا يُعدَّل على آلية العمل هذه إلا إذا كانت هناك حاجة ماسة لذلك. ستحتاج - إن عدّلت مسار ملفات الأجهزة الافتراضية المبدئي - إلى التعامل مع إعدادات SELinux الخاصّة بهذه الملفات مباشرة. تأكّد من أنّ نظام الملفات لديك يحوي مساحة كافيّة لإنشاء الآلات الافتراضية التي ترغب فيها.
ينشئ الأمر التالي جهازا افتراضيًّا باسم academy-virt01
بمعالج افتراضي واحد، ذاكرة عشوائيّة تبلغ 1GB
وقرص صلب ذي مساحة تخزينية تبلغ 20GB
(يُمثَّل القرص الصّلب بالملف var/lib/libvirt/images/academy-virt01.img/
). نحدّد الملف rhel-server-7.2-x86_64-dvd.iso
الموجود على المسار home/hsoub/ISOs/
ليكون وسيط تثبيت والواجهة br0
لتكون جسرا للاتّصال:
# virt-install \ --network bridge=br0 --name academy-virt01 \ --ram=1024 \ --vcpus=1 \ --disk path=/var/lib/libvirt/images/academy-virt01.img,size=20 \ --graphics none \ --cdrom /home/hsoub/ISOs/rhel-server-7.0-x86_64-dvd.iso --extra-args="console=tty0 console=ttyS0,115200"
يمكن استخدام وسيط تثبيت موجود على خادوم HTTP بدلا من القرص المحلّي. استخدم في هذه الحالة الخيّار location--
بدلا من cdrom--
وحدّد رابط ملفّ التثبيت على الخادوم. يحدّد الخيار graphics none--
وضع التثبيت باختيار وضع نصّي (غير رسومي)؛ يمكن حذف هذا الخيّار إن كنت تستخدم واجهة رسوميّة. يمرّر الخيّار الأخير extra-args--
معطيات إقلاع النواة Kernel إلى المثبّت من أجل إعداد طرفيّة للوصول إلى الآلة الافتراضية (يشبه الأمر وصلَ شاشة بحاسوب ملموس).
ينتج عن تنفيذ الأمر السابق إنشاء جهاز افتراضي بالمواصفات المذكورة وبدء تثبيت نظام تشغيل (RHEL 7) عليه.
إدارة الأجهزة الافتراضية
في ما يلي المهامّ الأساسيّة التي تحتاج - بوصفك مدير نظام - لمعرفة كيفية أدائها. تُنفَّذ الأوامر التالية على النّظام المضيف.
-
سرد قائمة بالأجهزة الافتراضية
# virsh list --all
يظهر الأمر قائمة بالأجهزة الافتراضية المُنشأة، أسماءها وحالتها. من المهم الانتباه لمعرّف الجهاز (VM Id)، إذ ستحتاجه لتنفيذ أوامر إدارية أخرى.
-
عرض معلومات عن نظام ضيف (حيث
VM_Id
معرّف الجهاز الافتراضي):# virsh dominfo VM_Id
-
بدء تشغيل، إعادة تشغيل أو إيقاف نظامٍ ضيف:
# virsh start VM_Id # virsh reboot VM_Id # virsh shutdown VM_Id
-
الوصول إلى طرفيّة الجهاز (في حال إعداداها عند إنشاء الجهاز الافتراضي):
# virsh console VM_Id
-
تعديل حجم الذاكرة العشوائيّة المتاحة لجهاز افتراضي أو عدد معالجاته الافتراضية:
يحتاج التعديل على هذه الموارد أولا إطفاء الجهاز:
# virsh shutdown VM_Id
ننفذ الأمر التالي للتعديل على إعدادات الجهاز الافتراضي:
# virsh edit VM_Id
ثم نعدّل قيمة الذاكرة الموجودة بين الوسمين
memory
:<memory>القيمة الجديدة للذاكرة العشوائيّة</memory>
انتبه إلى أن الوحدة المستخدمة للذاكرة هي الميغابايت MB. مثلا؛ اكتب
2048
إن كنت تريد تخصيص2GB
لذاكرة الجهاز.وبالنسبة للمعالج:
<cpu>عدد المعالجات الافتراضية</cpu>
ثم نعيد تشغيل الجهاز باعتماد التغييرات الجديدة:
# virsh create /etc/libvirt/qemu/academy-virt01.xml
يمكن ضبط حجم الذاكرة العشوائيّة دون الحاجة لفتح ملف الإعداد بالأمر
virsh setmem
(حيثmem_size
الحجم الجديد):# virsh setmem VM_Id mem_size
يمكن بطريقة مشابهة ضبط عدد معالجات جهاز افتراضي:
# virsh setvcpus VM_Id vcpus_count
تمكن مراجعة هذا الدليل للحصول على قائمة بخيارات الأمر virsh
واستعمالاته لإدارة الأجهزة الافتراضية.
ترجمة - بتصرّف - لمقال RHCSA Series: Essentials of Virtualization and Guest Administration with KVM – Part 15 لصاحبه Gabriel Cánepa.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.