KVM 虚拟机管理和基本使用

KVM 虚拟化环境部署和管理方法

KVM 简介
KVM — 全称是基于内核的虚拟机(Kernel-based Virtual Machine)
是一个开源软件,基于内核的虚拟化技术,实际是嵌入系统的一个虚拟化模块,通过
优化内核来使用虚拟技术,该内核模块使得Linux 变成了一个Hypervisor,虚拟机使用Linux自身的调度器进行管理。

KVM 是基于虚拟化扩展(Intel VT 或者AMD-V)的X86 硬件的开源的Linux 原生
的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的Linux 进程,由标准Linux 调度
程序进行调度;虚机的每个虚拟CPU 被实现为一个常规的Linux 进程。这使得KVM 能
够使用Linux 内核的已有功能。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过/dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是QEMU。

QEMU 是一套由Fabrice Bellard 所编写的模拟处理器的自由软件。它与Bochs,PearPC 近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由kqemu 这个开源的加速器,QEMU 能模拟至接近真实电脑的速度。

libvirt 是管理虚拟机和其他虚拟化功能的软件,比如存储管理,网络管理的软件集合。它包括一个API 库,一个守护程序(libvirtd)和一个命令行工具(virsh);libvirt 本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的API。libvirt的主要目标是为各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式。

注意:我们通常所说和使用的KVM 虚拟机,实际上是这三个软件的结合

安装kvm、qemu、libvirtd:
查看和打开CPU 虚拟化支持:

egrep "(svm|vmx)" /proc/cpuinfo #查看cpu 是否支持虚拟化
注:
vmx 对应inter 的cpu
svm 对应amd 的cpu
需在主板bios 打开虚拟化选项,多数计算机默认处于打开状态

查看内核kvm 支持

lsmod|grep kvm

安装所需软件包

apt-get install libvirt0 libvirt-daemon qemu virt-manager bridge-utils libvirt-clients
python-libvirt qemu-efi uml-utilities virtinst qemu-system

#安装KVM 和相关虚拟化工具
启动libvirtd

systemctl restart libvirtd.service #启动libvirtd
systemctl status libvirtd.service #查看启动状态

两种管理虚拟机的方法:
virt-manager 是图形化方式,相对直观。
virsh 是命令行方式

KVM 配置与应用

virsh 命令行管理工具详解

virsh(虚拟shell),基于命令行的管理工具,可以实现简单的资源管理。支持交互模式
virsh shutdown deepin1 #正常关闭vm 虚拟机
virsh start deepin1 #启动kvm 虚拟机
virsh destroy deepin1 #强制关闭kvm 虚拟机
virsh list #显示本地活动虚拟机
virsh list --all #查看所有虚拟机
virsh suspend deepin1 #挂起kvm 虚拟机
virsh resume deepin1 #恢复被挂起虚拟机
virsh dominfo deepin1 #查看指定虚拟机的配置摘要信息
virsh undefine deepin1 #删除kvm 虚拟机(如果虚拟机处于runing,一旦关闭就会消失)
virsh dumpxml deepin1 #显示虚拟机的当前配置文件
virsh define deepin2.xml #通过配置文件定义一个虚拟机(这个虚拟机还不是活动的)
virsh autostart deepin1 #虚拟机设为自动启动(成/etc/libvirt/qemu/autostart/)
virsh autostart --disable deepin1 #取消自动启动
virsh edit deepin1 #编辑配置文件(一般是在刚定义完虚拟机之后)
virsh setmem deepin1 512000 #给虚拟机设置内存大小
virsh setvcpus deepin1 4 #给虚拟机设置cpu 个数

qemu-img 是一个功能强制磁盘镜像管理工具

qemu-img --help 包括以下功能
check 检查完整性
create 创建镜像
commit 提交更改
compare 比较
convert 转换
info 获得信息
map 映射
snapshot 快照管理
rebase 在已有的镜像的基础上创建新的镜像
resize 调整大小
amend 修订镜像格式选

使用命令行部署虚拟机

第1步,使用WinSCP工具或其他工具连接到KVM主机
第2步,上传CentOS-7-x86_64-Minimal-1708.iso文件到vm-iso目录(这个目前可以自定义,想传那里传那里)。
第3步,使用命令“chmod”修改vm-iso目录权限,如果不修改目录权限,后续在安装虚拟机过程中挂载ISO文件可能会出现问题。
第4步,使用命令“qemu-img”创建虚拟机硬盘文件并查看硬盘信息,如果未创建磁盘文件,在安装虚拟机过程中可以创建。

[root@localhost vm-centos7]# qemu-img create -f raw centos7.raw 10G
Formatting 'centos7.raw', fmt=raw size=10737418240 
[root@localhost vm-centos7]# qemu-img info centos7.raw
image: centos7.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 0

参数解释如下。
1)raw:虚拟机硬盘使用的格式。
2)10G:虚拟机硬盘使用的容量。

第5步,使用命令“virt-install”创建虚拟机并安装Linux操作系统。

[root@localhost vm-centos7]# virt-install  --name centos7 --vcpus 1 --ram 2048 --location=/ vm-iso/CentOS-7-x86_64-Minimal-1708.iso --disk path=/vm-centos7/centos7.raw,size=10,format=raw  --network bridge=virbr0 --os-type=linux --os-variant=rhel7 --extra-args='console=ttyS0' --noautoconsole --force

参数解释如下。1)name:指定虚拟机名称。
2)vcpus:指定虚拟机使用的CPU数量。
3)ram:指定虚拟机使用的内存大小,单位为MB。
4)location:指定虚拟机安装操作系统调用ISO文件的路径。
5)disk:指定虚拟机安装操作系统使用的硬盘。
6)network:指定虚拟机使用的网络。
7)os-type:指定虚拟机使用的操作系统,Windows或Linux。
8)os-variant:指定虚拟机具体使用的操作系统版本,如rhel7代表Red Hat Enterprise Linux 7。
(–os-variant参数支持的os可以通过如下命令查看:osinfo-query os)
9)extra-args:指定安装时控制的工具,注意不能与vnc混用。
10)noautoconsole:指定不使用自动控制台,如果不使用该参数,可能出现“ERROR unsupported format character '0xffffffe7) at index xx”等错误提示,但不会影响虚拟机的安装。

第6步,执行命令后,如果参数设定没有问题,会出现下列提示。如果未出现“开始安装”或者其他提示,请检查参数设定是否正确。

第7步,虚拟机centos7已经开始安装。如何进行安装控制操作呢?可以通过命令行和VNC工具连接到虚拟机进行控制。先使用命令行进行安装操作,而后使用命令“virsh console centos7”连接到虚拟机控制台,控制台是纯命令操作界面。

注意:带 [!] 的参数是需要配置的,配置完成后按“b”键开始安装操作系统。如果参数没有设定正确,按“b”键不会安装操作系统,需要继续设定参数。

输出界面的参数解释如下:
1)Language settings:设定安装语言。
2)Time settings:设定时区。
3)Installation source:设定安装源。
4)Software selection:选择安装的软件包。
5)Installation Destination:选择安装目的硬盘。
6)Kdump:内核崩溃转储机制,使用默认配置即可。
7)Network configuration:设定网络。
8)Root password:设定root用户密码。
9)User creation:创建新的用户

第8步,输入数字2进入Time settings,可以选择手动设定时区,也可以配置NTP服务器,根据实际情况进行设定即可。

第9步,选择需要设定的时区,输入数字2选择Asia。(参数不同的发行版系统可能不同,按需选择即可)

第10步,选择时区所在城市,输入数字64选择Shanghai。

第11步,时区配置完成后回到主配置界面,可以看到Time settings选项由原来未配的 [!]状态变为[x]状态,说明已配置,同时下面会显示配置的相关参数“Asia/Shanghai timezone”。

第12步,其他配置选项的操作方式与Time settings基本一致,配置完成后按“b”键,开始操作系统的安装,安装完成后会重启。

第13步,使用命令“virsh start centos7”启动虚拟机,再使用“virsh console centos7”命令连接到虚拟机控制台。

第14步,使用命令“ip addr”查看虚拟机IP地址,注意IP地址目前为自动获取的地址,可以通过KVM主机访问外部网络。使用快捷键ctrl+]可以从虚拟机控制台退回到KVM主机命令行界面。

使用VNC安装Linux虚拟机(可以通过vnc方式可视化安装)

这里不做描述,因为使用virt-manager工具,感觉是一样的

使用模板部署虚拟机(批量部署虚拟机)

如果是需要使用集群管理,可以使用ovirt平台,这里使用配置文件批量部署,这是在个人的实验环境中,学习测试使用

理解KVM虚拟机硬盘镜像格式:RAW格式:KVM虚拟机原始的硬盘镜像格式,性能好但功能简单。使用RAW格式会占用大量的存储空间,如创建了10GB空间直接使用10GB空间,不管安装的操作系统究竟使用了多少。QCOW2格式:新型的KVM虚拟机硬盘镜像格式,性能一般但功能多。使用QCOW2格式可减少实际使用空间,类似于精简置备,如创建了10GB空间,操作系统只使用了5GB空间,那么实际使用空间就是5GB。

Backing file的作用:KVM中的Backing file,可以翻译为后备镜像。后备镜像简单来说就是多台虚拟机共用一个镜像文件。我们以场景应用的方式来解释Backing file的作用。

场景:如前文所述,现已安装好一台centos7虚拟机,使用RAW格式10GB,假设实际使用5GB,现在想快速再创建20台,注意,是快速创建,不是一台一台重新安装。
方案1:复制安装好的centos7虚拟机RAW硬盘,修改虚拟机配置,20台虚拟机共有200GB使用空间。
方案2:将centos7虚拟机RAW硬盘作为Backing file,再创建20份QCOW2格式的镜像,修改虚拟机配置文件,20台虚拟机原始使用10GB空间,后续数据写入时再增加空间。
很明显,使用方案1复制文件需要大量时间,使用方案2不需要大量复制数据就可以部署虚拟机,同时减少了空间的使用,这就是Backing flie的作用

复制Linux虚拟机硬盘镜像创建虚拟机

第1步,使用命令“virsh list --all”查看KVM主机上的虚拟机信息,centos7虚拟机处于关闭状态。作为模板的虚拟机需要在关闭的状态下,才可以进行操作
第2步,使用命令“ls”查看虚拟机硬盘镜像文件,可见其使用的是RAW格式。(RAW格式不支持Backing flie)
第3步,调整参数,将RAW格式调整为QCOW2格式,使用命令“qemu-img create -f qcow2 -b centos7.raw centos7-04.qcow2”创建新的虚拟机硬盘镜像,注意格式为QCOW2。
第4步,使用命令“qemu-img info centos7-04.qcow2”查看硬盘镜像文件信息,硬盘镜像文件格式为QCOW2。

通过复制虚拟机硬盘镜像文件创建新的虚拟机硬盘镜像文件完成,但是虚拟机还不能使用,还需要对虚拟机的配置文件进行一些操作才能使用。

第5步,使用命令“ls /etc/libvirt/qemu/”查看现有虚拟机的配置文件,虚拟机配置文件就是.xml文件。注意,KVM主机虚拟机配置文件位于/etc/libvirt/qemu。

第6步,使用命令“cp /etc/libvirt/qemu/centos7.xml /etc/libvirt/qemu/centos7-04.xml”复制原centos7虚拟机配置文件,重新命名为centos7-04.xml。

第7步,使用命令“vi /etc/libvirt/qemu/centos7-04.xml”编辑配置文件,因为复制的是centos7的配置文件,虚拟机uuid、硬盘镜像路径以及MAC地址等均需要修改,否则新创建的虚拟机无法启动,虚拟机uuid和MAC地址推荐删除后重新生成。

root@kvm-server:/vm-linux# vi /etc/libvirt/qemu/centos7-04.xml
<domain type='kvm'>
  <name>centos7</name>  #虚拟机名
  <uuid>632d4cc5-2146-4222-826e-08fae04d847b</uuid>  #虚拟机uuid,推荐删除后重新生成
  <memory unit='KiB'>2097152</memory>    #虚拟机内存
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>1</vcpu>  #虚拟机VCPU
<devices>
    <emulator>/usr/bin/kvm-spice</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>    #虚拟机硬盘镜像格式,注意格式的修改
      <source file='/vm-ubuntu/ubuntu.raw'/>  #虚拟机硬盘镜像路径,注意路径的修改
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
<interface type='bridge'>
      <mac address='52:54:00:ad:3f:69'/>  #虚拟机MAC地址,推荐删除后重新生成
      <source bridge='virbr0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

第7步,修改完配置文件后,使用命令“virsh define /etc/libvirt/qemu/centos7-04.xml”注册虚拟机。

第8步,注册完成后,使用命令“virsh list --all”查看虚拟机是否注册成功,注册成功后centos7-04虚拟机处于关闭状态。使用命令“virsh start centos7-04”启动虚拟机。使用命令“virsh console centos7-04”连接到虚拟机控制台 如果虚拟机配置文件正确,虚拟机会正常启动,并出现启动自检等信息;如果配置文件存在问题,虚拟机控制台不会有其他显示,请关闭虚拟机电源后检查配置文件。

第9步,尝试启动centos7模板虚拟机,使用命令“virsh start centos7”后会出现错误提示,提示无法启动,因为已将centos7虚拟机硬盘镜像作为backing file文件。

如果需要批量安装windows系统,操作步骤是一样的。

RAW/QCOW2格式常见操作

第1步,进行格式转换前需要关闭虚拟机电源,使用命令“virsh list --all”查看虚拟机运行状态。
第2步,使用命令“qemu-img convert -f raw -O qcow2 win7-kvm.raw win7-kvm.qcow2”进行格式转换。
第3步,使用命令“virsh edit win7-kvm”编辑虚拟机的配置文件,修改硬盘文件格式和路径。
第4步,使用命令“virsh start win7-kvm”启动虚拟机进行验证。

虚拟机硬盘扩容

(1)Windows虚拟机硬盘扩容
第1步,增加硬盘容量前需要关闭虚拟机电源,使用命令“virsh shutdown win7-kvm”关闭虚拟机电源。

第2步,使用命令“qemu-img resize win7-kvm.qcow2 +10G”增加10GB硬盘容量。

第3步,使用命令“qemu-img info win7-kvm.qcow2”验证容量是否增加。

第4步,使用命令“virsh start win7-kvm”启动虚拟机,同时使用VNC Viewer连接到虚拟机进行查看有没有新增容量,Windows操作系统可以通过扩展卷的方式将新容量添加到C盘

(2)Linux虚拟机硬盘扩容
第1步,使用命令“fdisk -l”查看虚拟机硬盘信息
第2步,关闭Linux虚拟机电源,在KVM主机上使用命令“qemu-img info centos7- 04.qcow2”查看虚拟机硬盘信息,对容量进行调整。
第3步,使用命令“qemu-img resize centos7-04.qcow2 +5G”增加5GB硬盘容量。
第4步,在KVM主机上使用命令“virsh start centos7-04”打开虚拟机电源。使用命令“virsh console centos7-04”连接到虚拟机控制台。使用命令“fdisk -l”查看虚拟机硬盘信息,可以看到/dev/vda容量有变化,说明硬盘扩容成功。
第8步,使用命令“df -Th”查看各分区的容量情况,硬盘扩容后的容量还未应用到分区。使用命令“fdisk /dev/vda”命令删除根分区进行重建。使用命令“partprobe /dev/vda”激活容量。使用命令“xfs_growfs /dev/vda3”刷新容量(这个命令要看使用的文件系统格式,如果使用的ext4则命令有所不同)。最后在查看一下分区。(注意这里的home等其他目录是在根目录下的,如果是安装系统是有手动分区的情况,则扩展容量是不同的操作方式)

虚拟机快照建立的方式

快照(raw 格式的磁盘无法创建快照)

#qemu-img snapshot -l /kvm/img/test12.qcow2 #查看磁盘快照
virsh snapshot-list test12 #查看快照
virsh snapshot-create test12 #生成快照
virsh snapshot-create-as test12 snap1 #自定义快照名
virsh snapshot-revert test12 snap1 #快照恢复虚拟机
virsh snapshot-delete test12 snapname #删除指定快照
virsh snapshot-current test12

项目实战

1. 使用命令行工具创建虚拟机
用法: virt-install --name NAME --memory MB STORAGE INSTALL [options]
用途:从指定安装源创建新虚拟机。
示例
创建镜像文件

qemu-img create -f qcow2 -o size=20G /data/kvm/deepin-server3.qcow2

通过cdrom 镜相引导安装系统:

virt-install -n deepin-server3 --vcpus 2 -r 4096 -c
/home/yanght/ISO/uniontechos-desktop-20-professional-1021_amd64.iso --disk
/data/kvm/deepin-server3.qcow2,bus=virtio,size=20 --graphics vnc,listen=0.0.0.0 --network
bridge=virbr0,model=virtio

2. 利用已有的虚拟机配置文件创建新的虚拟机
把deepin2 当做模板机,提取deepin2 的虚拟机磁盘、xml 配置文件

qemu-img info /var/lib/libvirt/images/deepin2.qcow2

输出:

image: /var/lib/libvirt/images/deepin.qcow2
file format: qcow2
virtual size: 64G (68719476736 bytes) #虚拟机磁盘容量
disk size: 8.1G #在KVM 服务器占用容量
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
refcount bits: 16
corrupt: false

复用deepin2 模板机的磁盘数据

qemu-img create -f qcow2 -b /var/lib/libvirt/images/deepin2.qcow2
/var/lib/libvirt/images/deepin4.qcow2

复制配置

cd /etc/libvirt/qemu/
cp deepin2.xml deepin4.xml

修改配置文件
vim deepin4.xml

<name>deepin4</name> #新虚拟机名称
<uuid>da2478f0-abf0-11ea-a912-6f46e76df6b1</uuid> #新UUID 值
<disk type='file' device='disk'> #文件类型
<driver name='qemu' type='qcow2'/> #磁盘类型
<source file='/var/lib/libvirt/images/deepin4.qcow2'/> #新虚拟卷位置
<target dev='hda' bus='ide'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
</controller>
<interface type='network'> #虚拟机的网络接口类型
#删除MAC 地址
<source network='network1'/> #虚拟机的网卡的源网络名称
<model type='e1000'/>

根据配置文件定义虚拟机

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

查看所有虚拟主机
virsh list --all

Id Name State
-----------------------
- deepin2 shut off
- deepin4 shut off

开启deepin 虚拟机

virsh start deepin4

3. 使用命令行工具完成磁盘设备的热插拔
virsh attach-disk (添加磁盘设备)
用法:

attach-disk <domain> <source> <target> [--targetbus <string>] [--driver <string>]
[--subdriver <string>] [--iothread <string>] [--cache <string>] [--io <string>] [--type <string>]
[--mode <string>] [--sourcetype <string>] [--serial <string>] [--wwn <string>] [--alias <string>]
[--rawio] [--address <string>] [--multifunction] [--print-xml] [--persistent] [--config] [--live]
[--current]

示例:
1、用qemu-img 创建一块100G 的qcow2 硬盘

SOURCEFILE=/data/kvm/deepin-server1-disk1.qcow2
qemu-img create -f qcow2 $SOURCEFILE 20G

2、附加磁盘到指定虚拟机

DOMAIN=deepin-server1
TARGET=sdb
virsh attach-disk --domain $DOMAIN --source $SOURCEFILE --target $TARGET
--subdriver qcow2 --config --live

$DOMAIN:想要挂载数据盘文件的虚拟机名
$TARGET:一般为vdb,vdc…
–subdriver:这一项是必须的,如果不加的话,虚拟机不知道镜像文件的格式,挂载
就会失败。
Virsh detach-disk (删除磁盘设备)
用法:

detach-disk <domain> <target> [--persistent] [--config] [--live] [--current] [--print-xml]

示例:

virsh detach-disk deepinserver1 sdb

输出:

Disk detached successfully
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值