KVM
概念
基于内核的虚拟机 Kernel-based Virtual Machine(KVM)是一种内建于 Linux中的开源虚拟化技术。具体而言,KVM 可帮助您将 Linux 转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。
虚拟化技术
虚拟化特性
KVM架构及原理
KVM 基本上有两个组件构成:
- kvm 驱动 现在已经是Linux内核的一个模块了,它的作用主要是负责虚拟机的创建,虚拟内存的分配 虚拟CPU寄存器的读写和虚拟cpu的运行
- 另一个组件是 Qemu QEMU是一个通用的开源机器模拟器和虚拟器,其主要的功能是用于模拟虚拟机的用户空间组件,提供io 设备模型,访问外设的途径
Kvm 模块让Linux 主机成为一个虚拟机监视/管理器(VMM),并且在原有的Linux 两种执行模式的基础上,新增加了客户模式,客户模式拥有自己的用户模式和内核模式,在虚拟机运行时,
三种运行模式:
内核模式: 实现客户模式的切换,处理因为IO或者其他指令引起的客户模式退出(VM_EXIT) kvm 工作在 这 个模式下,
用户模式:代表用户在IO模式下,执行QEMU 指令;
客户模式:执行非IO的客户代码,虚拟机运行在这种模式下
在kvm的模型中,每一个guest os 都是作为一个标准的Linux进程,都可以使用Linux进程管理管理命令!
这里假如Qemu 通过ioctl 发出KVM_CREAT_VM指令,创建一个VM后,qemu需要发送一个命令给VM,如KVM_CREAT_VCPU,这些命令当然也是通过ioctl发送的,用户程序中用ioctl通过发送KVM_CREAT_VM 指令后得到的返回值就是fd(KVM_VM),fd是创建的指向特定虚拟机实例的文件描述符,之后利用这个fd发送命令给VM进行访问控制。KVM 解析这些命令kvm_vm_ioctl
KVM工作原理
Kvm 工作原理的基本阐释:
用户模式的qume利用libkvm 通过ioctl进入内核模式,kvm 模块为虚拟机创建虚拟内存,虚拟cpu后执行VMLUACH指令进入客户模式。加载guest os并执行。如果guest os 发生外部中断,或者影子页表缺页之类的情况,会暂停guest os的执行,退出客户模式出行异常处理,之后重新进入客户模式,执行客户代码,如果发生iO事件或者信号队列中有信号到达,就会进入用户模式处理。
工作流程
配置
环境
主机名修改,挂载
hostnamectl set-hostname kvm
su
vim /etc/fstab
/dev/cdrom /mnt iso9660 defaults 0 0
mount -a
df -hT
设置dns反向解析
vim /etc/ssh/sshd_config
#115行;取消DNS注释,改为NO
UseDNS no
制作本地YUM仓库
cd /etc/yum.repos.d/
mkdir repos.bak
mv CentOS-* repos.bak
vim kvm.repo
[kvm]
name=kvm
baseurl=file:///mnt
gpgcheck=0
enabled=1
yum clean all && yum repolist
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
安装模块
yum groupinstall -y "GNOME Desktop"
yum -y install qemu-kvm
yum -y install qemu-kvm-tools
yum -y install virt-install
yum -y install qemu-img
yum -y install bridge-utils
yum -y install libvirt
yum -y install virt-manager
#—————命令解释——————
# 有桌面环境 可以不需要装
yum groupinstall -y "GNOME Desktop"
# KVM 模块
yum -y install qemu-kvm
# 安装KVM 调试工具(可不安装)
yum -y install qemu-kvm-tools
# 构建虚拟机的命令行工具
yum -y install virt-install
# qemu 组件,创建磁盘、启动虚拟机等
yum -y install qemu-img
# 网络支持工具
yum -y install bridge-utils
# 虚拟机管理工具
yum -y install libvirt
# 图形界面管理虚拟机
yum -y install virt-manager
检测CPU是否支持虚拟化
cat /proc/cpuinfo | grep vmx
查看KVM模块是否已安装
Lsmod #显示已载入的系统模块
lsmod | grep kvm
#设置开启启动界面的显示模式
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
KVM网络设置
网络模式
桥接模式:这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)
NAT模式: 默认设置,数据包由 NAT 方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络
路由模式
隔离模式
使用Bridge网桥模式进行部署
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=none
IPV6INIT=no
ONBOOT=yes
BRIDGE=br0 #删除原先地址,设置为网桥模式,关联br0网卡
创建、编辑桥接网卡
vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.21.120
NETMASK=255.255.255.0
GATEWAY=192.168.21.2
systemctl restart network.service
KVM部署与管理
创建KVM存储和镜像数据的目录、上传centos7镜像
mkdir -p /data_kvm/iso
mkdir -p /data_kvm/store
cd /mnt
cp -p CentOS-7-x86_64-DVD-1810-7.6.iso /data_kvm/iso/
ll /data_kvm/iso/
使用虚拟系统管理器管理虚拟机
创建流程:
创建存储池(ISO、STORE)-------》添加存储卷------》创建虚拟机