kvm学习笔记

KVM

1、 虚拟化技术分类

1 平台虚拟化

2 资源虚拟化

3 应用程序虚拟化

2、 平台虚拟化技术分类

  虚拟机中运行的操作系统为guest os,运行虚拟机监控器的操作系统称之为host os。运行虚拟机的真实系统称之为主机系统。
  • 1、操作系统级虚拟化

    openvz:最便宜的vps平台。共用宿主机的内核。

  • 2、部分虚拟化

    vmm只模拟部分底层硬件

  • 3、全虚拟化

    模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等。(特权CR3寄存器)

  • 4、超虚拟化

    是一种修改guest os部分访问特权状态的代码以便直接与vmm交互的技术。部分硬件接口以软件的形式提供给客户机操作系统,通过hypercall的方式提供。

  • 5、硬件辅助虚拟化

    借助硬件的支持来实现搞笑的全虚拟化。

3、 KVM 架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vTugjA7E-1660663650853)(C:\Users\heistester\Desktop\kvm.png)]

4、 KVM架构解析

kvm针对运行在x86硬件上的、驻留在内核中的虚拟化基础结构。KVM是作为内核模块实现的,只要linux加载该模块就会成为一个hypervisor。

5、 KVM软件安装

1、查看cpu是否支持vt技术

cat /proc/cpuinfo | grep -E ‘vmx|svm’

2、卸载kvm

yum remove rpm -qa |egrep 'qemu|virt|KVM' -y

rm -rf /var/lib/libvirt/ /etc/libvirt/

3、安装软件

yum install -y qemu virt librbd1-devel

qemu-KVM: 主包

libvirt:API接口

virt-manager: 图形化管理程序

kvm技术,应用到qemu+kvm
kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但不能模拟其他设备
qemu是模拟IO设备(网卡+磁盘...)。
libvirt是调用kvm虚拟化技术的接口管理工具。
4、启动服务

systemctl start libvirtd

5、查看kvm模块加载

lsmod|grep kvm

6、 guest os 安装

1、图形界面安装
virt-manager 
2、完全文本模式安装
查看kvm支持的版本
osinfo-query os|grep centos

virt-install --connect qemu:///system -n kvm1 -r 2048 --diskpath=/var/lib/libvirt/images/kvm1.img,size=7 --os-type=linux --os-variant=centos7.0 --vcpus=1 --location=ftp://192.168.0.1/centos7u4 -x console=ttyS0 --nographics
3、命令行模式
虚拟机配置文件位置:ll /etc/libvirt/qemu
储存虚拟机的介质:ll /var/lib/libvirt/images/

复制虚拟机介质以及配置文件。
修改配置文件:必改点:name,uuid,source file,mac address<只能修改后三位>
创建虚拟机
virsh define vm02.xml
重启
systemctl restart libvirtd
宿主机开启路由转发
net.ipv4.ip_forward = 1

添加磁盘:

修改配置文件.xml

file,dev,slot,bus

创建磁盘镜像文件

qemu-img create -f qcow2 /var/lib/libvirt/images/vm02-2.xml 2G

virsh define vm02.xml

7、 KVM存储

KVM必须要配置一个目录当作存储磁盘镜像的目录,称之为存储池。

1、存储池管理
基于文件夹的存储池
mkdir -p /data/vmfs

定义存储池及其目录
virsh poll-define-as vmdisk --type dir --target /data/vmfs

构建存储池
virsh poll-build vmdisk
查看已经定义的存储池
virsh pool-list --all

激活并自动启动已经定义的存储池
virsh pool-start vmdisk
设置开机自启动
virsh pool-autostart vmdisk

在存储池中创建虚拟机存储卷
virsh vol-creat-as vmdisk mydisk.qcow2 20G --format qcow2

相关命令

在存储池中删除虚拟机存储卷

virsh vol-delete --pool vmdisk mydisk.qcow2

取消激活存储池

virsh pool-destroy vmdisk

删除存储池中定义的目录

virsh pool-delete vmdisk

取消定义存储池

virsh pool-undefine vmdisk

2、 磁盘格式
raw 
原始格式,性能最好

qcow2
性能不如raw,但是支持快照、支持写时拷贝、更小的储存空间、支持zlib的磁盘压缩、支持AES加密

qed

写时拷贝

raw立即分配空间

qcow2只在需要空间时,才会分配空间

创建磁盘文件

qemu-img create -f qcow2 test.qcow2 20G
qemu-img create -f raw test.img 20G

查看虚拟磁盘文件
qemu-img info test.qcow2

转换raw格式为qcow2格式
qemu-img convert -O qcow2 /var/lib/libvirt/images/vm2.raw /var/lib/libvirt/images/vm2.qcow2
3、 挂载磁盘

虚拟机无法启动时,通过挂载磁盘排错。利用libguestfs找出损坏的虚拟机文件。

查看磁盘镜像分区信息:
 virt-df -h -d vm02

查看文件系统:
virt-filesystems -d vm01

挂载磁盘镜像分区
 guestmount -d vm02 -m /dev/sda1 --rw /mnt

取消挂载
 guestunmount  /mnt

7、 KVM管理

查看
virsh list [--all]

查看虚拟机配置文件
virsh dumpxml vm02

修改配置文件
virsh edit file.xml

启动
virsh start vm02

关闭虚拟机
virsh shutdown vm02

重启虚拟机
virsh reboot vm02

重置虚拟机
virsh reset vm02

暂停虚拟机
virsh suspend vm02

恢复虚拟机
virsh resume vm02

删除虚拟机
virsh undefine vm02
virsh destroy vm02

设置虚拟机开机自启动
virsh autostart vm02
ll /etc/libvirt/qemu/autostart/ <设置autostart后创建文件>

关闭自启动
virsh autostart --disable vm02

查看所有开机自启动的guest os
virsh list --all --autostart 或者
ll /etc/libvirt/qemu/autostart/ 

8、 虚拟机克隆

克隆之前保证虚拟机为关机状态
virt-clone -o vm02 -n vm02-2 --auto-clone
virt-clone -o vm02 -n vm02-2 --auto-clone -f /var/lib/libvirt/images/kvm1.img <指定新的磁盘镜像文件>

9、 增量镜像

创建增量镜像文件
qemu-img create -b /var/lib/libvirt/images/vm02.img -f qcow2 /var/lib/libvirt/images/vm03.img

查看增量镜像详细信息
qemu-img info /var/lib/libvirt/images/vm03.img

然后就是修改配置文件创建虚拟机的步骤了

其他

dd if=/dev/zero of=test bs=1M count=200
创建200M大小文件

10、 快照

raw不支持快照

创建快照
virsh snapshot-create-as vm02 vm02.snap02

查看快照
virsh snapshot-list vm02

关闭虚拟机,恢复快照
virsh snapshot-revert vm02 vm02.snap02

删除快照
virsh snapshot-delete --snapshotname vm02.snap02 vm02

11、 网络管理

分为 nat、isolated、bridge

brctl show 查看交换机信息

删除网络接口
brctl delif virbr0 vnet0

增加网络接口
brctl add virbr0 vnet0
1、桥接网卡
在宿主机/etc/sysconfig/network-scripts中添加网卡ifcfg-br0

TYPE=Bridge
NAME=br0
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.13 #宿主机ip
GATEWAY=192.168.1.1 #route命令查看
NETMASK=255.255.255.0
DNS1=114.114.114
DNS2=8.8.8.8

修改ens33网卡

DEVICE=ens33
ONBOOT=yes
BRIDGE=br0

重启libvirtd
重启networkd

2、 nat网络/isolated
复制默认网络配置文件
cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/nat1.xml

修改文件 name ,uuid ,birdge.name,mac,ip
文件名和name一致
<network>
  <name>nat1</name>
  <uuid>5d4dc814-ed70-4b0a-be41-a0b4730893a5</uuid>
  <forward mode='nat'></forward>   # isolated网卡,只需要将forward标签删除即可
  <bridge name='nat01' stp='on' delay='0'/>
  <mac address='52:54:00:46:1c:d2'></mac>
  <ip address='192.168.2.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.2.2' end='192.168.2.254'></range>
    </dhcp>
  </ip>
</network>

重启libvirtd
systemctl restart libvirtd
添加网卡

查看所有网络

virsh net-list

启动网卡

virsh net-start nat1

设置自动启动

virsh net-autostart nat1

查看虚拟机的网络接口信息

virsh domiflist vm02