開源虛擬化-KVM
KVM 是 kernel-based Virtual Machine 的簡稱,是一個開源的系統虛擬化模塊,自Linux 2.6.20之後集成在Linux的各個主要發行版本中。它使用Linux自身的調度器進行管理,所以相對於Xen,其核心源碼很少。KVM是基於硬件的完全虛擬化
-
查看CPU是否支持虛擬化:無輸出則不支持
egrep ‘vmx|svm‘ /proc/cpuinfo
或lscpu
-
安裝:
yum install -y kvm virt-manager libvirt
Centos7中kvm已經集成到內核當中
lsmod | grep kvm
kvm_intel 170181 0
kvm 554609 1 kvm_intel
irqbypass 13503 1 kvm
-
啟動服務,啟動GUI虛擬機管理工具
systemctl enable libvirtd
systemctl start libvirtd
virt-manager
-
配置網卡橋接
systemctl stop NetworkManager
systemctl disable NetworkManager
yum install -y bridge-utils #centos7默認安裝
方法1:修改配置文件
創建橋接網卡ifcfg-br0
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens32 ifcfg-br0
vim ifcfg-br0
TYPE=Bridge
BOOTPROTO=none
DEFROUTE=yes
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.200.100
PREFIX=24
GATEWAY=192.168.200.2
DNS1=114.114.114.114
修改要橋接的網卡
vim ifcfg-ens32
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens32
DEVICE=ens32
ONBOOT=yes
BRIDGE=‘br0‘
方法2:
virsh iface-bridge ens34 br1
重啟網絡服務
systemctl restart network
查看網橋狀態:
brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29f308bd no ens32
br1 8000.000c29f308c7 yes ens34
virbr0 8000.52540028c2c6 yes virbr0-nic
創建虛擬機
yum install -y virt-install virt-viewer
virt-install --name windows-server-2012 --os-type=windows --os-variant=Win2k12 --hvm --vcpus=2 --ram 1536 --disk path=/mnt/disk01/windows-server-2012.img,size=30,format=qcow2,bus=virtio --network bridge=br0,model=virtio,mac=52:54:00:00:00:00 --noautoconsole --vnc --vncport=5900 --vnclisten=0.0.0.0 --cdrom /mnt/disk01/cn_windows_server_2012_r2_x64_dvd_2707961.iso
參數說明:
--hvm 全虛擬化
--name 虛擬機名稱
--ram 內存大小。
--vcpus CPU 核心數
--disk 虛擬機鏡像,size指定分配大小,單位為G。
--network 網絡類型,此處用的是bridge橋接。
--cdrom 指定安裝鏡像iso光盤
--vnc 啟用VNC遠程管理
--vncport 指定VNC監控端口
--vnclisten 指定VNC監聽IP
--os-variant 指定操作系統
KVM安裝Windows找不到硬盤(無硬盤驅動)?
安裝yum源
wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo
yum install -y virtio-win
查看下載的光盤位置
rpm -ql virtio-win | grep ‘.iso‘
/usr/share/virtio-win/virtio-win-0.1.141.iso
/usr/share/virtio-win/virtio-win.iso
virt-install --name windows-server-2012 --os-type=windows --os-variant=Win2k12 --hvm --vcpus=2 --ram 1536 --disk path=/mnt/disk01/windows-server-2012.img,size=30,format=qcow2,bus=virtio --network bridge=br0,model=virtio,mac=52:54:00:00:00:00 --noautoconsole --vnc --vncport=5900 --vnclisten=0.0.0.0 --disk path=/mnt/disk01/cn_windows_server_2012_r2_x64_dvd_2707961.iso,device=cdrom --cdrom /usr/share/virtio-win/virtio-win.iso
加載驅動程序->瀏覽->CD驅動器 virtio-win-0.1.1->viostor->2k12R2->amd64
克隆
virt-clone --connect=qemu:///system -o windows-server-2012 -n 2012x1 -f /mnt/disk01/2012x1.img
-o表示舊的虛擬機名稱,-n表示新的虛擬機名稱,-f表示新的虛擬機路徑。
常用命令
查看所有虛擬機
virsh list --all
查看網卡
virsh domiflist windows-server-2012
查看存儲
virsh domblklist windows-server-2012
查看網絡
virsh net-list
關閉虛擬機
virsh shutdown windows-server-2012
關閉電源
virsh destroy windows-server-2012
啟動虛擬機
virsh start windows-server-2012
掛起虛擬機
virsh suspend windows-server-2012
恢復虛擬機
virsh resume windows-server-2012
刪除(不刪除虛擬硬盤)
virsh undefine windows-server-2012
虛擬機隨宿主機啟動而啟動
virsh autostart windows-server-2012
取消虛擬機隨宿主機啟動而啟動
virsh auotstart windows-server-2012
修改內存大小
virsh setmem windows-server-2012 1024M
修改最大內存(QEMU / KVM不支持最大內存限制的實時更改)
virsh setmaxmem windows-server-2012 1024
指定了--live,則會影響正在運行的guest。如果指定了--config,則會影響下一次引導
修改虛擬處理器數量
virsh setvcpus domain 4
Centos7本地console連接
vim /etc/sysconfig/grub 在第6行後添加console=ttyS0
RUB_CMDLINE_LINUX="crashkernel=..........quuiet console=ttyS0"
#grub2-mkconfig -o /boot/grub2/grub.cfg
重新啟動
reboot
virsh console centos7.0
退出為CTRL+ ]
存儲池管理:
定義存儲池和目錄
mkdir /mnt/disk01/vdisk-pool-1
Virsh pool-define-as vdisk-pool-1 --type dir --target /disk01/vdisk-pool-1
默認狀態為不活躍
virsh pool-list --all
使vdisk-pool-1自動啟動
virsh pool-autostart vdisk-pool-1
virsh pool-start vdisk-pool-1
使用NFS存儲池
nfs存儲搭建見http://blog.rootr.cn/?p=234
創建nfs存儲池
mkdir /mnt/nfs/
virsh pool-define-as nfs-pool-1 --source-format nfs --type netfs --source-host 192.168.200.105 --source-path /nfs/ --target /mnt/nfs/
默認狀態為不活躍
virsh pool-list --all
virsh pool-start nfs-pool-1
使其nfs-pool-1自動啟動
virsh pool-autostart nfs-pool-1
本地存儲池查看
ls /etc/libvirt/storage/
編輯存儲池disk01配置文件
virsh pool-edit disk01
生成UUID
uuidgen
在存儲池中創建虛擬機存儲卷
virsh vol-create-as disk01 test.img 1G --format qcow2
在存儲池中刪除虛擬機存儲卷
virsh vol-delete --pool disk01 test.img
取消存儲池的活躍狀態
virsh pool-destroy disk01
刪除存儲池定義的目錄/data/vmfs
virsh pool-delete disk01
取消定義存儲池
virsh pool-undefine disk01
熱添加硬盤
-
創建虛擬硬盤
qemu-img create -f qcow2 /mnt/disk01/abc.img 20G
為虛擬機添加虛擬硬盤
virsh attach-disk 2012x1 /mnt/disk01/abc.img vdb --subdriver qcow2 --persistent
-
通過配置文件熱添加虛擬硬盤
創建虛擬硬盤
qemu-img create -f qcow2 /mnt/disk01/def.img 20G
vim /tmp/def.xml 文件位置隨意
<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘writeback‘/>
<source file=‘/mnt/disk01/def.img‘/>
<target dev=‘vdc‘ bus=‘virtio‘/>
</disk>
為虛擬機熱添加虛擬硬盤
virsh attach-device 2012x1 /tmp/def.xml
查看centos域的存儲設備
virsh domblklist 2012x1
目標 源
------------------------------------------------
vda /mnt/disk01/2012x1.img
vdb /mnt/disk01/abc.img
vdc /mnt/disk01/def.img
熱移除虛擬硬盤
virsh detach-disk 2012x1 vdb --config --live
導出KVM虛擬機配置文件
virsh dumpxml 2012x1 > /tmp/2012x1.xml
編輯KVM虛擬機配置文件
virsh edit 2012x1
基於後備鏡像創建差值鏡像(類似VMware的鏈接克隆,鏈接克隆是對原虛擬機的引用。必須能夠訪問原虛擬機才能運行)
qemu-img create -f qcow2 -b centos7.qcow2 centos7x1.qcow2
qemu-img info centos7x1.qcow2
virtual size: 20G (21474836480 bytes)
disk size: 196K
backing file: centos7.qcow2
轉換差值鏡像為普通鏡像
qemu-img convert -f qcow2 -O qcow2 centos7x1.qcow2 centos7x2.qcow2
qemu創建快照!!!需要關機!!!
qemu-img snapshot -c snap01 /mnt/disk01/2012x1.img
qemu查看快照
qemu-img snapshot -l /mnt/disk01/2012x1.img
qemu恢復快照!!!需要關機!!!
qemu-img snapshot -a snap01 /mnt/disk01/2012x1.img
qemu刪除快照!!!需要關機!!!
qemu-img snapshot -d snap01 /mnt/disk01/2012x3.img
創建快照(系統正在運行)
virsh snapshot-create-as 2012 snap2 test2
創建快照(系統關機後)
virsh shutdown 2012
virsh snapshot-create-as 2012 snap1 test1
查看所有快照
virsh snapshot-list 2012
名稱 生成時間 狀態
------------------------------------------------------------
snap1 2017-09-14 15:13:25 +0800 shutoff
snap2 2017-09-14 15:16:46 +0800 running
#狀態為拍攝快照時系統的狀態
查看磁盤信息(快照)
qemu-img info disk01.qcow2
快照配置文件路徑:/var/lib/libvirt/qemu/snapshot
恢復快照
virsh snapshot-revert --domain 2012 snap1
刪除快照
virsh snapshot-delete 2012 snap2
kvm虛擬機靜態遷移
- 導出虛擬機配置文件
- virsh dumpxml 2012 > /root/2012.xml
- 拷貝配置文件
- 查看虛擬機磁盤文件
virsh domblklist domain
- 拷貝虛擬機磁盤文件
- 註冊虛擬機
virsh define /mnt/disk01/2012.xml
kvm虛擬機基於共享存儲的動態遷移(主機名不能相同,磁盤緩存模式為none)
virsh migrate --live --verbose centos6 qemu+ssh://192.168.200.101/system tcp://192.168.200.101
虛擬機已完成遷移,但是kvm還沒有虛擬機配置文件;所以需要創建配置文件並定義虛擬機。
導出虛擬機配置文件
virsh dumpxml centos6 >/root/centos6.xml
註冊虛擬機
virsh define /root/centos6.xml
開源虛擬化-KVM