1. 程式人生 > >開源虛擬化-KVM

開源虛擬化-KVM

c2c writeback 普通 進行 啟動服務 磁盤 gateway groups -m

KVM 是 kernel-based Virtual Machine 的簡稱,是一個開源的系統虛擬化模塊,自Linux 2.6.20之後集成在Linux的各個主要發行版本中。它使用Linux自身的調度器進行管理,所以相對於Xen,其核心源碼很少。KVM是基於硬件的完全虛擬化

  1. 查看CPU是否支持虛擬化:無輸出則不支持

egrep ‘vmx|svm‘ /proc/cpuinfo

或lscpu

  1. 安裝:

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

  1. 啟動服務,啟動GUI虛擬機管理工具

systemctl enable libvirtd

systemctl start libvirtd

virt-manager

  1. 配置網卡橋接

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

熱添加硬盤

  1. 創建虛擬硬盤

qemu-img create -f qcow2 /mnt/disk01/abc.img 20G

為虛擬機添加虛擬硬盤

virsh attach-disk 2012x1 /mnt/disk01/abc.img vdb --subdriver qcow2 --persistent

  1. 通過配置文件熱添加虛擬硬盤

創建虛擬硬盤

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虛擬機靜態遷移

  1. 導出虛擬機配置文件
  2. virsh dumpxml 2012 > /root/2012.xml
  3. 拷貝配置文件
  4. 查看虛擬機磁盤文件

virsh domblklist domain

  1. 拷貝虛擬機磁盤文件
  2. 註冊虛擬機

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