بلاگ/نصب KVM در سرور لینوکس CentOS 7
به‌روز شده

نصب KVM در سرور لینوکس CentOS 7

نحوه نصب و تنظیم KVM در سرورهای با سیستم‌عامل CentOS 7 یا RHEL چگونه است؟ چگونه می‌توان ابزار KVM را در CentOS 7 نصب و از ایمیج‌های ابری برای نصب ماشین مجازی میهمان استفاده کرد؟ اینها سؤالاتی است که در این مطلب به دنبال پاسخ آنها هستیم. با ما همراه باشید. ماشین مجازی مبتنی بر هسته یا KVM یک...

1400/04/214085 بازدید
نصب KVM در سرور لینوکس CentOS 7
نحوه نصب و تنظیم KVM در سرورهای با سیستم‌عامل CentOS 7 یا RHEL چگونه است؟ چگونه می‌توان ابزار KVM را در CentOS 7 نصب و از ایمیج‌های ابری برای نصب ماشین مجازی میهمان استفاده کرد؟ اینها سؤالاتی است که در این مطلب به دنبال پاسخ آنها هستیم. با ما همراه باشید. ماشین مجازی مبتنی بر هسته یا KVM یک نرم‌افزار شبیه‌سازی برای CentOS یا RHEL 7 است. KVM سرور شما را به یک مرکز سرپرستی تبدیل می‌کند. در این مطلب به شما نحوه نصب و مدیریت یک فضای شبیه‌سازی‌شده را با کمک ابزار KVM در لینوکس CentOS 7 یا RHEL 7 نشان می‌دهیم. همچنین روش نصب  و مدیریت ماشین‌های مجازی (VM) در یک سرور فیزیکی با استفاده از CLI توضیح داده خواهد شد. حتماً دقت کنید که تکنولوژی شبیه‌سازی یا VT در بایوس سرور شما فعال باشد. در همین حال، می‌توانید با استفاده از فرمان زیر از پشتیبانی CPU اینتل VT و شبیه‌سازی AMD-V مطمئن شوید.
php
$ lscpu | grep VirtualizationVirtualization: VT-x
مراحل زیر را برای نصب ابزار KVM در سرور CentOS 7/RHEL 7 دنبال کنید.

گام ۱) نصب ابزار KVM

فرمان yum زیر را تایپ کنید.
php
# yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
نصب ابزار KVM در سرور لینوکس CentOS 7/RHEL 7
نصب ابزار KVM در سرور لینوکس CentOS 7/RHEL 7
سرویس libvirtd را راه‌اندازی نمایید.
php
# systemctl enable libvirtd# systemctl start libvirtd

گام ۲) تأیید نصب KVM

با کمک فرمان‌های lsmod و grep از بارگذاری ماژول KVM مطمئن شوید.
php
# lsmod | grep -i kvm

گام ۳) تنظیم شبکه بریج

شبکه بریج مبتنی بر dhcpd به صورت پیش‌فرض توسط libvirtd تنظیم می‌شود. این موضوع را می‌توانید با استفاده از فرمان‌های زیر بررسی کنید.
php
# brctl show# virsh net-list
شبکه پیش‌فرض KVM
شبکه پیش‌فرض KVM
تمام ماشین‌های مجازی (از نوع میهمان) تنها دسترسی شبکه به دیگر VM ها در همان سرور را دارند. در اینجا، یک شبکه خصوصی 192.168.122.0/24 برای شما ساخته می‌شود. آن را بررسی کنید.
php
# virsh net-dumpxml default
اگر بخواهید که ماشین‌های مجازی شما برای دیگر سرور‌ها در شبکه LAN در دسترس باشند، باید یک شبکه بریج در سرور متصل به LAN تنظیم کنید. برای این منظور، فایل تنظیمات nic از جمله ifcfg-enp3s0 یا em1 را بروزرسانی کنید.
php
# vi /etc/sysconfig/network-scripts/enp3s0
خط زیر را اضافه نمایید.
php
BRIDGE=br0
فایل را در vi ذخیره کرده و ببندید. سپس فایل /etc/sysconfig/network-scripts/ifcfg-br0 را ویرایش کرده و اضافه کنید.
php
# vi /etc/sysconfig/network-scripts/ifcfg-br0
خطوط زیر را اضافه کنید.
php
DEVICE="br0"# I am getting ip from DHCP server #BOOTPROTO="dhcp"IPV6INIT="yes"IPV6_AUTOCONF="yes"ONBOOT="yes"TYPE="Bridge"DELAY="0"
سرویس شبکه را دوباره راه‌اندازی کنید. توجه داشته باشید که فرمان ssh قطع خواهد شد و بهتر است که از نو شروع کنید.
php
# systemctl restart NetworkManager
موضوع را با فرمان brctl بررسی کنید.
php
# brctl show

گام ۴) اولین ماشین مجازی خود را بسازید.

در اینجا می‌خواهیم یک VM در CentOS 7.x ایجاد کنیم. ابتدا با کمک فرمان wget آخرین نسخه ایمیج CentOS 7.x را دریافت کنید.
php
# 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
php
# 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 و ۴۰ گیگابایت فضای دیسک ایجاد کنیم. برای این منظور داریم:
php
# 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 داریم:
php
# virsh dumpxml centos7 | grep vnc<graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'>
در اینجا باید عدد پورت یا 5901 را یادداشت کنید. برای دسترسی به سرور ریموت vnc می‌بایست از یک کلاینت SSH برای تنظیم تونل و یک کلاینت VNC استفاده کنید. از طریق کلاینت یا دسکتاپ، فرمان هدایت پورت SSH را به صورت زیر تایپ نمایید.
php
$ ssh vivek@server1.cyberciti.biz -L 5901:127.0.0.1:5901
وقتی تونل ssh راه‌اندازی شد، می‌توانید کلاینت VNC خود را به لوکال‌هاست 127.0.0.1 و پورت 5901 به صورت زیر ارجاع دهید.
ارجاع کلاینت VNC
ارجاع کلاینت VNC
در این حالت می‌بایست صفحه نصب میهمان لینوکس CentOS را به صورت زیر مشاهده کنید.
صفحه خوشامدگویی نصب  لینوکس CentOS
صفحه خوشامدگویی نصب  لینوکس CentOS
حالا فقط دستورالعمل‌هایی را که در صفحه ظاهر می‌شوند، دنبال کرده و CentOS 7 را نصب کنید. وقتی نصب به پایان رسید، دکمه reboot را بزنید. سرور ریموت باعث بسته‌شدن ارتباط با کلاینت VNC شده است. می‌توانید با استفاده از ابزار KVM ارتباط دوباره برقرار کرده تا سایر قسمت های سرور از جمله سرویس SSH یا فایروال را تنظیم کنید.

نحوه ساخت ماشین مجازی RHEL 7.x

ابتدا باید فایل rhel-server-7.3-x86_64-dvd.iso را به صورت ذخیره‌شده در اختیار داشته باشید. در اینجا ماشین مجازی RHEL 7.x را با ۲ گیگابایت حافظه رم، دو هسته پردازنده، یک nic و ۴۰ گیگابایت فضای دیسک می‌سازیم.
php
# 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 داریم:
php
$ sudo virsh dumpxml rhel7 | grep vnc<graphics type='vnc' port='5904' autoport='yes' listen='127.0.0.1'>
در اینجا باید عدد پورت یا 5904 را یادداشت کنید. برای دسترسی به سرور ریموت vnc می‌بایست از یک کلاینت SSH برای تنظیم تونل و یک کلاینت VNC استفاده کنید. از طریق کلاینت یا دسکتاپ، فرمان هدایت پورت SSH را به صورت زیر تایپ نمایید.
php
$ 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
php
# cd /var/lib/libvirt/boot# wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
تولید دایرکتوری‌های موردنیاز
php
# D=/var/lib/libvirt/images# VM=centos7-vm1 ## vm name ### mkdir -vp $D/$VMmkdir: created directory '/var/lib/libvirt/images/centos7-vm1'
ایجاد فایل meta-data
php
# cd $D/$VM# vi meta-data
موارد زیر را در این فایل اضافه کنید.
php
instance-id: centos7-vm1local-hostname: centos7-vm1
ایجاد فایل user-data در اینجا می‌خواهیم از طریق کلیدهای ssh به VM وارد شویم. بر این اساس، ابتدا دقت کنید که کلیدهای ssh در جایگاه خود قرار گرفته باشند.
php
# ssh-keygen -t ed25519 -C "VM Login ssh key"
فرمان ssh-keygen
فرمان ssh-keygen
حالا user-data را مطابق زیر ویرایش کنید.
php
# cd $D/$VM# vi user-data
مطابق تنظیماتی که دارید، موارد زیر را اضافه کنید.
php
#cloud-config# Hostname managementpreserve_hostname: Falsehostname: centos7-vm1fqdn: centos7-vm1.nixcraft.com# Usersusers:- default- name: vivekgroups: ['wheel']shell: /bin/bashsudo: ALL=(ALL) NOPASSWD:ALLssh-authorized-keys:- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key# Configure where output will gooutput:all: ">> /var/log/cloud-init.log"# configure interaction with ssh serverssh_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 VMtimezone: Asia/Kolkata# Remove cloud-initruncmd:- systemctl stop network && systemctl start network- yum -y remove cloud-init
ایمیج ابری را کپی کنید.
php
# cd $D/$VM# cp /var/lib/libvirt/boot/CentOS-7-x86_64-GenericCloud.qcow2 $VM.qcow2
ایجاد دیسک ایمیج ۲۰ گیگابایتی
php
# 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
تنظیم اندازه دیسک ایمیج VM
تنظیم اندازه دیسک ایمیج VM
ایمیجی را که اندازه‌اش تغییر کرده، بازنویسی کنید.
php
# cd $D/$VM# mv $VM.new.image $VM.qcow2
ایجاد یک فایل cloud-init ISO
php
# mkisofs -o $VM-cidata.iso -V cidata -J -r user-data meta-data
ایجاد یک فایل cloud-init ISO
ایجاد یک فایل cloud-init ISO
ایجاد یک pool
php
# virsh pool-create-as --name $VM --type dir --target $D/$VMPool centos7-vm1 created
نصب یک ماشین مجازی CentOS 7
php
# 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
حذف فایل‌های غیرضروری
php
# cd $D/$VM# virsh change-media $VM hda --eject --config# rm meta-data user-data centos7-vm1-cidata.iso
پیدا کردن آدرس IP ابزار KVM یا آدرس dhcp
php
# virsh net-dhcp-leases default
ساخت ماشین مجازی CentOS7
ساخت ماشین مجازی CentOS7

وارد شدن به VM

از فرمان ssh به صورت زیر استفاده کنید.
php
# ssh vivek@192.168.122.85
نمونه اجرای VM
نمونه اجرای VM

فرمان‌های مفید

برخی فرمان‌های مفید برای مدیریت ماشین‌های مجازی را مرور می‌کنیم. لیست تمام VM ها
php
# virsh list --all
دریافت اطلاعات VM
php
# virsh dominfo vmName# virsh dominfo centos7-vm1
توقف و خاموش کردن یک VM
php
# virsh shutdown centos7-vm1
راه‌اندازی VM
php
# virsh start centos7-vm1
تنظیم VM برای راه‌اندازی خودکار در شروع به کار سیستم
php
# virsh autostart centos7-vm1
راه‌اندازی دوباره (ریبوت نرم و ایمن) VM
php
# virsh reboot centos7-vm1
راه‌اندازی دوباره (سخت و غیر ایمن) VM
php
# virsh reset centos7-vm1
حذف VM
php
# 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 داریم:
php
# virsh help | less# virsh help | grep reboot

نکاتی در رابطه با virt-builder

امکان ساخت سریع ایمیج‌های ماشین مجازی در CentOS 7 با استفاده از فرمان virt-builder وجود دارد. لیست ایمیج‌های VM
php
virt-builder --listvirt-builder --list | grep -i fedoravirt-builder --list | grep -i debianvirt-builder --list | grep -i ubuntuvirt-builder --list | grep -i freebsd
ساخت ماشین مجازی اوبونتو 16.04 LTS
php
# 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
نمونه‌های خروجی (به خاطر داشته باشید که پسورد تصادفی روت در صفحه نمایش داده خواهد شد):
php
[   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 passwordsvirt-builder: Setting random password of root to 1KTLsuVx14k989eq[ 144.9] Finishing offOutput file: /var/lib/libvirt/images/ncbz01-disk01.qcow2Output size: 20.0GOutput format: qcow2Total usable space: 18.6GFree space: 17.7G (94%)
حالا که ایمیج ساخته شده، نوبت نصب VM است.
php
# 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
اجرا:
php
# virsh start ncbz01
ورود به VM
php
# virsh console ncbz01
جمع‌بندی در این مطلب با نحوه نصب و راه‌اندازی ابزار KVM در سرورهای با سیستم‌عامل لینوکس CentOS 7 یا RHEL 7 آشنا شدید. امیدواریم که این مطلب نیز موردتوجه شما قرار گرفته باشد.

این مطلب مفید بود؟

نظر شما به بهتر شدن محتوا کمک می‌کند

4085 بازدید