前言
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
KVM虚拟化架构
•KVM模块直接整合在Linux内核中
KVM的组成
KVM Driver
•虚拟机创建
•虚拟机内存分配
•虚拟机CPU寄存器读写
•虚拟CPU运行
QEMU(经过简化与修改)
•模拟PC硬件的用户控件组件
•提供I/O设备模型及访问外设的途径
KVM虚拟化三种模式
•客户模式: 虚拟机
•用户设置: 设置
•内核模式: KVM Driver 内核态
KVM工作原理
实验操作
1、在虚拟机开机前,先在虚拟机上添加一个硬盘,并将硬盘格式化,并挂载到/data/目录下
开启虚拟机的虚拟化
[root@localhost ~]# fdisk -l
磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000be35b
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 12584959 6291456 83 Linux
/dev/sda2 12584960 54527999 20971520 83 Linux
/dev/sda3 54528000 62916607 4194304 82 Linux swap / Solaris
/dev/sda4 62916608 83886079 10484736 5 Extended
/dev/sda5 62918656 83886079 10483712 83 Linux
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xc2432934 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-209715199,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199):
将使用默认值 209715199
分区 1 已设置为 Linux 类型,大小设为 100 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]#
[root@localhost ~]# mkfs /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6553600 inodes, 26214144 blocks
1310707 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=4294967296
800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: 完成
正在写入inode表: 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sdb1 /data/
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda2 xfs 20G 3.3G 17G 17% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda5 xfs 10G 37M 10G 1% /home
/dev/sda1 xfs 6.0G 174M 5.9G 3% /boot
tmpfs tmpfs 378M 12K 378M 1% /run/user/42
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/sdb1 ext2 99G 60M 94G 1% /data
[root@localhost ~]#
2、在宿主机共享所需镜像,并挂载到虚拟机上
[root@localhost ~]# mount.cifs //192.168.100.100/tools /mnt/
Password for root@//192.168.100.100/tools:
[root@localhost ~]#
3、配置KVM必须环境包
[root@localhost ~]# yum groupinstall "GNOME Desktop" -y ##安装桌面环境
[root@localhost ~]# yum install qemu-kvm -y ##KVM模块
[root@localhost ~]# yum install qemu-kvm-tools -y ##KVM调试工具
[root@localhost ~]# yum install virt-install -y ##构建虚拟机的命令行工具
[root@localhost ~]# yum install qemu-img -y ##qemu组件,创建磁盘,启动虚拟机
[root@localhost ~]# yum install bridge-utils -y ##网络支持工具
[root@localhost ~]# yum install libvirt -y ##虚拟机管理工具
[root@localhost ~]# yum install virt-manager -y ##图像化管理虚拟机
4、判断cpu是否支持虚拟化。并查看虚拟机模块
[root@localhost ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
[root@localhost ~]#
cat /proc/cpuinfo | grep svm ##AMD服务器可用
cat /proc/cpuinfo | grep vmx ##inter服务器可用
egrep '(vmx|svm)' /proc/cpuinfo ##两者都可用
5、开启服务,并设置开机自启动
#开启服务
[root@localhost ~]# systemctl start libvirtd
#开机自启动
[root@localhost ~]# systemctl enable libvirtd
6、将所需镜像,将挂载的软件包移动到/data/目录下
[root@localhost ~]# cd /data/
#创建两个文件
[root@localhost data]# mkdir vdisk viso
#复制并调到后台运行
[root@localhost data]# cp -r /mnt/CentOS-7-x86_64-DVD-1708.iso /data/viso &
[1] 29318
[root@localhost data]#
[1]+ 完成 cp -i -r /mnt/CentOS-7-x86_64-DVD-1708.iso /data/viso
[root@localhost data]# ls viso/
CentOS-7-x86_64-DVD-1708.iso
[root@localhost data]#
7、配置虚拟机的桥接网卡
#进入网卡文件
[root@localhost data]# cd /etc/sysconfig/network-scripts/
#复制创建br0网卡
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-br0
#进入ens33网卡,设置桥接命令
[root@localhost network-scripts]# vim ifcfg-ens33
##末行添加
#桥接命令
BRIDGE=br0
#配置桥接网卡,将桥接网卡设置为静态的地址
[root@localhost network-scripts]# vim ifcfg-br0
TYPE=bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.52.134
NETMASK=255.255.255.0
GATEWAY=192.168.52.1
[root@localhost network-scripts]# systemctl restart network ##重启网卡
[root@localhost network-scripts]# ifconfig ##查看网卡信息
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.52.134 netmask 255.255.255.0 broadcast 192.168.52.255
inet6 fe80::69d9:68eb:e59e:c66f prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:34:07 txqueuelen 1000 (Ethernet)
RX packets 14 bytes 1274 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 29 bytes 4473 (4.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:eb:34:07 txqueuelen 1000 (Ethernet)
RX packets 3356082 bytes 4925169168 (4.5 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 227829 bytes 18565675 (17.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
8、进入图形化管理界面
[root@localhost ~]# virt-manager
选择存储,单击选择,进入存储控制界面
选择创建新的存储池,然后输入名称
然后选择前进,然后在里边跳出的页面,单击浏览。进入下列界面
进入选择data目录下的vdisk文件夹,然后选择点击打开
退出界面后点击完成,就完成新的存储池的创建
在data上选择添加新加卷,点击进入后输入名称,并且在下边的存储卷配额上输入要分配的区间大小
跟上边一样的步骤,创建一个iso存储池,在这里选择/data/中的viso/中的/镜像,然后点击打开
然后点击完成,就完成了地址池的添加,查看创建好的存储池,创建好之后,点击文件中的关闭
点击文件,选择生成新的虚拟主机
在上述选择前进,之后,在选择要安装的系统镜像的时候,选择iso中的镜像
镜像选择完成,点击前进
分派内存的大小,一般根据自己的实际内存的大小分派
选择创建自定义存储,选择自己刚才的vdisk中创建的Centos7文件
点击选择,在安装前自定义配置,然后点击完成
在引导选项中,选择主机引导时启动虚拟机
点击开始安装,后边就跟我们安装CentOS的步骤一样了