- ★KVM简介
- 1、KVM概述
- 工作原理
- 2、KVM的核心组件:
- 3、KVM运行模式
- 4、KSM机制
- 5、kvm工具集:
- ★ 安装步骤
- 虚拟机创建成功以后需要做的
- 以色列qumranet公司研发,后被RedHad公司收购
(1)kvm只支持x86平台
(2)依赖于 HVM,inter VT AMD-v
- KVM是(Kernel-based Virtual Machine)的简称,是一个开源的系统虚拟化模块,自Linux
2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。 - KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD
V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware
ESX系列是基于软件模拟的Full-Virtualization。
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。
(1)、 kvm.ko内核模块
(kvm.ko)/dev/kvm:工作为hypervisor,在用户空间可通过系统调用ioctl()与内核中的kvm模块交互,从而完成虚拟机的创建、启动、停止、删除等各种管理功能;
(2)、 qemu-kvm:用户空间的工具程序
qemu-kvm进程:工作于用户空间,用于实现IO设备模拟;用于实现一个虚拟机实例;
(3)libvirt:工具箱用于与主流操作系统虚拟化进行交互工具
- libvirt是cs架构应用:
- 客户端:libvirt-client
virt-manager
- daemon:图像化工具
libvirt-deaemon
3、KVM运行模式KVM模块load进内存之后,系统的运行模式:
- 内核模式:GuestOS执行IO类的操作时,或其它的特殊指令操作时的模式;它也被称为“Guest-Kernel”模式;
- 用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求;
- 来宾模式:GuestOS的用户模式;所有的非IO类请求;
扫描物理内存,发现多个虚拟机实例有相同的内存空间,合并成为一个共享内存空间,节省内存。
5、kvm工具集:- qemu工具
qemu-kvm:用户空间的工具程序,创建管理虚拟机
qemu-img:是 QEMU 的磁盘管理工具
- libvirt工具
GUI:virt-manager, virt-viewer:图形化管理
CLI: virsh, virt-install:创建管理虚拟机
- 集群工具:
libvirtd:管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。Libvirt是一个C工具包的虚拟化功能与最新版本的Linux(以及其他操作系统)。主包包含libvirtd服务器虚拟化支持出口。
★ 安装步骤- 此次物理机配置
| 运行内存 | 磁盘空间 | 操作系统 |
|---|---|---|
| 32G | 2块4T(RAID1阵列) | linux-centos7(桌面版) |
1.查看系统版本
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
2.检查是否开启虚拟化。有VMX或者svm
[root@localhost ~]# cat /proc/cpuinfo | egrep 'vmx|svm'
如果返回无数据则无法搭建,虚拟机安装请参考点击
物理机的话安装系统的时候弄桌面版
虚拟机和物理机都建议弄桌面 也方便KVM工具操作
3.查看是否加载kvm
[root@localhost ~]# lsmod | grep kvm kvm_intel 183621 4 kvm 586948 1 kvm_intel irqbypass 13503 3 kvm
没有任何输出即为报错
4.安装kvm相关的软件包
[root@localhost ~]# yum -y install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer
5.修改配置文件
添加一些优化参数
vi /etc/sysctl.conf #末尾添加 net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.ip_local_port_range = 4000 65000 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_max_tw_buckets = 36000 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.core.somaxconn = 16384 net.core.netdev_max_backlog = 16384 net.ipv4.tcp_max_orphans = 16384 net.ipv4.ip_nonlocal_bind = 1
为了防止报错
net.bridge.bridge-nf-call-ip6tables = 0 找不到 net.bridge.bridge-nf-call-iptables = 0 找不到 net.bridge.bridge-nf-call-arptables = 0 找不到
临时添加模块
modprobe br_netfilter modprobe ip_vs_rr
开机自动加载模块
cat > /etc/rc.sysinit << EOF #!/bin/bash for file in /etc/sysconfig/modules/*.modules ; do [ -x $file ] && $file done EOF cat > /etc/sysconfig/modules/br_netfilter.modules << EOF modprobe br_netfilter EOF chmod 755 /etc/sysconfig/modules/br_netfilter.modules lsmod |grep br_netfilter
使配置文件生效
sysctl -p
6.修改宿主机网络为桥接
如果不设置桥接,后面创建出来的虚拟机不能与局域网内的主机互访
记得把配置文件备份一份
有的默认网卡名叫ens33,有的叫eth0,都可以无所谓
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp ifcfg-em1 /root/ifcfg-em1_backup
再复制出来一份文件叫br0,一会作为桥接网卡
[root@localhost network-scripts]# cp ifcfg-em1 ifcfg-br0
修改配置文件如下:
vi /etc/sysconfig/network-scripts/ifcfg-em1 #文件内容如下: TYPE=Ethernet NAME=em1 UUID=b8730dd7-4855-401c-8ad3-5c009969089c #UUID用自己机器默认的 DEVICE=em1 ONBOOT=yes BRIDGE=br0 #这个br0是桥接网卡 #文件内容只需要有以上几个就行,其他的都删除或者注释,否则后面会报错
修改桥接网卡
vi /etc/sysconfig/network-scripts/ifcfg-br0 #文件内容如下 TYPE=Bridge #桥接 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_AUTOCONF=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no BOOTPROTO=static #静态IP NAME=br0 DEVICE=br0 ONBOOT=yes IPADDR=192.168.1.166 #根据自己使用的网络进行设置 NETMASK=255.255.255.0 #根据自己使用的网络进行设置 GATEWAY=192.168.1.1 #根据自己使用的网络进行设置 DNS1=8.8.8.8 #设置一下DNS要不不能上网 DNS2=114.114.114.114 #文件内容只需要有以上几个就行,其他的都删除或者注释,否则后面会报错
重启网络并重启主机
systemctl restart network 网络重启之后建议把主机也重启一下 reboot
开机以后可以看一下自己的网络是不是配置成功
ip a
7.启动
[root@localhost ~]# systemctl start libvirtd
8.进入图形华界面
[root@localhost ~]# virt-manager
9.主机导入镜像
位置自定义
10.开始创建KVM虚拟机
点击文件,新建虚拟机。
本地安装介质,前进!
后面我现在没截图 有机会我会完善文章
后面都是图形化操作比较简单
-
选择镜像
-
配置运行内存,cpu
-
配置磁盘空间这个注意一下(这个是根据自己物理机磁盘空间分布情况而定)
默认的位置应该是/var/lib/libvirt,显示我只有50G可用
但是我的4T内存挂载到/home,我想从4T中分给他们用
在选择的时候自己根据目录创建一个卷就行了 -
设置网络的时候选择桥接网络 (只有使用桥接网络才可以达到与局域网其他主机互访)
应该是桥接br0主机em1
后面就可以启动虚拟机一系列进行系统设置了
虚拟机创建成功以后需要做的设置一下网络,修改固定ip、添加DNS可以上网
修改文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0 #我下面只写出需要修改或添加的位置: BOOTPROTO=static #修改 ONBOOT=yes #修改 #尾部添加 根据自己网络设置 IPADDR=192.168.1.167 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=144.144.144.144 修改好之后重启网络 systemctl restart network
验证:
在虚拟机上试试能不能上网
用同局域网内的主机是否能ping通
成功



