文章目录
一、虚拟化技术
VMM一般指虚拟机监视程序。
通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机上同时运行多个逻辑计算机,同时每个逻辑计算机可运行不同的操作系统,应用程序都可以在相互独立的空间内运行而互相不影响,从而提高计算机的工作效率。
以软件形式实现物理设备的功能
软件资源是没有硬件资源性能高(稳定和效率)的(相同功能)
二、虚拟化技术发展
雏形:
1961年,IBM709机器实现了分时系统,将CPU占用切分为多个极短的时间片(1/100sec)每一个时间片执行不同的工作,通过对这些时间片进行轮询从而将一个CPU伪装成多个CPU;
1972年, IBM正式将system370机的分时系统命名为虚拟机;
1990年, IBM推出的system390机支持逻辑分区(将一个CPU分为多份,相互独立,也就是逻辑分割);
Xen 2003年问世,是一个外部的hypervisor程序(虚拟机管理程序),能够控制虚拟机和给多个客户机分配资源;
KVM:2007年问世,现已内置在kernel内核中的.
三、虚拟化类型
1、全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
使用的方法:使用hypervisor(VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层,而基于核心的虚拟机是面向Linux系统的开源产品hypervisor(VMM)可以捕捉CPU的指令,为指令访问硬件控制器和外设充当中介。
2、半虚拟化:需要修改操作系统(开启硬件辅助———软件形式事务虚拟化功能)
3、直通:直接使用物理硬件资源(需要支持,还不完善)
Xen 支持的虚拟化技术:全虚拟化,半虚拟化
KVM:支持的虚拟化技术:全虚拟化
四、虚拟化的特性
优势
① 集中化管理(远程管理、维护)
② 提高硬件利用率(物理资源利用率低-例如峰值,虚拟化解决了“空闲”容量)
③ 动态调整机器/资源配置(虚拟化把系统的应用程序和服务硬件分离、提高了灵活性)
④ 高可靠(可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境)
劣势
① 前期高额费用(初期的硬件支持)
② 降低硬件利用率(特定场景-例如极度吃资源的应用不一定适合虚拟化)
③ 更大的错误影响面(本地物理机down机会导致虚拟机均不可用,同时可能虚拟机中文件全部损坏)
④ 实施配置复杂、管理复杂(管理人员运维、排障困难)
⑤ 一定的限制性(虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序及供应商结合使用)
⑥ 安全性(虚拟化技术自身的安全隐患)
五、虚拟化前后对比
5.1 虚拟化前
- 每台主机拥有一个操作系统
- 软硬件紧密结合
- 在同一个主机上运行多个应用程序通常会产生冲突
- 系统资源利用率低(例如: 5%)
- 硬件成本高昂并且不够灵活(物理资源有限)
5.2 虚拟化后
- 打破了操作系统和硬件的互相依赖
- 通过封装到虚拟机的技术,管理操作系统和应用程序为单一的个体
- 强大的安全和故障隔离
- 虚拟机时独立于硬件的,它们可以在任何硬件上运行
六、KVM
6.1、KVM简介
- 广义的 KVM 实际上包含两部分, 一部分是基于 LINUX 内核支持的 KVM 内核模块, 另一部分就是经过简化和修改的 Qemu。
- KVM 内核模块模拟处理器和内存以支持虚拟机的运行,Qemu 主要处理 I/O 以及为用户提供一个用户空间工具来进行虚拟机的管理。
两者相互结合, 相辅相成, 构成了一个完整的虚拟化平台。 - 请注意: Qemu 本身并不是 KVM 的一部分, Qemu 是一套完整的虚拟化解决方案, 是纯软 件实现虚拟化, 包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟, 但因为是纯软件 模拟出来的, 所以 Qemu 的性能比较低。
6.2、KVM架构及简介
KVM 虚拟化架构/三种模式
- 客户模式: 可以简单理解成客户机在操作系统运行中的模式, 客户模式又分为内核模式 和 用户模式。
- 用户模式: 为用户提供虚拟机管理的用户空间工具以及代表用户执行 I/O, Qemu 运行在这个模式之下。
- 内核模式: 模拟 CPU 以及内存, 实现客户模式的切换, 处理从客户模式的退出。 KVM 内 核模块运行在这个模式下
6.3、KVM工作流程
用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核模式。 KVM驱动为虚拟机创建虚拟 CPU 和虚拟内存,然后执行 VMLAU·NCH 指令进入客户模式,装载 Guest OS 并运行。Guest OS 运行过程中如果发生异常,则暂停Guest OS的运行并保存当前状态同时退出到内核模式来处理这些异常。
内核模式处理这些异常时如果不需要 I/O则处理完成后重新进入客户模式。如果需要 I/O 则进入到用户模式, 则由 Qemu 来处理 I/O,处理完成后进入内核模式,再进入客户模式。
七、搭建KVM虚拟机
7.1、搭建环境
- centos7系统安装完成后,需要勾选上KVM虚拟化功能,且网卡选择NAT模式
[root@localhost ~]# hostnamectl set-hostname kvm
[root@localhost ~]# bash
- ssh环境优化
设置DNS反向解析
#是否反解DNS,设置为NO可以让客户端连接服务器更快
[root@kvm ~]# vim /etc/ssh/sshd_config
UseDNS no #取消DNS注释,改为NO
- 防火墙优化
[root@kvm ~]# systemctl stop firewalld
[root@kvm ~]# setenforce 0
- 已完成所有开局优化,重启系统
[root@kvm ~]# reboot
7.2、安装KVM
安装KVM基本组件
[root@kvm ~]# yum -y groupinstall "GNOME Desktop" #安装 GNOME 桌面环境 如果装了图形界面不需要装了
[root@kvm ~]# yum -y install qemu-kvm #安装KVM 模块
[root@kvm ~]# yum -y install qemu-kvm-tools #KVM 调试工具,可不安装
[root@kvm ~]# yum -y install virt-install #构建虚拟机的命令行工具
[root@kvm ~]# yum -y install qemu-img #qemu 组件,创建磁盘、 启动虚拟机等
[root@kvm ~]# yum -y install bridge-utils #网络支持工具
[root@kvm ~]# yum -y install libvirt #虚拟机管理工具
[root@kvm ~]# yum -y install virt-manager #图形界面管理虚拟机
[root@kvm ~]# reboot #重启
- 设置开启启动界面的显示模式
[root@kvm ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
# 将 系 统 的 默 认 运 行 target 更 改 为graphical.targe。 重启后系统将进入图形化界面。
- 进行一些检查
[root@kvm ~]# cat /proc/cpuinfo | grep vmx # 检测CPU是否支持虚拟化
[root@kvm ~]# lsmod | grep kvm #查看KVM模块是否已安装
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
[root@kvm ~]# systemctl start libvirtd #开启libvirtd服务
[root@kvm ~]# systemctl enable libvirtd #开机启动libvirtd服务
7.3、设置KVM网络为桥接
- 宿主服务器安装完成 KVM, 首先要设定网络, 在 libvirt 中运行 KVM 网络有两种方法: NAT 和 Bridge, 默认是NAT。
- 用户模式, 即 NAT 方式, 这种方式是默认网络, 数据包由 NAT 方式通过主机的接口进行 传送, 可以访问外网,但是无法从外部访问虚拟机网络。
- 桥接模式, 这种模式允许虚拟机像一台独立的主机一样拥有网络, 外部的机器可以直接 访问到虚拟机内部, 但需要网卡支持,一般有线网卡都支持。 这里以 Bridge(桥接) 为例。
- 修改ens33网卡
[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none #原本的修改为none
#IPADDR=192.168.40.11
#NETMASK=255.255.255.0
#GATEWAY=192.168.40.2
#DNS=192.168.40.2
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=ens33
UUID=6e44752d-2834-4078-8fdb-94477ef302c0
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 #注释掉原本的IP地址,添加此处
- 新建桥接网卡
[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
OTPROTO=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.40.11
NETMASK=255.255.255.0
GATEWAY=192.168.40.2
添加上述内容即可
[root@kvm ~]# systemctl restart network #重启网卡
7.4、创建KVM存储和镜像数据的目录、上传centos7镜像
[root@kvm ~]# mkdir -p /data_kvm/iso #上传镜像centos 7.6的镜像
[root@kvm ~]# mkdir -p /data_kvm/store #虚拟机存储
[root@kvm ~]# ls /data_kvm/iso/
CentOS-7-x86_64-DVD-1708.iso
[root@kvm ~]# virt-manager #图形界面敲,打开虚拟系统管理器
7.5、进入安装步骤
创建存储池
双击打开QEMU/KVM–存储–添加(加号)–填写名称–前进–浏览–其他位置–计算机–data_kvm–store–打开–完成,使用相同方法创建镜像存储池,选择的文件夹是/data_kvm/iso
创建存储池存储镜像
创建存储卷
创建虚拟机
总结
一个完整的数据包从虚拟机到物理机的路径是:
虚拟机–QEMU虚拟网卡–虚拟化层–内核网桥–物理网卡
KVM的网络优化方案,总的来说,就是让虚拟机访问物理网卡的层数更少,直至对物理网卡的单独占领,和物理机一样的使用物理网卡,达到和物理机一样的网络性能。