KVM Basic
KVM
KVM 简介
KVM (全称是 Kernel-based Virtual Machine) 是 Linux 下 x86 硬件平台上的全功能虚拟化解决方案,包含一个可加载的内核模块 kvm.ko 提供和虚拟化核心架构和处理器规范模块。
使用 KVM 可允许多个包括 Linux 和 Windows 每个虚拟机有私有的硬件,包括网卡、磁盘以及图形适配卡等。
虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)
KVM工作原理:用户模式的QEMU通过ioctl进入内核模式,kvm模块为虚拟机创建虚拟内存,虚拟CPU后执行VMLAUCH指令进入客户模式。加载Guest OS并执行。如果Guest OS发生外部中断或者影子页表却也之类的情况,会暂停Guest OS的执行,退出客户模式进行异常处理,执行客户代码。如果发生I/O事件或者信号队列有信号到达,就会进入用户模式处理。
KVM 由处于内核态的 KVM 模块和用户态的 QEMU 两部分构成。内核模块实现了 CPU 和内存虚拟化等决定关键性能和核心安全的功能并向用户空间提供了使用这些功能的接口,QEMU 利用 KVM 模块提供的接口来实现设备模拟、 IO 虚拟化和网络虚拟化等。单个虚拟机是宿主机上的一个普通 QEMU 进程,虚拟机中的 CPU 核(vCPU)是 QEMU 的一个线程,VM 的物理地址空间是 QEMU 的虚拟地址空间
因此在虚拟机运行时,有三种模式:
客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下。
用户模式:代表用户执行I/O指令,QEMU运行在这个模式下。
内核模式:实现客户模式的切换,处理因为I/O或者其他指令引起的从客户模式退出(VM_EXIT)。kvm模块运行在这个模式下。
kvm模型中,每一个Guest OS都是作为一个标准的Linux进程,都可以使用Linux进程管理命令管理。
kvm 环境配置与安装
- 首先检查主机是否支持虚拟化:
- 为了方便起见,关闭防火墙和
SElinux
:
- 安装必要工具:
- 安装 kvm:
- 设置
libvirtd
为开机自启项:
重启之后检查是否加载kvm
模块:
- 配置 kvm 服务器网络
重启网络服务,查看网卡信息:
发现ens33
原来的ip是不显示的,这是因为br0
网卡占用了,并且此时物理机上的Linux系统的ip是被br0覆盖掉的,原先的ip地址不能再使用了。此时我们看到br0的ip地址就是这台物理机ip地址,这不是虚拟机的地址
- 测试验证安装结果:
- 创建软连接:
- 查看当前网桥信息:
由于当前未创建任何虚拟机,所以暂时没有虚拟网卡出现。
创建、克隆虚拟机
:warning:注意:镜像文件不要放置于根家目录下,不然会运行失败,显示Permission Denied
错误
参数说明:
--name
指定虚拟机的名称
--memory
指定分配给虚拟机的内存资源大小
maxmemory
指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
--vcpus
指定分配给虚拟机的CPU核心数量
maxvcpus
指定可调节的最大CPU核心数量
--os-type
指定虚拟机安装的操作系统类型
--os-variant
指定系统的发行版本
--location
指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
--disk path
指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
--bridge
指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
--graphics
指定是否开启图形
--console
定义终端的属性,target_type 则是定义终端的类型
--extra-args
定义终端额外的参数
克隆虚拟机:
参数说明:
-
-o
后跟旧的系统的名称
-
-n
后跟克隆后的新系统的名称
-
-f
后跟克隆后的系统存放的位置
创建windows server 2008
:
创建完成之后,使用VNC
远程连接软件进行安装.
管理虚拟机常用命令
查看虚拟机命令:
管理虚拟机命令:
给虚拟机添加、删除硬盘:
使用 WebVirtMgr 虚拟机管理的 web gui
项目开源地址:https://github.com/retspen/webvirtmgr
- 安装所需程序包:
- 安装python依赖并配置
Django
环境
- 配置
nginx
:
Add file webvirtmgr.conf
in /etc/nginx/conf.d
:
Open nginx.conf out of /etc/nginx/nginx.conf
:
设置完成之后,重启 nginx 服务,systemctl restart nginx
- 配置
Supervisor
:
Create file /etc/supervisord.d/webvirtmgr.ini
with following content:
- 启动:
打开浏览器访问http://x.x.x.x:8000 (x.x.x.x - your server IP address )
解决虚拟机无法连接外网问题
参考:https://blog.csdn.net/zhydream77/article/details/81629586
附:kvm 安装脚本
kvm_install.sh
参考链接