开源虚拟化-KVM

Posted liang-yao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源虚拟化-KVM相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

开源虚拟化KVM,网络设置

Linux学习总结(七十二)虚拟化之kvm

5种开源虚拟化技术推荐

思华|AMD 独家发布开源KVM MxGPU虚拟化方案

消息人士称:苹果抛弃VMware许可协议 加紧部署开源KVM虚拟化

虚拟化KVM