KVM虚拟化技术简介
KVM架构
KVM虚拟化的核心主要由以下两个模块组成
1. KVM内核模块,它属于标准Linux内核的一部分,是一个专门提供虚拟化功能的模块,主要负责
CPU和内存的虚拟化,包括:客户机的创建、虚拟内存的分配、CPU执行模式的切换、vCPU寄存 器的访问、vCPU的执行。KVM模块是KVM虚拟化的核心模块,它在内核中有两部分组成,一个是 处理器架构无关的部分,可以用lsmod命令看到,叫做kvm模块;另一个是处理器架构相关的部 分,在intel平台上就是kvm_intel这个内核模块。KVM主要功能是初始化CPU硬件,打开虚拟化模 式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。
2. QEMU用户态工具,它是一个普通的Linux进程,为客户机提供设备模拟的功能,包括模拟BIOS、 数据总线、磁盘、网卡、显卡、声卡、键盘、鼠标等。同时它通过系统调用与内核态的KVM模块进 行交互。作为一个存在已久的虚拟机监控器软件,QEMU的代码中有完整的虚拟机实现,包括处理 器虚拟化、内存虚拟化,以及KVM也会用到的设备模拟功能。总之,QEMU既是一个功能完整的虚 拟机监控器,也在QEMU/KVM软件栈中承担设备模拟的功能。
3. 在KVM虚拟化架构下,每一个客户机就是一个QEMU进程,在一个宿主机上有多少个虚拟机就会有 多少个QEMU进程;客户机中的每一个虚拟CPU对应QEMU进程中的一个执行线程;一个宿主机只 有一个KVM内核模块,所有客户机都与这个内核模块进行交互。
KVM上层管理工具
1. libvirt
libvirt是使用最广泛的对KVM虚拟化进行管理的工具和应用程序接口,已经是事实上的虚拟化接口 标准,后部分介绍的许多工具都是基于libvirt的API来实现的。作为通用的虚拟化API,libvirt不但能 管理KVM,还能管理VMware、Hyper-v等其他虚拟化方案
2. virsh
virsh是一个常用的管理KVM虚拟化的命令行工具,对于系统管理员在单个宿主机上进行运维操 作,virsh命令行可能是最佳选择。virsh是用c语言编写的一个使用libvirt API的虚拟化管理工具, 其源代码也是在libvirt这个开源项目中的。
3. virt-manager
virt-manager是专门针对虚拟机的图形化管理软件,底层与虚拟化交互的部分仍然是调用libvirt API来操作的。virt-manager除了提供虚拟机生命周期(包括:创建、启动、停止、打快照、动态 迁移等)管理的基本功能,还提供了性能和资源使用率的监控。
KVM软件安装
Linux主机需要安装图形化桌面程序
如果出现报错尝试更新一下软件包
勾选虚拟化Intel-vtx
Linux主机需要安装图形化桌面程序
查看CPU支持的功能中是否存在
vmx:INTEL的虚拟化功能
svm:AMD的虚拟化功能
卸载KVM
安装kvm
启动服务
开启图形界面化
飞机驾驶舱(web)
1.安装工具
浏览器访问IP地址的9090端口
图形模式安装Guest OS
上传系统镜像文件到Linux系统中
完全命令方式安装
1.因为用到了ftp服务,所以需要先把ftp服务装好
2.下面开始安装
如果本地有镜像可以直接使用本地镜像进行安装
参数说明:
-n name
-r 以M为单位指定分配给虚拟机的内存大小
--disk 指定作为客户机存储的媒介 size以G为单位的存储
--os-type 针对一类操作系统优化虚拟机配置
--os-variant 针对特定操作系统变体进一步优化虚拟机配置
--vcpus
--location 客户虚拟机kernel+initrd 安装源,必须为镜像挂载在ftp目录下
-x 当执行从”–location”选项指定位置的客户机安装时,附加内核命令行参数到安装程序
--nographics 指定没有控制台被分配给客户机。
缺点:纯文本安装的输入时大小写莫名的变换,远程ssh没问题
内存必须大于2048(-r后面)
易错:
安装过程中:
手动配置IP地址
到url位置找不到路径,要返回去手动选择url,重新配置url为ftp://192.168.100.230/rhel6u4,这里
的ip不要写127.0.0.1而是br0的ip
借助虚拟机安装
1.虚拟机配置文件
2.存储虚拟机的介质
3.根据配置文件创建虚拟机
4.创建虚拟机
5.查看与启动这个虚拟机
6.连接控制台
在虚拟机里运行
实体机进行连接
KVM基础管理
常用管理命令
虚拟机克隆
名字系统分配
可以指定克隆之后的名字
指定克隆之后虚拟机的磁盘镜像文件
虚拟机快照
创建快照
单独查看虚拟机的快照
还原快照
删除快照
KVM存储
kvm必须配置一个目录当做存储磁盘镜像(存储卷)的目录,这个目录为存储池
默认存储池: /var/lib/libvirt/images/
存储池创建使用相关命令
KVM平台以存储池的形式对存储进行统一管理,所谓存储池可以理解为本地目录、通过远端磁盘阵列 (iSCSI、NFS)分配过来磁盘或目录。
1.创建基于文件夹的存储池(目录),并且定义存储池与其目录
2.创建已定义的存储池,然后查看已定义的存储池,存储池不激活无法使用
3.在存储池中创建虚拟机存储卷
注1:KVM存储池主要是体现一种管理方式,可以通过挂载存储目录,LVM逻辑卷的方式创建存储池,虚拟机存储卷创建完成后,剩下的操作与无存储卷的方式无任何区别
注2:KVM存储池也用于虚拟机迁移任务
存储池删除相关管理命令
1.在存储池中删除虚拟机存储卷
2.取消激活存储池
3.删除存储池定义的目录
4.取消定义存储池
虚拟机磁盘挂载至宿主机
当虚拟机无法启动的时候,可以将虚拟磁盘文件直接挂载到主机上,以获得其中的文件
查看磁盘镜像分区信息
挂载磁盘镜像分区,挂载完成之后可以看到vm1虚拟机根目录下的文件
取消挂载
网络管理
NAT网络下
宿主机和虚拟机可以互相访问
虚拟机可以访问宿主机所在的物理网络
宿主机所在的物理网络无法主动访问虚拟机
隔离网络拓扑
在隔离网络下
虚拟机和宿主机可以互相访问
宿主机不提供NAT功能,所以虚拟机与宿主机所在的物理网络无法互相访问
桥接网络拓扑
在桥接网络下
虚拟机和宿主机可以互相访问
虚拟机和宿主机同处于一个物理网络下
物理网络可以直接访问虚拟机,虚拟机也可以直接访问物理网络
配置桥接网络
在宿主机上
建桥接网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
NAME=br0
DEVICE=br0
ONBOOT="yes"
BOOTPROTO=dhcp
修改宿主机网卡配置文件
cp /etc/sysconfig/network-scripts/ifcfg-ens33{,.old}
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE="ens33"
ONBOOT="yes"
BRIDGE=br0
重启 libvirtd 和 network 服务
systemctl restart network libvirtd
修改虚拟机配置,然后启动虚拟机检查网络是否生效
virsh edit vm1
删除桥接网卡步骤
删除br0的配置文件
修改正常网卡的配置文件
重启系统
配置NAT网络
复制默认的NAT网络配置
cp /etc/libvirt/qemu/networks/default.xml ./nat1.xml
修改配置文件
vim nat1.xml
重启 libvirtd 服务,然后激活新的nat网络
systemctl restart libvirtd
virsh net-autostart nat1 网络nat1标记为自动启动
virsh net-start nat1 网络 nat1 已开始
virsh net-list
修改虚拟机配置,然后启动虚拟机检查网络是否生效
virsh edit vm1
配置隔离网络
和创建NAT网络一样,不过需要在配置文件中删除如下一行
virbr0网卡
virbr0是kvm默认创建的一个Bridge,其作用是为连接其上的虚拟机网卡提供