人的一生,有许多事情,是需要放在心里慢慢回味的,过去的就莫要追悔,一切向前看吧 任何打击都不足以成为你堕落的借口,即使你改变不了这个世界,你却依然可以改变自己,选择条正确的路永远走下去。
返回顶部

KVM虚拟化介绍

摘要

虚拟化是云计算的基础。通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机上同时运行多个逻辑计算机,同时每个逻辑计算机可运行不同的操作系统,应用程序都可以在相互独立的空间内运行而互相不影响,从而提高计算机的工作效率。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的CPU、内存、IO硬件资源,但逻辑上虚拟机之间是相互隔离的。

一、虚拟化介绍

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为三种:

  • 全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用,Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型

  • 半虚拟化:基于普通的操作系统,需要修改操作系统

  • 直通:直接使用物理硬件资源(需要支持,还不完善)

理论上讲:

全虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比半虚拟化要高;
半虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

二、虚拟化优缺点

2.1、优势

① 集中化管理(远程管理、维护)

② 提高硬件利用率(物理资源利用率低-例如峰值,虚拟化解决了“空闲”容量)

③ 动态调整机器/资源配置(虚拟化把系统的应用程序和服务硬件分离、提高了灵活性)

④ 高可靠(可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境)

2.2、劣势

① 前期高额费用(初期的硬件支持)

② 降低硬件利用率(特定场景-例如极度吃资源的应用不一定适合虚拟化)

③ 更大的错误影响面(本地物理机down机会导致虚拟机均不可用,同时可能虚拟机中文件全部损坏)

④ 实施配置复杂、管理复杂(管理人员运维、排障困难)

⑤ 一定的限制性(虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序及供应商结合使用)

⑥ 安全性(虚拟化技术自身的安全隐患)

三、虚拟化前后对比

3.1、为什么要使用虚拟化

①操作系统方面

LAMP 架构中,如果架构要求服务间的安全性隔离比较高的话,Apache的页面和MySQL数据库的目录一定是不能互相碰面,如果Apache漏洞暴露出来,攻击者就可以Apache的进程访问到MySQL的数据目录,从而获取MySQL中的数据,这种就是严重的安全隐患而想解决这种潜在危险,可以通过实现内核级别的隔离(使用虚拟化技术)。

②软硬件结合

因为硬件和操作系统不兼容或者不支持,导致有些软、硬件功能无法正常使用(也是最难的问题)使用虚拟化,软硬件之间是会通过虚拟化层驱动进行隔离(调配)的,只要虚拟化层可以识别软/硬件应用,就可以将软硬件结合使用

③ 端口冲突

Apache和Nginx 定位相同(80端口)只能使用反向代理的方式进行分离,而同时如果在同一台机器使用这种方式,Apache和Nginx中重要的数据文件如果同时被泄露出去,而虚拟化可以隔离服务。

3.2、虚拟化前后对比

3.2.1、虚拟化前

① 每台主机拥有一个操作系统

② 软硬件紧密结合

③ 在同一个主机上运行多个应用程序通常会产生冲突

④ 系统资源利用率低(例如:5%)

⑤ 硬件成本高昂并且不够灵活

3.2.2、虚拟化后

① 打破了操作系统和硬件的互相依赖

② 通过封装到虚拟机的技术,管理操作系统和应用程序为单一的个体

③ 强大的安全和故障隔离

④ 虚拟机时独立于硬件的,它们可以在任何硬件上运行

四、KVM介绍

KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。

那 IO 的虚拟化,比如存储和网络设备则是由 Linux 内核与Qemu来实现。

作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。

大家在网上看 KVM 相关文章的时候肯定经常会看到 Libvirt 这个东西。

Libvirt 就是 KVM 的管理工具。

其实,Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。

Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh

  • libvirtd是服务程序,接收和处理 API 请求;
  • API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
  • virsh 是我们经常要用的 KVM 命令行工具

KVM实际应用:

可以应用于Vmware workstation、virtualbox等,主要是模拟硬件资源/设备

五、KVM结构与原理分析

5.1、结构图

5.2、原理分析

①客户模式:客户机在操作系统中运行的模式,客户机分为内核模式和用户模式作用如下:

②用户模式:为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu工作在此模式下,主要控制libkvm工具(工具作用,控制内核中的KVM)来调用物理虚拟化资源,并通过ioctl来调用物理虚拟化资源来供虚拟机使用

③Linux内核模式:模拟内存、CPU,实现客户模式切换,处理从客户模式的推出,KVM即运行在此模式下,主要为虚拟机提供CPU、内存(硬件资源)的虚拟化,来供Qemu组件调用

5.3、KVM工作流程:

用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核模式。 KVM驱动为虚拟机创建虚拟 CPU 和虚拟内存,然后执行 VMLAU·NCH 指令进入客户模式,装载 Guest OS 并运行。Guest OS 运行过程中如果发生异常,则暂停Guest OS的运行并保存当前状态同时退出到内核模式来处理这些异常。 
内核模式处理这些异常时如果不需要 I/O则处理完成后重新进入客户模式。如果需要 I/O 则进入到用户模式, 则由 Qemu 来处理 I/O,处理完成后进入内核模式,再进入客户模式

六、KVM-创建虚拟机

6.1、部署环境

 1 修改主机名
 2 [root@server1 ~]# hostnamectl set-hostname kvm
 3 [root@server1 ~]# su
 4 
 5 将镜像光盘设为自动/永久挂载
 6 [root@kvm ~]# vim /etc/fstab
 7 /dev/cdrom /mnt iso9660 defaults 0 0    #末尾添加
 8 [root@kvm ~]# mount -a 
 9 [root@kvm ~]# df -hT
10 
11 制作本地仓库
12 [root@kvm ~]# cd /etc/yum.repos.d
13 [root@kvm yum.repos.d]# mkdir backup
14 [root@kvm yum.repos.d]# mv CentOS* backup
15 [root@kvm yum.repos.d]# vi local.repo
16 [local]
17 name=kvm
18 baseurl=file:///mnt
19 gpgcheck=0
20 enabled=1
21 
22 重新加载Yum仓库
23 [root@kvm yum.repos.d]# yum clean all
24 [root@kvm yum.repos.d]# yum makecache
25 
26 关闭防火墙和核心防护
27 [root@kvm yum.repos.d]# systemctl stop firewalld.service 
28 [root@kvm yum.repos.d]# setenforce 0

6.2、安装KVM

①安装KVM基本组件

 1 # 安装 GNOME 桌面环境  如果装了图形界面可以不需要装
 2 [root@kvm yum.repos.d]# yum groupinstall -y "GNOME Desktop"
 3 # KVM 模块
 4 [root@kvm yum.repos.d]# yum -y install qemu-kvm
 5 # 安装KVM 调试工具,可不安装
 6 [root@kvm yum.repos.d]# yum -y install qemu-kvm-tools
 7 # 构建虚拟机的命令行工具
 8 [root@kvm yum.repos.d]# yum -y install virt-install
 9 # qemu 组件,创建磁盘、启动虚拟机等
10 [root@kvm yum.repos.d]# yum -y install qemu-img
11 # 网络支持工具
12 [root@kvm yum.repos.d]# yum -y install bridge-utils
13 # 虚拟机管理工具
14 [root@kvm yum.repos.d]# yum -y install libvirt
15 # 图形界面管理虚拟机    
16 [root@kvm yum.repos.d]# yum -y install virt-manager

②检测CPU是否支持虚拟化

1 [root@kvm ~]# cat /proc/cpuinfo | grep vmx

③查看KVM模块是否已安装

1 [root@kvm ~]# lsmod | grep kvm
2 kvm_intel             170086  0 
3 kvm                   566340  1 kvm_intel
4 irqbypass              13503  1 kvm

④设置开启启动界面的显示模式

1 [root@kvm ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

6.3、设置KVM网络

KVM网络的两种模式:

① NAT: 默认设置,数据包由 NAT 方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络

② 网桥:这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)

6.3.1、使用Bridge网桥模式进行部署

1 [root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 

6.3.2、创建、编辑桥接网卡

1 [root@kvm ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-br0
2 [root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 

6.3.3、重启网卡

 1 [root@kvm ~]# systemctl restart network
 2 [root@kvm ~]# ifconfig
 3 br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 4         inet 20.0.0.10  netmask 255.255.255.0  broadcast 20.0.0.255
 5         inet6 fe80::b6fc:d281:690b:eab1  prefixlen 64  scopeid 0x20<link>
 6         ether 00:0c:29:9a:cd:27  txqueuelen 1000  (Ethernet)
 7         RX packets 25  bytes 1656 (1.6 KiB)
 8         RX errors 0  dropped 0  overruns 0  frame 0
 9         TX packets 35  bytes 4536 (4.4 KiB)
10         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
11 
12 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
13         ether 00:0c:29:9a:cd:27  txqueuelen 1000  (Ethernet)
14         RX packets 1320  bytes 110290 (107.7 KiB)
15         RX errors 0  dropped 0  overruns 0  frame 0
16         TX packets 739  bytes 100256 (97.9 KiB)
17         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

6.4、KVM部署于管理

6.4.1、创建KVM存储和镜像数据的目录、上传centos7镜像

1 [root@kvm ~]# mkdir -p /data_kvm/iso
2 [root@kvm ~]# mkdir -p /data_kvm/store
3 [root@kvm ~]# cd /data_kvm/iso/
4 [root@kvm iso]# ll
5 总用量 4415488
6 -rw-r--r--. 1 root root 4521459712 12月  8 15:26 CentOS-7-x86_64-DVD-1708.iso

6.4.2、使用虚拟系统管理器管理虚拟机

①创建存储池(iso、store)

1 [root@kvm ~]# virt-manager   #输入后会弹出虚拟系统管理器

 

 

 

 

 

②在store池中添加存储卷

③创建虚拟机

 

 然后一直点击前进并点击完成进入centOS安装画面

 

 

posted @ 2020-12-07 16:15  yy1299050947  阅读(380)  评论(0编辑  收藏  举报