KVM虚拟化回顾

简介

KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的针对Linux on x86硬件的完整虚拟化解决方案,其中包含虚拟化扩展 (Intel VT or AMD-V).。它使用Linux自身的调度器进行管理,其核心源码很少。它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko 或 kvm-amd.ko)。kvm还需要一个经过修改的QEMU 软件(qemu-kvm),作为虚拟机上层控制和界面。KVM的虚拟化需要硬件支持(如 Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。 KVM可以运行多个其本身运行未改动的镜像的虚拟机。

QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT)
, AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了
另一个独立的虚拟化解决方案:KVM+QEMU。

KVM 虚拟化中使用的镜像格式通常为 RAW 和 QCOW2 两种格式。那这两种格式特点怎样呢:

qcow2特点: qcow2 镜像格式是 QEMU 模拟器支持的一种磁盘镜像,是一种比较主流的一种虚拟化镜像格式。它也是可以用一个文件的形式来表示一块固定大小的块设备磁盘。与普通的 raw 格式的镜像相比,有以下特性:占用空间小,即使文件系统不支持空洞(holes);支持写时拷贝(COW, copy-on-write),镜像文件只反映底层磁盘的变化(du -h和ls -lh看到的就一样了);支持快照(snapshot);镜像文件能够包含多个快照的历史;支持 zlib 的压缩;支持 AES 加密;第二代的QEMU写时复制格式,QEMU推荐的镜像格式,支持稀疏文件,支持AES加密,支持基于zlib的压缩,支持snapshot,支持后备镜像;目前qcow2的性能上接近raw裸格式的性能;

RAW特点: RAW 格式镜像文件又被称为 原始镜像 或 裸设备镜像, RAW 格式镜像文件能够直接当作一个块设备类似/dev/sdb 设备可以直接挂载,空间使用来看,这个更像磁盘;可以使用dd指令创建一个 File 就能够模拟 RAW 镜像文件;性能较 QCOW2 要更高;能够随意转换格式;RAW不支持快照;简单的二进制镜像文件,一次性占用分配的磁盘空间,支持稀疏文件。raw格式磁盘,可以在原来的盘上追加空间,也用dd命令:
其他格式:VirtualBox的虚拟磁盘映像(VDI);VHD (Hyper-V)的:VHD 和VHDX; VMware的 vmdk,vmdk VMware镜像格式,vdi VirtualBox镜像格式

raw->qcow2 格式转化,借助于qemu-img工具实现,可安装qemu-img,qemu-img是专门虚拟磁盘映像文件的qemu命令行工具。

一、架构

在这里插入图片描述
如上图所示,kvm基本结构由2个部分主要构成:

1)kvm 驱动:从2.6.20开始,KVM的内核组件包含在主线Linux中。其主要负责虚拟机的创建,虚拟内存的分配,VCPU寄存器的读写以及VCPU的运行。它由提供核心虚拟化基础架构的可加载内核模块kvm.ko和处理器特定模块kvm-intel.ko或kvm-amd.ko组成。标准的Linux内核中加入KVM的模块kvm.ko就变身成为一个VMM(VMM Virtual MachineMonitor)。

2)管理工具Qemu-kvm:QEMU是一种通用的开源计算机仿真器和虚拟器用于模拟虚拟机的用户空间组件,提供I/O设备模型,访问外设的途径。从1.3开始,KVM的用户空间组件包含在主线QEMU中,https://www.qemu.org/。

相关技术博客:https://planet.virt-tools.org/
https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/7.9_release_notes/architectures

用户模式中的KVM模块可被看作是一个标准的linux 字符集设备(/dev/kvm),用户可通过 modprobe 系统工具去加载 KVM 模块。Qemu通过libkvm应用程序接口,用fd通过ioctl向设备驱动来发送创建,运行虚拟机命令。设备驱动kvm就会来解析命令(kvm_dev_ioctl函数在kvm_main.c文件中);kvm 模块让Linux主机成为一个虚拟机监视器(VMM),并且在原有的Linux两种执行模式基础上,新增加了客户模式,客户模式拥有自己的内核模式和用户模式。在虚拟机运行时,三种模式的工作各为:

客户模式: 执行非I/O的客户代码,虚拟机运行在这个模式下。

用户模式:代表用户执行I/O指令,qemu运行在这个模式下。

内核模式:实现客户模式的切换,处理因为I/O或者其他指令引起的从客户模式退出(VM_EXIT)。kvm 模块工作在这个模式下。

在kvm的模型中,每一个Gust OS都是作为一个标准的linux进程,都可以使用linux进程管理命令管理。

这里假如qemu通过ioctl发出KVM_CREATE_VM 指令,创建了一个VM后,qemu需要需要发送一些命令给VM,如KVM_CREATE_VCPU。这些命令当然也是通过ioctl发送的,用户程序中用ioctl发送KVM_CREATE_VM得到的返回值就是新创建的VM对应的fd(kvm_vm),fd是创建的指向特定虚拟机实例的文件描述符,之后利用这个fd发送命令给VM进行访问控制。kvm解析这些命令的函数是kvm_vm_ioctl。这样我们就可得出创建一个vm过程如下:

1) 用户发起创建虚拟机,通过调用用户模式的qemu程序,qemu与kvm提供的libkvm库为接口,传递创建指令。
2) 打开/dev/kvm文件并获得文件描述符fd后,通过ioctl指令写入KVM_CREATE_VM,即可创建一个虚拟机,并返回此虚拟机文件描述符fd_vm(kvm_vm)。之后利用这个fd发送命令给VM进行访问控制。kvm解析这些命令的函数是kvm_vm_ioctl。
3) 获得fd_vm后,通过ioctl调用KVM_CREATE_VCPU指令,可以对fd_vm所对应的虚拟机创建vCPU,并对vCPU做初始化操作。
4)最后通过KVM_RUN指令对fd_vcpus操作,启动运行虚拟机。

那么,kvm基本工作原理可概述如下:

当发起创建kvm-vm指令后,用户模式的qemu利用libkvm通过ioctl进入内核模式,kvm模块为虚拟机创建虚拟内存、虚拟CPU后执行VMLAUCH指令进入客户模式。加载Guest OS并执行。如果Guest OS 发生外部中断或者影子页表缺页之类的情况,会暂停Guest OS的执行,退出客户模式触发异常处理,之后重新进入客户模式,执行客户代码。如果发生I/O事件或者信号队列中有信号到达,就会进入用户模式处理。工作流程图如下:
在这里插入图片描述
参考:https://www.linuxidc.com/Linux/2015-01/112328.htm

二、工具篇

1、qemu-img 磁盘管理工具

命令格式:
qemu-img convert -c -f fmt -O out_fmt -o options fname out_fname

参数说明:
-c:采用压缩,只有qcow和qcow2才支持
-f:源镜像的格式,它会自动检测,所以省略之
-O:目标镜像的格式
-o:其他选先
fname:源文件
out_fname:转化后的文件

raw->qcow2 :
qemu-img convert -f raw centos.img -O qcow2 centos.qcow2
参数说明:
convert 将磁盘文件转换为指定格式的文件
-f 指定需要转换文件的文件格式
-O 指定要转换的目标格式
注意:转换完成后,将新生产一个目标映像文件,原文件仍保存。
在这里插入图片描述
qcow2–>raw:
qemu-img convert -O qcow2 image-raw.raw image-raw-converted.qcow

vmdk文件—>raw文件:
qemu-img convert -f vmdk -O raw image.vmdk image.img

vmdk–>qcow2文件:
qemu-img convert -f vmdk -O qcow2 image.vmdk image.qcow2

qemu-img常用命令:
info : 查看镜像的信息;
create: 创建镜像;
check: 检查镜像;
convert: 转化镜像的格式;
snapshot :管理镜像的快照;
rebase: 在已有的镜像的基础上创建新的镜像;
resize: 增加或减小镜像大小

基于后备镜像创建差量镜像:
多个虚拟机使用的差量镜像(前端镜像)都指向同一个后备镜像,默认从后备镜像读,写则到自己的差量镜像。后备镜像可以是raw或qcow2,差量镜像只能是qcow2;
这样的优势主要体现:a. 节省磁盘空间 ;b. 瞬间快速创建虚拟机。

后备镜像差量生成虚拟机的方式可以快速的产生大量的虚拟机,节省磁盘空间,在生产环境中有非常重要的意义。经过测试,对后备镜像的读压力非常小,系统压力主要在差量镜像的写压力,使用的时候,为了取得良好效果,应将后备镜像和差量镜像分散到不同的物理硬盘上,并保证镜像的安全性。

#基于后备镜像创建差量镜像:
#qemu-img create -f qcow2 -b centos7.2.qcow2 centos7.2.bk.img
其中,centos7.2.qcow2 前端镜像是不能删除(后备镜像),centos7.2.bk.img 删除后后端镜像就就无法启动(即差量镜像);-b:表基于该镜像来创建;
#查询前端镜像:# qemu-img info centos7.2.qcow2
#查询后端镜像 :# qemu-img info centos7.2.bk.img
#转换差量镜像为普通镜像:
#qemu-img convert -f qcow2 -O qcow2 centos7.2.qcow2 centos7.2.bk.img

#将名为image.img的原始图像文件转换为qcow2文件。
qemu-img convert -f raw -O qcow2 image.img image.qcow2

查询命令:
qemu-img snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename
参数说明:
“-l” 选项是查询并列出镜像文件中的所有快照,
“-a snapshot”是让镜像文件使用某个快照,
“-c snapshot”是创建一个快照,
“-d”是删除一个快照

示例:
qemu-img snapshot test1.qcow2 -c s1 #创建快照s1
qemu-img snapshot test1.qcow2 -l #快照查看,使用-l参数
qemu-img snapshot test1.qcow2 -d s1 #删除快照,使用-d参数
qemu-img snapshot test1.qcow2 -a s1 #还原快照,使用-a参数
#快照单独提取镜像,可以使用convert参数
qemu-img convert -f qcow2 -O qcow2 -s s1 test1.qcow2 test-s1.qcow2

调整磁盘大小:qemu-img resize filename [+ | -]size
示例:qemu-img resize test1.raw +2G
raw格式镜像大小都可以调整,qcow2格式镜像只能增大,不能缩小

2、kvm虚拟机实例管理工具

1>使用virt-manager管理kvm(通过VNC连接服务器)
Libvirt:API套件
virsh:命令行工具
libguestfs:

我们前面提到管理kvm虚拟实例使用QEMU 工具,但因其效率不高,开发者们开发了Libvirt ,它是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen 等其他虚拟机。使用 libvirt,只需要通过 libvirt 提供的函数连接到 KVM 或 Xen 宿主机,便可以用同样的命令控制不同的虚拟机了。Libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的命令—— virsh,你可以通过使用 virsh 命令来使用 libvirt 的全部功能。但最终用户更渴望的是图形用户界面,这就是 virt-manager。他是一套用 python 编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机,而Virt-manager 就是利用 libvirt 的 API 实现的。

三、环境部署篇

部署前准备:
#egrep ‘(vmx|svm)’ --color=always /proc/cpuinfo //确认支持vmx或svm
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
setenforce 0
systemctl stop firewalld.service
systemctl disable firewalld

官方文档:http://www.linux-kvm.org/page/RunningKVM

1)安装KVM基础环境:

yum -y install kvm python-virtinst libvirt tunctl bridge-utils virt-manager virt-install qemu-kvm qemu-kvm-tools virt-viewer openssh-askpass–skip-broken

或者:yum groupinstall “Virtualization” “Virtualization Client”“Virtualization Platform”
yum install qemu-kvm virt-manager libvirt

安装网桥管理工具:

yum install bridge-utils tunctl

创建网桥:

virsh iface-bridge eth0 br0

安装virtual-manager图像工具支持:

yum groupinstall “X Window System”

安装中文字符,解决界面乱码问题
yum install dejavu-lgc-sans-fonts -y
yum groupinstall “Fonts” -y

其中各组件功能如下:

组件名称功能说明
virtualization提供虚拟机的环境,主要包含qemu-kvm
virtualization-client管理和安装虚拟机实例的客户端,主要有python-virtinst,virt-manager,virt-viewer
virtualization-platform提供访问和控制虚拟客户端的接口,主要有libvirt,libvirt- client,libvirt用于管理KVM的工具
virtualization-tools管理离线虚拟机镜像的工具,主要有libguestfs
qeum-*虚拟不同的CPU,以及模拟网卡、声卡、PCI设备等
virt-install命令行安装虚拟机工具
virt-manager图形化管理虚拟机工具
openssh-askpass远程连接KVM主机
qemu-kvm主要的KVM程序包
python-virtinst创建虚拟机所需要的命令行工具和程序库
virt-managerGUI虚拟机管理工具,要用virt-manager图形化安装虚拟机,还需要安装X-window,
virt-top虚拟机统计命令
virt-viewerGUI连接程序,连接到已配置好的虚拟机
libvirtC语言工具包,提供libvirt服务,libvirt是管理虚拟机的API库,不仅支持KVM虚拟机,libvirt是Linux上的虚拟化库,是长期稳定的C语言API,支持KVM/QEMU、Xen、LXC等主流虚拟化方案
libvirt-client虚拟客户机提供的C语言工具包
virt-install基于libvirt服务的虚拟机创建命令
bridge-utils创建和管理桥接设备的工具,brctl命令管理网桥

2)启动libvirt管理KVM工具

加载kvm模块:modprobe kvm
验证:modprobe -ls | grep kvm

内核模块将导出了一个名为/dev/kvm的设备,这个设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间。

systemctl enable libvirtd.service
systemctl start libvirtd.service

默认kvm配置文件位置:/etc/libvirt/qemu/

3)创建磁盘空间文件

上传ios文件到对应目录,创建/opt/images(可以自定义位置)目录放置磁盘空间文件,用于安置kvm虚拟机。

KVM虚拟机中有两种磁盘格式:

raw格式: 直接占用物理磁盘, 写入快, 性能优, 但占用空间(默认格式)
Qcow2格式: 使用多少占多少磁盘, 支持压缩、快照、镜像

qemu-img create -f raw /kvm/test001.img 100g
qemu-img create -f qcow2 /kvm/test001.img 50G

4)时间同步配置

yum install -y wget ntpdate net-tools
ln -sf /usr/share/zoneinfo/Asia/Shanghai    /etc/localtime
/usr/sbin/ntpdate  cn.pool.ntp.org
echo "0 */3 * * * /usr/sbin/ntpdate cn.pool.ntp.org; /sbin/hwclock -w >/dev/null" >>/var/spool/cron/root

5)添加阿里云yun源和epel源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

6)优化内核参数:

修改最大进程数和最大文件打开数
vi /etc/security/limits.conf

  • soft nproc 65535 //noproc 是代表最大进程数
  • hard nproc 65535
  • soft nofile 65536 // 是代最大文件打开数
  • hard nofile 65536
    关闭当前shell,重新打开就生效,不需要重启系统

清空/etc/issue /etcissue.net,去除系统及内核版本登录前的屏幕显示

echo > /etc/issue
echo > /etc/issue.net

7)KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/
autostart目录是配置kvm虚拟机开机自启动目录

8)配置KVM的网桥模式
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br0

ifcfg-br0配置如下:

TYPE="Bridge"                                        //这一行修改为Bridge
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0"                                           //修改设备名称为br0
#UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"         //这一行注释
DEVICE="br0"                                         //修改设备为br0
ONBOOT="yes"
IPADDR="192.168.10.210"
PREFIX="24"
GATEWAY="192.168.10.1"
DNS1="8.8.8.8"

ifcfg-ens32配置如下:

TYPE="Ethernet"
BRIDGE=br0                                           //添加这一行
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eno1"
UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"
DEVICE="eno1"
ONBOOT="yes"
#IPADDR="192.168.10.210"                          //注释掉这几行,即正常网卡里不在写ip信息
#PREFIX="24"
#GATEWAY="192.168.10.1"
#DNS1="8.8.8.8"

ystemctl restart network后验证;
brctl show

9)创建一个虚拟机

qcow2 格式

virt-install --name test01 --ram 4096 --vcpu=1 --disk path = /kvm/test001.img,\
format=qcow2,bus=virtio --accelerate --cdrom /kvm-images/*** .iso \
--vnc --vncport=5910 --vnclisten=0.0.0.0 --network bridge=br0,model=virtio --noautoconsole

实例:
virt-install --name suse11sp4 --ram 1024 --cdrom=/tmp/SLES-11-SP4-DVD-i586-GM-DVD1.iso --disk path=/tmp/image/suse11.qcow2,format=qcow2 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --check all=off

创建成功后:virsh vncdisplay suse11sp4查看虚拟机连接端口,用vnc连接。

raw格式的镜像

virt-install --name test01 --ram 4096 --vcpu=1 --disk path = /kvm/test001.img,bus=virtio \
--accelerate --cdrom /kvm-images/*** .iso --vnc --vncport=5910 --vnclisten=0.0.0.0 \
--network bridge=br0,model=virtio --noautoconsole

########

–name 虚拟机的名称

–ram 4096 内存大小

–vcpu=1 cpu个数

–disk path = /kvm/test001.img,farmat=qcow2,bus=virtio 硬盘路径 格式qcow2 bus总线

–accelerate --cdrom /kvm-images/*** .iso 光盘安装

–vnc --vncport=5910 vnc 的端口

–vnclisten=0.0.0.0

–network bridge=br0,model=virtio 网络 使用网桥

–noautoconsole

10)动态添加硬盘:

qemu-img create -f qcow2 /kvm/test001_add.img 50G

virsh attach-disk test001 /kvm/test001_add.img vdb --cache none 动态的添加磁盘

而xml配置文件并没有发生变化,为了防止下次启动添加的磁盘失效,进行如下操作:

virsh dumpxml tomcat_01 > tomcat_01.xml 将最新的虚拟机配置重定向到其配置文件中 virsh define tomcat_01.xml 新增的磁盘就不会丢了

四、虚拟机管理

1)virsh命令

ibvirt有两种控制方式,命令行和图形界面,其中virt-manager为图像管理工具,启动libvirt的图形界面,在图形界面下可以一步一步的创建虚拟机,管理虚拟机,还可以直接控制虚拟机的桌面。

virsh list #显示本地活动虚拟机 //一个虚拟机就是一个域,虚拟机的id也称为域id;

virsh list --all #显示本地所有的虚拟机(活动的+不活动的)

virsh define ubuntu.xml #通过配置文件定义一个虚拟机(这个虚拟机还不是活动的)

virsh start ubuntu #启动名字为ubuntu的非活动虚拟机

virsh autostart oeltest01 配置开机自启动虚拟机

virsh autostart —disable Name /关闭虚拟机随系统启动

virsh create ubuntu.xml # 创建虚拟机(创建后,虚拟机立即执行,成为活动主机)

virsh create /etc/libvirt/qemu/wintest01.xml通过配置文件启动虚拟机

virsh dumpxml wintest01 > /etc/libvirt/qemu/wintest02.xml 导出KVM虚拟机配置文件

virsh suspend ubuntu # 暂停虚拟机

virsh resume ubuntu # 启动暂停(恢复)的虚拟机

virsh shutdown ubuntu # 正常关闭虚拟机

virsh destroy ubuntu # 强制关闭虚拟机

virsh undefine wintest01 该命令只是删除wintest01的配置文件,并不删除虚拟磁盘文件

彻底删除KVM虚拟机文件: rm -f /home/vps/虚拟机的虚拟磁盘文件.img

virsh dominfo ubuntu #显示指定虚拟机的基本信息

virsh domname 2 # 显示id号为2的虚拟机名

virsh domid ubuntu # 显示虚拟机id号

virsh domuuid ubuntu # 显示虚拟机的uuid

virsh domstate ubuntu # 显示虚拟机的当前状态

virsh nodeinfo:查看KVM节点(服务器)信息

virsh console 虚拟机名 //使用文本的方式连接虚拟机

虚拟机和宿主机之间的切换 ctrl+】 (右方括号)

virsh dumpxml ubuntu # 显示虚拟机的当前配置文件(可能和定义虚拟机时的配置不同,因为当虚拟机启动时,需要给虚拟机分配id号、uuid、vnc端口号等等)

virsh setmem ubuntu 512000 #给不活动虚拟机设置内存大小

virsh setvcpus ubuntu 4 # 给不活动虚拟机设置cpu个数

virsh edit ubuntu # 编辑虚拟机配置文件(一般是在刚定义完虚拟机之后)

2)VM虚拟机扩容

KVM虚拟机中有两种磁盘格式:

raw格式: 直接占用物理磁盘, 写入快, 性能优, 但占用空间
Qcow2格式: 使用多少占多少磁盘, 支持压缩、快照、镜像
注意:raw不支持快照, Qcow2支持快照, 但两者文件类型是可以相互间转换

无论磁盘是raw qcow2格式, 扩展思路如下

1.新添加一块磁盘加入至需要扩容的虚拟主机
2.使用lvm逻辑卷管理方式进行扩展

1)查看当前KVM虚拟机所使用的虚拟磁盘
virsh domblklist centos7u4-node1

2)创建一块qcow2虚拟磁盘
qemu-img create -f qcow2 /data/centos7u4-node1-disk2.qcow2 10G

3)在线添加虚拟磁盘
//在线添加
virsh attach-disk centos7u4-node1 /data/centos7u4-node1-disk2.qcow2 vdb --cache=none --subdriver=qcow2

Disk attached successfully

4)修改配置文件,防止重启kvm后新加磁盘丢失, 新增如下配置
virsh edit centos7u4-node1编辑新增以下内容

//这里写新增的盘 5)通过vnc连接KVM虚拟机进行磁盘扩容 6)扩容步骤如下,直接把vdb全部加到逻辑分区里面

mkfs.xfs /dev/sdb #格式化新硬盘

pvcreate /dev/vdb #初始化物理卷

vgextend centos /dev/vdb #将初始化过的分区加入到虚拟卷组centos (卷和卷组的命令可以通过 vgdisplay )

lvextend -l +100%FREE /dev/centos/root   扩展已有卷的容量是通过vgdisplay查看的free的大小)

xfs_growfs /dev/centos/root # CentOS 7 下面 由于使用的是 XFS,

resize2fs /dev/mapper/centos-root # CentOS 6 下面 由于使用的是 XFS

3)VM虚拟机性能调整

调大内存、增加cpu个数
virsh shutdown vm //关闭虚拟机后编辑虚拟机配置文件,修改
virsh edit test01 //找到内存,cpu配置选项卡memory”和“vcpu”标签

<name>test01</name>

  <uuid>2220a6d1-a36a-4fbb-8523-e078b3dfe795</uuid>

  <memory unit='KiB'> 1048576</memory>

  <currentMemory unit='KiB'> 1048576</currentMemory>

  <vcpu placement='static'>1</vcpu>

改为:

<name>centos73</name>

  <uuid>2220a6d1-a36a-4fbb-8523-e078b3dfe795</uuid>

  <memory unit='KiB'> 2097152</memory>    //调整

  <currentMemory unit='KiB'> 2097152</currentMemory>

  <vcpu placement='static'>2</vcpu>     //调整

重定义使配置生效 :#virsh define /etc/libvirt/qemu/test01.xml
开启虚拟机:#virsh start test01

4)kvm克隆

1>KVM主机本机虚拟机直接克隆(克隆机器必须是关机状态)

virt-clone -o z7-013-251-template -n test01 -f /kvm/test01.img

说明:以z7-013-251-template做为源,克隆test01虚拟机,并创建名称为test01虚拟机,使用磁盘文件/kvm/test01.img

virsh start test01 #启动test01
配置开机自启动虚拟机:virsh autostart test01
virt-manager进入克隆的虚拟机,修改克隆机器的IP地址(事先ping一下,确认IP可以使用,不要和其他IP冲突), 修改hostname主机名等,测试模板机(修改时区,时间同步,关闭selinux,关闭防火墙,关闭postfix服务)

2>通过图形化界面克隆

在宿主服务器中输入命令virt-manager,唤出图形界面

打开操作界面,右击现有的虚拟机进行克隆;打开修改配置,相应网段的地址,选择相应vlan;在宿主机上修改磁盘文件名称
#mv /kvm/z7-013-253-disk-001-clone.img /kvm/test01.img
#sed -i ‘s@/kvm/z7-013-253-disk-001-clone.img@/kvm/test01.img@’ /etc/libvirt/qemu/test01.xml

3>删除虚拟机或者图形化界面操作
关闭虚拟机:virsh destroy test01
删除虚拟机文件(在/var/lib/libvirtd/下的相关文件)
删除定义:virsh undefine test01
virsh autostart --disable test01
如果提示Requested operation is not valid: cannot delete inactive domain with 1 snapshots
说明之前有做过快照,需要先删除快照
virsh snapshot-list --domain test01
virsh snapshot-delete --domain test01 --snapshotname SNAPSHOT_NAME

4>kvm虚拟机迁移
迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移。

跨宿主机迁移:确定虚拟机关闭状态
准备迁移test01虚拟机,查看该虚拟机配置的磁盘文件
virsh domblklist test01
导入虚拟机配置文件

#virsh dumpxml test01 > /root/test01.xml

Scp 拷贝配置文件和虚拟磁盘文件到目标虚拟主机对应位置上

目标虚拟主机上

查看虚拟机磁盘文件,目录结构与源虚拟主机一致。

定义注册虚拟主机

virsh define /etc/libvirt/qemu/test01.xml

启动虚拟主机并确认

5>kvm虚拟机快照备份要使用镜像功能,磁盘格式必须为qcow2

查看磁盘格式:qemu-img info test01.img
对虚拟机进行快照管理:virsh snapshot-create test01 //虚拟机创建快照

查看虚拟机镜像快照的版本:virsh snapshot-list test01
查看当前虚拟机镜像快照的版本:virsh snapshot-current test01

恢复虚拟机快照,必须关闭虚拟机

执行恢复,并确认恢复版本:#virsh snapshot-revert test01 版本号

删除虚拟机快照:virsh snapshot-delete test01 版本号

附录:

  1. noKvm
    http://bbs.tasiyun.com/
    noKvm是一款强大的基于Web的虚拟化控制面板。 管理员可以通过点击按钮即时创建主机,用户可以使用非常高级的基于Web的GUI来启动,停止,重新启动和管理他们的主机。 用户和管理员可以更好地管理其资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羌俊恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值