نحوه نصب و تنظیم KVM در سرورهای با سیستمعامل CentOS 7 یا RHEL چگونه است؟ چگونه میتوان ابزار KVM را در CentOS 7 نصب و از ایمیجهای ابری برای نصب ماشین مجازی میهمان استفاده کرد؟ اینها سؤالاتی است که در این مطلب به دنبال پاسخ آنها هستیم. با ما همراه باشید.
ماشین مجازی مبتنی بر هسته یا KVM یک نرمافزار شبیهسازی برای CentOS یا RHEL 7 است. KVM سرور شما را به یک مرکز سرپرستی تبدیل میکند. در این مطلب به شما نحوه نصب و مدیریت یک فضای شبیهسازیشده را با کمک ابزار KVM در لینوکس CentOS 7 یا RHEL 7 نشان میدهیم. همچنین روش نصب و مدیریت ماشینهای مجازی (VM) در یک سرور فیزیکی با استفاده از CLI توضیح داده خواهد شد. حتماً دقت کنید که تکنولوژی شبیهسازی یا VT در بایوس سرور شما فعال باشد. در همین حال، میتوانید با استفاده از فرمان زیر از پشتیبانی CPU اینتل VT و شبیهسازی AMD-V مطمئن شوید.
$ lscpu | grep Virtualization Virtualization: VT-x
مراحل زیر را برای نصب ابزار KVM در سرور CentOS 7/RHEL 7 دنبال کنید.
گام ۱) نصب ابزار KVM
فرمان yum زیر را تایپ کنید.
# yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
سرویس libvirtd را راهاندازی نمایید.
# systemctl enable libvirtd # systemctl start libvirtd
گام ۲) تأیید نصب KVM
با کمک فرمانهای lsmod و grep از بارگذاری ماژول KVM مطمئن شوید.
# lsmod | grep -i kvm
گام ۳) تنظیم شبکه بریج
شبکه بریج مبتنی بر dhcpd به صورت پیشفرض توسط libvirtd تنظیم میشود. این موضوع را میتوانید با استفاده از فرمانهای زیر بررسی کنید.
# brctl show # virsh net-list
تمام ماشینهای مجازی (از نوع میهمان) تنها دسترسی شبکه به دیگر VM ها در همان سرور را دارند. در اینجا، یک شبکه خصوصی 192.168.122.0/24 برای شما ساخته میشود. آن را بررسی کنید.
# virsh net-dumpxml default
اگر بخواهید که ماشینهای مجازی شما برای دیگر سرورها در شبکه LAN در دسترس باشند، باید یک شبکه بریج در سرور متصل به LAN تنظیم کنید. برای این منظور، فایل تنظیمات nic از جمله ifcfg-enp3s0 یا em1 را بروزرسانی کنید.
# vi /etc/sysconfig/network-scripts/enp3s0
خط زیر را اضافه نمایید.
BRIDGE=br0
فایل را در vi ذخیره کرده و ببندید. سپس فایل /etc/sysconfig/network-scripts/ifcfg-br0 را ویرایش کرده و اضافه کنید.
# vi /etc/sysconfig/network-scripts/ifcfg-br0
خطوط زیر را اضافه کنید.
DEVICE="br0" # I am getting ip from DHCP server # BOOTPROTO="dhcp" IPV6INIT="yes" IPV6_AUTOCONF="yes" ONBOOT="yes" TYPE="Bridge" DELAY="0"
سرویس شبکه را دوباره راهاندازی کنید. توجه داشته باشید که فرمان ssh قطع خواهد شد و بهتر است که از نو شروع کنید.
# systemctl restart NetworkManager
موضوع را با فرمان brctl بررسی کنید.
# brctl show
گام ۴) اولین ماشین مجازی خود را بسازید.
در اینجا میخواهیم یک VM در CentOS 7.x ایجاد کنیم. ابتدا با کمک فرمان wget آخرین نسخه ایمیج CentOS 7.x را دریافت کنید.
# cd /var/lib/libvirt/boot/ # wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso
بررسی ایمیجهای ISO
# wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/sha256sum.txt # sha256sum -c sha256sum.txt
ایجاد ماشین مجازی CentOS 7.x
در اینجا، قصد داریم که ماشین مجازی CentOS 7.x را با ۲ گیگابایت حافظه رم، دو هسته پردازنده، یک nic و ۴۰ گیگابایت فضای دیسک ایجاد کنیم. برای این منظور داریم:
# virt-install \ --virt-type=kvm \ --name centos7 \ --ram 2048 \ --vcpus=1 \ --os-variant=centos7.0 \ --cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-1708.iso \ --network=bridge=br0,model=virtio \ --graphics vnc \ --disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2
برای تنظیم ورودی vnc از ترمینال دیگر از طریق ssh داریم:
# virsh dumpxml centos7 | grep vnc <graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'>
در اینجا باید عدد پورت یا 5901 را یادداشت کنید. برای دسترسی به سرور ریموت vnc میبایست از یک کلاینت SSH برای تنظیم تونل و یک کلاینت VNC استفاده کنید. از طریق کلاینت یا دسکتاپ، فرمان هدایت پورت SSH را به صورت زیر تایپ نمایید.
$ ssh vivek@server1.cyberciti.biz -L 5901:127.0.0.1:5901
وقتی تونل ssh راهاندازی شد، میتوانید کلاینت VNC خود را به لوکالهاست 127.0.0.1 و پورت 5901 به صورت زیر ارجاع دهید.
در این حالت میبایست صفحه نصب میهمان لینوکس CentOS را به صورت زیر مشاهده کنید.
حالا فقط دستورالعملهایی را که در صفحه ظاهر میشوند، دنبال کرده و CentOS 7 را نصب کنید. وقتی نصب به پایان رسید، دکمه reboot را بزنید. سرور ریموت باعث بستهشدن ارتباط با کلاینت VNC شده است. میتوانید با استفاده از ابزار KVM ارتباط دوباره برقرار کرده تا سایر قسمت های سرور از جمله سرویس SSH یا فایروال را تنظیم کنید.
نحوه ساخت ماشین مجازی RHEL 7.x
ابتدا باید فایل rhel-server-7.3-x86_64-dvd.iso را به صورت ذخیرهشده در اختیار داشته باشید. در اینجا ماشین مجازی RHEL 7.x را با ۲ گیگابایت حافظه رم، دو هسته پردازنده، یک nic و ۴۰ گیگابایت فضای دیسک میسازیم.
# virt-install \ --virt-type=kvm \ --name rhel7 \ --memory=2048,maxmemory=4096 \ --vcpus=2 \ --os-variant=rhel7.3 \ --cdrom=/var/lib/libvirt/boot/rhel-server-7.3-x86_64-dvd.iso \ --network=bridge=virbr0,model=virtio \ --graphics vnc \ --disk path=/var/lib/libvirt/images/rhel7.qcow2,size=40,bus=virtio,format=qcow2
برای تنظیم ورودی vnc از یک ترمینال دیگر از طریق ssh داریم:
$ sudo virsh dumpxml rhel7 | grep vnc <graphics type='vnc' port='5904' autoport='yes' listen='127.0.0.1'>
در اینجا باید عدد پورت یا 5904 را یادداشت کنید. برای دسترسی به سرور ریموت vnc میبایست از یک کلاینت SSH برای تنظیم تونل و یک کلاینت VNC استفاده کنید. از طریق کلاینت یا دسکتاپ، فرمان هدایت پورت SSH را به صورت زیر تایپ نمایید.
$ ssh vivek@server1.cyberciti.biz -L 5904:127.0.0.1:5904
وقتی تونل ssh راهاندازی شد، می توانید کلاینت VNC را به لوکالهاست 127.0.0.1 و پورت 5904 ارجاع دهید تا به مراحل بعدی نصب RHEL 7.x بپردازید.
گام ۵) استفاده از ایمیجهای ابری
روش نصبی که در بالا ارائه شد، میتواند برای اهداف آموزشی و یا یک ماشین مجازی مناسب باشد. امّا در صورتی که میخواهید از تعداد بیشتری از ماشینهای مجازی استفاده کنید، بهتر است ایمیجهای ابری را امتحان کنید. امکان ویرایش ایمیجهای ابری «پیش تولید» مطابق نیازهای شما وجود خواهد داشت. به عنوان مثال، میتوانید کاربر اضافه کنید، کلیدهای ssh وارد نمایید و منطقه زمانی را تنظیم کنید. حالا ببینیم که به این روش، چگونه میتوان یک ماشین مجازی با یک گیگابایت حافظه رم، ۲۰ گیگابایت فضای دیسک و یک vCPU در CentOS 7 ساخت.
دریافت ایمیج ابری CentOS 7
# cd /var/lib/libvirt/boot # wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
تولید دایرکتوریهای موردنیاز
# D=/var/lib/libvirt/images # VM=centos7-vm1 ## vm name ## # mkdir -vp $D/$VM mkdir: created directory '/var/lib/libvirt/images/centos7-vm1'
ایجاد فایل meta-data
# cd $D/$VM # vi meta-data
موارد زیر را در این فایل اضافه کنید.
instance-id: centos7-vm1 local-hostname: centos7-vm1
ایجاد فایل user-data
در اینجا میخواهیم از طریق کلیدهای ssh به VM وارد شویم. بر این اساس، ابتدا دقت کنید که کلیدهای ssh در جایگاه خود قرار گرفته باشند.
# ssh-keygen -t ed25519 -C "VM Login ssh key"
حالا user-data را مطابق زیر ویرایش کنید.
# cd $D/$VM # vi user-data
مطابق تنظیماتی که دارید، موارد زیر را اضافه کنید.
#cloud-config # Hostname management preserve_hostname: False hostname: centos7-vm1 fqdn: centos7-vm1.nixcraft.com # Users users: - default - name: vivek groups: ['wheel'] shell: /bin/bash sudo: ALL=(ALL) NOPASSWD:ALL ssh-authorized-keys: - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key # Configure where output will go output: all: ">> /var/log/cloud-init.log" # configure interaction with ssh server ssh_genkeytypes: ['ed25519', 'rsa'] # Install my public ssh key to the first user-defined user configured # in cloud.cfg in the template (which is centos for CentOS cloud images) ssh_authorized_keys: - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key # set timezone for VM timezone: Asia/Kolkata # Remove cloud-init runcmd: - systemctl stop network && systemctl start network - yum -y remove cloud-init
ایمیج ابری را کپی کنید.
# cd $D/$VM # cp /var/lib/libvirt/boot/CentOS-7-x86_64-GenericCloud.qcow2 $VM.qcow2
ایجاد دیسک ایمیج ۲۰ گیگابایتی
# cd $D/$VM # export LIBGUESTFS_BACKEND=direct # qemu-img create -f qcow2 -o preallocation=metadata $VM.new.image 20G # virt-resize --quiet --expand /dev/sda1 $VM.qcow2 $VM.new.image
ایمیجی را که اندازهاش تغییر کرده، بازنویسی کنید.
# cd $D/$VM # mv $VM.new.image $VM.qcow2
ایجاد یک فایل cloud-init ISO
# mkisofs -o $VM-cidata.iso -V cidata -J -r user-data meta-data
ایجاد یک pool
# virsh pool-create-as --name $VM --type dir --target $D/$VM Pool centos7-vm1 created
نصب یک ماشین مجازی CentOS 7
# cd $D/$VM # virt-install --import --name $VM \ --memory 1024 --vcpus 1 --cpu host \ --disk $VM.qcow2,format=qcow2,bus=virtio \ --disk $VM-cidata.iso,device=cdrom \ --network bridge=virbr0,model=virtio \ --os-type=linux \ --os-variant=centos7.0 \ --graphics spice \ --noautoconsole
حذف فایلهای غیرضروری
# cd $D/$VM # virsh change-media $VM hda --eject --config # rm meta-data user-data centos7-vm1-cidata.iso
پیدا کردن آدرس IP ابزار KVM یا آدرس dhcp
# virsh net-dhcp-leases default
وارد شدن به VM
از فرمان ssh به صورت زیر استفاده کنید.
# ssh vivek@192.168.122.85
فرمانهای مفید
برخی فرمانهای مفید برای مدیریت ماشینهای مجازی را مرور میکنیم.
لیست تمام VM ها
# virsh list --all
دریافت اطلاعات VM
# virsh dominfo vmName # virsh dominfo centos7-vm1
توقف و خاموش کردن یک VM
# virsh shutdown centos7-vm1
راهاندازی VM
# virsh start centos7-vm1
تنظیم VM برای راهاندازی خودکار در شروع به کار سیستم
# virsh autostart centos7-vm1
راهاندازی دوباره (ریبوت نرم و ایمن) VM
# virsh reboot centos7-vm1
راهاندازی دوباره (سخت و غیر ایمن) VM
# virsh reset centos7-vm1
حذف VM
# virsh shutdown centos7-vm1 # virsh undefine centos7-vm1 # virsh pool-destroy centos7-vm1 # D=/var/lib/libvirt/images # VM=centos7-vm1 # rm -ri $D/$VM
برای مشاهده لیست کلی انواع فرمان virsh داریم:
# virsh help | less # virsh help | grep reboot
نکاتی در رابطه با virt-builder
امکان ساخت سریع ایمیجهای ماشین مجازی در CentOS 7 با استفاده از فرمان virt-builder وجود دارد.
لیست ایمیجهای VM
virt-builder --list virt-builder --list | grep -i fedora virt-builder --list | grep -i debian virt-builder --list | grep -i ubuntu virt-builder --list | grep -i freebsd
ساخت ماشین مجازی اوبونتو 16.04 LTS
# virt-builder ubuntu-16.04 \ --size=20G --format qcow2 -o /var/lib/libvirt/images/ncbz01-disk01.qcow2 \ --hostname ncbz01 --network --timezone Asia/Kolkata \ --firstboot-command "dpkg-reconfigure openssh-server" \ --edit '/etc/default/grub: s/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"/' \ --run-command update-grub
نمونههای خروجی (به خاطر داشته باشید که پسورد تصادفی روت در صفحه نمایش داده خواهد شد):
[ 3.9] Downloading: http://libguestfs.org/download/builder/ubuntu-16.04.xz ######################################################################## 100.0% [ 121.7] Planning how to build this image [ 121.7] Uncompressing [ 126.5] Resizing (using virt-resize) to expand the disk to 20.0G [ 142.1] Opening the new disk [ 143.8] Setting a random seed [ 143.8] Setting the machine ID in /etc/machine-id [ 143.8] Setting the hostname: ncbz01 [ 144.3] Setting the timezone: Asia/Kolkata [ 144.3] Setting passwords virt-builder: Setting random password of root to 1KTLsuVx14k989eq [ 144.9] Finishing off Output file: /var/lib/libvirt/images/ncbz01-disk01.qcow2 Output size: 20.0G Output format: qcow2 Total usable space: 18.6G Free space: 17.7G (94%)
حالا که ایمیج ساخته شده، نوبت نصب VM است.
# virt-install --import --name ncbz01 \ --ram 2048 \ --vcpu 2 \ --disk path=/var/lib/libvirt/images/ncbz01-disk01.qcow2,format=qcow2 \ --os-variant ubuntu17.04 \ --network=bridge=virbr0,model=virtio \ --noautoconsole
اجرا:
# virsh start ncbz01
ورود به VM
# virsh console ncbz01
جمعبندی
در این مطلب با نحوه نصب و راهاندازی ابزار KVM در سرورهای با سیستمعامل لینوکس CentOS 7 یا RHEL 7 آشنا شدید. امیدواریم که این مطلب نیز موردتوجه شما قرار گرفته باشد.