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'
-yrm -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