Linux系統KVM虛擬化技術


在公司工作時出現了這樣一個需求:需要在一台服務器中安裝兩個系統,分別部署不同的服務,設置不同的系統時間,並且兩個系統之間可以互相通訊。在網上查詢相關資料后,決定通過KVM實現該功能,現將步驟記錄如下。

 

我這邊服務器用的是CentOs7.2版本。虛擬機也使用相同版本。主機名hls 、IP:192.168.1.11。

虛擬機主機名hls01

 

一、安裝前准備

 

1、 查看CPU是否支持KVM

(e)grep  -E '(vmx|svm)'   /proc/cpuinfo

如果出現vmx 則表示支持

 

 

 

2、 關閉SELinux

將 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改為 SELinux=disabled

 

 

 

3、 安裝KVM需要的軟件包

yum install kvm libvirt kmod-kvm qemu-kvm virt-manager bride-utils virt-install

  

 

其中:virt-manager是GUI管理窗口,bridge-utils 用於網絡橋接qemu-kvm用來創建虛擬機硬盤,libvirt用來管理虛擬機 virt-install 用來創建虛擬機

 

4、 安裝完成檢查模塊是否有加載。

lsmod | grep kvm

 

 

 

5、 檢查KVM是否安裝成功

virsh -c qemu:///system list

 

 

 

 

6、 開啟KVM服務並且設置其開機啟動

systemctl start libvirtd

systemctl enable libvirtd

 

查看KVM狀態操作結果

systemctl status libvirtd

 systemctl is-enabled libvirtd

 

 

 

 

 

 

7、 網卡配置

啟動libvirtd,並將它設為開機啟動,啟動后使用ifconfig查看發現會自動建立一個名稱為virbr0的虛擬網橋,ip默認為192.168.122.1/24,說明libvirtd啟動成功,如果默認沒有ifconfig命令,使用yum install -y net-tools安裝。在多網卡情況下,此網橋默認與eth1網卡綁定。為了向虛擬機提供聯網功能,KVM使用virbr0作為默認網絡設備,因此在實際應用中,需要將virbr0與連接到實際網絡的網卡綁定。

 

1)      添加網橋br0

vi /etc/sysconfig/network-scripts/ifcfg-br0

TYPE=bridge

BOOTPROTO=static

NM_CONTROLLED=yes

NAME= br0

DEVICE= br0

ONBOOT=yes

IPADDR=192.168.1.12

GATEWAY=192.168.1.1

DNS1=192.168.1.1

也可以根據自己需要設置成自動獲取

    vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=dhcp

然后修改本機的物理網卡

vi  /etc/sysconfig/network-scripts/ifcfg-eth0

在最后面添加 BRIDGE=br0

 

重啟網卡   service network restart

 

現在訪問電腦 使用192.168.1.12就可以了。

 

二、使用KVM創建虛擬機

 

1、 創建安裝硬盤

使用qemu命令創建一個10G的硬盤(最小10G,可以更多這塊硬盤空間就是虛擬機系統硬盤總空間),我這邊硬盤的名稱為: CentOS-7-x86_64.raw

 

qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
 
查看硬盤  ll -h /opt
 

 

 
        
 
2、 創建虛擬機
先在根目錄下創建一個ISO的目錄文件夾用來存放CentOS7的ISO文件
 mkdir ISO
 

 

 
        
 
        
virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024  --cdrom=/root/ISO/OracleLinux-R7-U2-Server-x86_64-dvd.iso --disk path=/opt/CentOS-7-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 –-noautoconsole
 

其中CentOS-7-x86_64是虛擬機的名稱 可以自己隨便定 –cdrom 是我們放的ISO文件的路徑 –disk path 是我們創建的硬盤路徑。

 

但是我這邊在執行的時候出現了一個錯誤

 

 

 

Permission denied 。最開始我以為是ISO文件沒有權限,但是授權之后仍然出現這個問題於是在網上找資料,最終發現是需要修改/etc/libvirt/qemu.conf 配置文件。

 vi /etc/libvirt/qemu.conf

 

需要配置qemu進程的用戶和組相關配置,可根據自己的實際情況進行修改,這邊我將user和group都設置成root:

 

 

 

 

配置修改完成后,需要重啟libvirtd服務

  service libvirtd restart

 

然后再重新執行上一步就會發現已經開始安裝了

這時候使用TightVNC工具 連接主機IP 192.168.1.12

 

 

 

 

進去之后就是CentOS7的安裝界面,一步步安裝就行了。

 

 

還有一種方法是先不創建虛擬機硬盤 直接在命令中指定

 

mkdir –p /home/iso  將iso文件上傳到目錄下

mkdir -p /home/kvm-bak   創建虛擬機文件存放路徑

 

創建虛擬機 

virt-install -n hls01 -r 2048 --disk /home/kvm-bak/hls01.img,format=qcow2,size=20 --network bridge=br0 --os-type=linux --os-variant=none --cdrom /home/iso/ OracleLinux-R7-U2-Server-x86_64-dvd.iso --vnc --vncport=5910 --vnclisten=0.0.0.0

然后就可以用VNC Viewer連接一步步安裝。

 

 

安裝中間出現的問題:使用VNC工具連接到虛擬機直接是黑屏,沒法顯示安裝界面。

這里困擾我幾天,找了各種資料、修改了很多配置文件、安裝很多包都沒有解決。最后偶然發現是我的Linux系統內核問題。我這邊使用的是Oracle版本的CentOS系統,默認的是3.8的uek內核與VNC圖形不匹配。改成3.10的Red Hat 內核就行。如果是原版的CentOS系統就直接沒有這個問題。算是我給自己挖的坑。

 

解決方法是將默認內核修改步驟如下:

cat /boot/grub2/grub.cfg |grep menuentry   查看系統可用內核

grub2-editenv list    查看系統默認內核

 

grub2-set-default 'Oracle Linux Server (3.10.0-327.el7.x86_64 with Linux) 7.2'  修改系統默認內核

grub2-editenv list    查看修改結果

 

 

三、虛擬機的配置工作

1、查看虛擬機信息

當KVM中的虛擬機啟動后,可以在/etc/libvirt/qemu目錄下,看到啟動的虛擬機的信息

 

 

 

 

使用命令 virsh edit CentOS-7-x86_64 我們可以看到更多信息並且可以修改。

 

2、配置網卡

我們可以在安裝虛擬機系統時指定使用橋接模式 br0

如果我們已經安裝好系統就需要在其XML配置文件中修改。

 virsh edit CentOS-7-x86_64

 

 

將 type 改為bridge   network=’default’改為bridge=’br0’

 

 

修改完成后需要重啟虛擬機

 

virsh shutdown CentOS-7-x86_64     ##關閉虛擬機

 

virsh list --all            ##查看所有虛擬機狀態

 

virsh start CentOS-7-x86_64      ##啟動虛擬機

 

主機就可以和虛擬機之間相互通訊了。也可以用SSH連接虛擬機。

 

3、 CPU熱添加(KVM支持CPU的熱添加,不過局限是宿主機和虛擬機的系統相同才行,這里宿主機是CentOS7,虛擬機也是CentOS7,所以可以模擬CPU熱添加,不過真實生產環境不建議這樣操作)

virsh edit CentOS-7-x86_64

將  <vcpu placement='static'>1</vcpu> 修改為:

<vcpu placement='auto' current="1">4</vcpu>

 

意思是當前cpu為1核,最多可以有4核,修改完虛擬機的配置文件,必須關閉虛擬機再啟動,配置才能生效

 

 

 

 

在主機上通過命令添加核數

 virsh setvcpus CentOS-7-x86_64 2 --live ##虛擬機的cpu添加到2core

 

再通過VNC工具查看虛擬機CPU信息

 

 

 

4、 內存熱添加

 

 

查看當前虛擬機內存

virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon

 

修改當前虛擬機內存為512(可根據實際需要調大或者調小虛擬機內存)

  virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512

 

 

 

 

 

四、遷移虛擬機

虛擬機建好后,最大的好處就是任由我們折騰,而不用擔心重裝系統的麻煩。所以一定要知道虛擬機怎么復制遷移,這里有兩種情況,一種是本機上鏡像復制,另一種是將本機鏡像遷移到其他服務器上

 

1、 本機復制

先關閉虛擬機  virsh shutdown CentOS-7-x86_64
創建一個克隆的虛擬機硬盤  mkdir -p /home/kvm-img
 使用 virt-clone 克隆CentOS-7-x86_64為新的虛擬機
virt-clone -o CentOS-7-x86_64 -n CentOS-7-x86_64_01 -f /home/kvm-img/ CentOS-7-x86_64_01.img
 
克隆完成 使用 virsh list –all 查看虛擬機的狀態
 
開啟CentOS-7-x86_64_01然后修改IP地址主機名

 virsh start CentOS-7-x86_64_01

 hostname hls02

vi /etc/hostname

重啟虛擬機 reboot

 

2、 將虛擬機鏡像(CentOS-7-x86_64_01)遷移到其他服務器上

先找到虛擬機的配置文件和鏡像文件的位置然后將CentOS-7-x86_64_01.img放到新服務器的/home/kvm-img目錄下,將CentOS-7-x86_64_01.xml放到 /etc/libvirt/qemu 目錄中

都改名為CentOS-7-x86_64_02

復制一個 CentOS-7-x86_64_02.xml 將里面所有CentOS-7-x86_64_01替換為CentOS-7-x86_64_02,然后把UUID換為新的 同時注意xml中的source file 文件路徑要修改。

 

定義新的虛擬機 virsh define /etc/libvirt/qemu/ CentOS-7-x86_64_02.xml

按照需要修改IP,主機名然后重啟就行了。

3、刪除虛擬機

如果虛擬機在工作中可以先關閉也可以直接destroy然后再undefine移除

virsh destroy  CentOS-7-x86_64

virsh undefine CentOS-7-x86_64

 

如果虛擬機已經關閉直接undefine 移除就行

再刪除相應的文件

/var/lib/libvirt/images/CentOS-7-x86_64

/etc/libvirt/qemu/CentOS-7-x86_64

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM