أساسيّات الحوسبة الافتراضيّة Virtualization باستخدام KVM على Red Hat Enterprise Linux


محمد أحمد العيل

يشير مصطلح الحوسبة الافتراضيّة (التخيّليّة أو الوهميّة) Virtualization إلى إمكانيّة استخدام أنظمة تشغيل مستقلّة ومنفصلة في وقت واحد على نفس العتاد Hardware. يُعرَف النظام الذي يشغّل العتاد الذي تعمل عليه الأنظمة الأخرى، يُعرَف بالمضيف Host؛ في ما يُعدّ كلّ من واحد الأنظمة الأخرى ضيفا Guest.

redhat-KVM.png

يتولّى برنامج يُعرف بالمراقِب 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 للأجهزة الضيفة:

  1. نضيف السّطر التالي إلى ملفّ إعداد الواجهة (يوجد على الأرجح في المجلّد 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) عليه.

إدارة الأجهزة الافتراضية

في ما يلي المهامّ الأساسيّة التي تحتاج - بوصفك مدير نظام - لمعرفة كيفية أدائها. تُنفَّذ الأوامر التالية على النّظام المضيف.

  1. سرد قائمة بالأجهزة الافتراضية

    # virsh list --all

    يظهر الأمر قائمة بالأجهزة الافتراضية المُنشأة، أسماءها وحالتها. من المهم الانتباه لمعرّف الجهاز (VM Id)، إذ ستحتاجه لتنفيذ أوامر إدارية أخرى.

  2. عرض معلومات عن نظام ضيف (حيث VM_Id معرّف الجهاز الافتراضي):

    # virsh dominfo VM_Id

     

  3. بدء تشغيل، إعادة تشغيل أو إيقاف نظامٍ ضيف:

    # virsh start VM_Id
    # virsh reboot VM_Id
    # virsh shutdown VM_Id

     

  4. الوصول إلى طرفيّة الجهاز (في حال إعداداها عند إنشاء الجهاز الافتراضي):

    # virsh console VM_Id

     

  5. تعديل حجم الذاكرة العشوائيّة المتاحة لجهاز افتراضي أو عدد معالجاته الافتراضية:

    يحتاج التعديل على هذه الموارد أولا إطفاء الجهاز:

    # 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.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن