KVM

KVM,Kernel-based Virtual Machine

Linux下内核虚拟化模块

qcow2:虚拟机文件格式,写时复制,Copy on write

libvirt:虚拟机管理库

虚拟化优点:提高资源利用率,资源灵活弹性分配

其他概念待补充。。。

一、安装

虚拟机安装前检测:

#查看是否装载KVM模块
lsmod |grep kvm
#查看CPU是否支持Intel或AMD虚拟技术
cat /proc/cpuinfo |grep -E "vmx|svm"

KVM安装:

#安装
yum install qemu-kvm libvirt virt-install libvirt-python virt-manager libvirt-client virt-viewer -y
#启动服务
systemctl start libvirtd
#设置开机启动
systemctl enable libvirtd

相关文件保存位置:

#1.虚拟机文件保存位置
ls /var/lib/libvirt/images/虚拟机名.qcow2
  #查看虚拟机文件信息
  qemu-img info /var/lib/libvirt/images/虚拟机名.qcow2
#2.虚拟机配置文件
#第二种方式使用vi打开,没有高亮,可以创建vim软链接到vi解决
ls /etc/libvirt/qemu/虚拟机名.xml
virsh edit 虚拟机名
#3.网络配置文件
ls /etc/libvirt/qemu/networks/

二、虚拟机操作

1.基本操作

#1.查看虚拟机
virsh list
virsh list --all
#2.启动
virsh start 虚拟机名
#3.关机
virsh shutdown 虚拟机名
virsh destroy 虚拟机名
#4.重启
virsh reboot 虚拟机名
virsh reset 虚拟机名
#5.暂停与继续
virsh suspend 虚拟机名
virsh resume 虚拟机名
#6.导入与删除虚拟机配置
virsh define 虚拟机配置文件.xml
virsh undefine 虚拟机配置文件.xml
#7.保存与还原(?)
virsh save kvm0 /tmp/kvm0.save
virsh restore /tmp/kvm0.save 

2.创建虚拟机

virt-install  --name "kvm2" --memory 2048,maxmemory=4096 --vcpus 2,maxvcpus=4 --disk=/var/lib/libvirt/images/kvm2.qcow2,size=50 -l /soft/CentOS-7-x86_64-DVD-1810.iso --network bridge=virbr0

3.删除虚拟机

#1.关闭虚拟机
virsh shutdown 虚拟机名
#2.取消定义,也就是删除配置文件
virsh undefine 虚拟机名
#3.删除磁盘文件
rm -rf /var/lib/libvirt/images/虚拟机名.qcow2

4.克隆虚拟机

注意:克隆前需要关机或者暂停被克隆机器

#方式一:指定虚拟机文件保存位置
virt-clone -o kvm0 -n kvm0Clone -f /var/lib/libvirt/images/kvm0Clone.qcow2 
#方式二:使用默认保存位置
virt-clone -o kvm0 -n kvm0Clone --auto-clone

5.快照

#0.查看帮助
virsh help snapshot
#1.查看快照列表
virsh snapshot-list kvm0
#2.创建快照
virsh snapshot-create-as --domain kvm0 snap1 --description "test snapshot"
#3.还原快照
virsh snapshot-revert kvm0 snap1
#4.删除快照
virsh snapshot-delete kvm0 snap1

三、连接虚拟机

方式一:宿主机打开管理器

virt-manager
virt-viewer 虚拟机名

方式二:

console连接虚拟机

#1.虚拟机配置授权 (虚拟机、虚拟机、虚拟机)
grubby --update-kernel=ALL --args="console=ttyS0"
reboot
#2.宿主机连接
virsh console 虚拟机名
#***注意:退出console 需要使用 ctrl + ]  ***

方式三:

为虚拟机配置IP,然后SSH

四、网络

1.基本操作

网络配置文件保存位置:/etc/libvirt/qemu/networks/

#0.查看帮助
virsh help network
#1.查看网络
virsh net-list
virsh net-list --all
#2.查看网络信息
virsh net-info default
#3.查看网络配置文件
virsh net-edit default
/etc/libvirt/qemu/networks/default.xml
#4.关闭网络
virsh net-destroy default
#5.启动网络
virsh net-start default
#6.设置开机启动
virsh net-autostart network1

2.创建网络

①创建isolated网络

第一步:创建配置文件,根据需求进行修改

# vim /etc/libvirt/qemu/networks/network1.xml
<network>
  <name>network1</name>
  <uuid>9c1c96b2-2a8f-46de-b8c0-79c42626167f</uuid>
  <bridge name='virbr1' stp='on' delay='0'/>
  <mac address='52:54:00:fd:0c:fc'/>
  <domain name='network1'/>
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.10' end='192.168.100.254'/>
    </dhcp>
  </ip>
</network>

第二步:启用

virsh net-define /etc/libvirt/qemu/networks/network1.xml
virsh net-start network1
virsh net-autostart network1

②创建Bridge网络

#1.关闭NetworkManager
systemctl stop NetworkManager
#2.修改默认网卡
vim /etc/sysconfig/network-scripts/ifcfg-enp0s25
DEVICE="enp0s25"
ONBOOT="yes"
BRIDGE=br0

#3.创建br0网卡
vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.39.166
NETMASK=255.255.255.0
GATEWAY=192.168.39.1
DNS1=8.8.8.8
DNS2=114.114.114.114
ONBOOT=yes
#3.重启网络
systemctl restart network
#4.查看
ifconfig br0
ifconfig enp0s25

虚拟机选择相关网卡既可使用

3.修改网络

#编辑配置文件,根据需要进行修改
virsh net-edit network1
#重启该网络
virsh net-destroy network1
virsh net-start network1

4.删除网络

virsh net-destroy network1
virsh net-undefine network1

五、设备管理

图形化操作 (略)

添加磁盘是注意:Device model选择 virtio,动态修改不需要重启

命令添加磁盘Disk

#1.查看磁盘信息
virsh domblklist kvm0
#2.创建磁盘文件
qemu-img create -f qcow2 /var/lib/libvirt/images/kvm0-2.qcow2 1G
#3.查看创建的磁盘文件,格式是否为 qcow2
qemu-img info /var/lib/libvirt/images/kvm0-2.qcow2
#4.添加到虚拟机   --target 表示磁盘名称
virsh attach-disk kvm0 --source /var/lib/libvirt/images/kvm0-2.qcow2 --target vdb --subdriver qcow2
#5.验证是否添加成功
virsh domblklist kvm0
#6.删除磁盘
virsh detach-disk kvm0 vdb

六、镜像

qcow2

Copy on write 写时复制技术,第二代的QEMU写时复制格式

特点:支持稀疏文件(先占上,用多少算多少),支持AES加密,支持Snapshot,支持后背镜像

1.基本操作

创建磁盘镜像

#1.查看镜像信息
qemu-img info filename
#2.创建raw
qemu-img create filename.raw 1G
#3.创建qcow2
qemu-img create filename.qcow2 -f qcow2 1G

磁盘格式转换

# raw => qcow2
qemu-img convert -p -f raw -O qcow2 filename.raw filename.qcow2
# qcow2 => raw
qemu-img convert -p -f qcow2 -O raw filename.qcow2 filename.raw

2.操作虚拟机镜像工具

libguestfs

使用libguestfs可以直接管理镜像文件

安装软件

yum install libguestfs-tools-c

编辑镜像前需要关闭虚拟机

virsh destroy kvm0Clone

对虚拟机进行操作

#guestfish --rw -a /var/lib/libvirt/images/kvm0Clone.qcow2

><fs> run                     #加载虚拟机镜像
><fs> list-filesystems        #查看镜像中文件系统
/dev/sda1: xfs                
/dev/centos/root: xfs        
/dev/centos/swap: swap
><fs> mount /dev/centos/root / #挂载到根目录
><fs> vi /etc/passwd           #比如root忘记,我们可以删除第二列的x来清空密码
><fs> quit

guestmount

直接把虚拟机镜像文件挂载到宿主机目录

guestmount -a /var/lib/libvirt/images/kvm3.qcow2 -i --rw /mnt/
umount /mnt/

③其他

#1.查看镜像某个目录内容
virt-ls -a /var/lib/libvirt/images/kvm0Clone.qcow2 /
#2.编辑镜像中文件
virt-edit -a /var/lib/libvirt/images/kvm0Clone.qcow2 /etc/hosts
#3.查看镜像挂载情况
virt-df -a /var/lib/libvirt/images/kvm3.qcow2
#4.查看镜像中某个文件内容
virt-cat -a /var/lib/libvirt/images/kvm0Clone.qcow2 /etc/resolv.conf
#5.拷贝宿主机文件至镜像                                       from        to
virt-copy-in -a /var/lib/libvirt/images/kvm0Clone.qcow2 /tmp/123.txt /tmp/
#6.拷贝镜像中文件至宿主机                                      from        to
virt-copy-out -a /var/lib/libvirt/images/kvm0Clone.qcow2 /tmp/123.txt /tmp/

3.后备镜像转换为差量镜像

后背镜像:创建完虚拟机后的磁盘文件,创建好后不再做修改,所有差量镜像基于该镜像

差量镜像:可以理解为vmware链接克隆

使用差量镜像的优势:节省磁盘空间,创建速度很快

创建:

qemu-img create -f qcow2 -b 后备镜像路径  差量镜像路径
qemu-img create -f qcow2 -b /var/lib/libvirt/images/kvm2.qcow2 kvmTest.qcow2

转换差量镜像为普通镜像:

qemu-img convert -f qcow2 -O qcow2 差量镜像路径 普通镜像路径
qemu-img convert -f qcow2 -O qcow2 kvmTest.qcow2 kvmNew.qcow2

4.快速创建虚拟机

采用创建差量镜像的方式来快速创建虚拟机

第一步:

准备:准备安装配置好的虚拟机,将配置文件与磁盘文件做成模板

mkdir /VM
cp /var/lib/libvirt/images/kvm0.qcow2 /VM
cp /etc/libvirt/qemu/kvm0.xml /VM/

第二步:修改配置文件,用于创建新的虚拟机时通过sed替换

配置文件需要修改的地方有:虚拟机名称,uuid,磁盘保存路径,网络mac地址

分别替换为:vmname,vmuuid,vmdisk,vmmac

...
<name>vmname</name>
<uuid>vmuuid</uuid>
<source file='vmdisk'/>
<mac address='vmmac'/>

第三步:

创建脚本文件 vim /VM/newVM.sh

#!/bin/bash
#生成UUID
uuid=$(uuidgen)
#生成MAC地址
vmmac="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed -r 's/^(..)(..)(..)(..).*$/\1:\2:\3:\4/')"
#接受用户输入
read -p "输入你要创建的虚拟机名称:" name
configname=/etc/libvirt/qemu/${name}.xml
diskpath=/var/lib/libvirt/images/${name}.qcow2
#拷贝配置文件
cp kvm0.xml  $configname
#创建差量镜像
qemu-img create -f qcow2 -b /VM/kvm0.qcow2 $diskpath
#修改相关配置
sed -i 's/vmname/'$name'/' $configname
sed -i 's/vmuuid/'$uuid'/' $configname
sed -ri 's#vmdisk#'$diskpath'#' $configname
sed -ri 's#vmmac#'$vmmac'#' $configname
#导入虚拟机配置文件
virsh define $configname
echo "$name创建成功"
virsh list --all

第四步:

执行脚本

sh /VM/newVM.sh
Last modification:November 19th, 2019 at 10:12 pm