KVM虚拟化及部署!

Posted 龙少。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KVM虚拟化及部署!相关的知识,希望对你有一定的参考价值。

一.虚拟化背景

1.了解云计算

用户可以在任何时间、地点通过网络获取所需要的计算资源、网络资源、存储资源并且按量计费、弹性伸缩、

云计算就是一个大的租赁渠道。

云平台(如阿里云、华为云)使用到的底层技术是openstack,而openstack就是利用了虚拟化技术和物理资源集成的方式将资源划分给不同的用户来使用的。

2.虚拟化产生背景

美国环境保护EPA报告中曾经统计过一组统计数据::EPA研究服务器和数据中心得能源效率时发现,实际上服务器只有5%得时间时在工作的,其他时间一直处于休眠状态;

那么通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机上同时运行多个逻辑计算机,同时每个逻辑计算机可运行不同的操作系统,应用程序都可以在相互独立的空间内运行而互相不影响,从而提高计算机的工作效率

3.虚拟化技术实现方式

(1)在一个操作系统中(win10) 模拟多个操作系统(centos、win10、suse),同时每个操作系统可以跑不同的服务(nginx+tomcat) ,从而实现一台宿主机搭建一个集群(从整体)

(2)通过软件/应用程序的方式,来实现物理硬件的功能
比如ensp软件的形式模拟出硬件设备(二、三层交换机、三层路由器、PC机、防火墙等等)

4.虚拟化的类型

(1)全虚拟化

将物理硬件资源全部通过软件的方式抽象化,最后进行调用
使用的方法:使用hypervisor (VMM) 软件,其原理是在底层硬件和服务器之间建立一个抽象层,而基于核心的虚拟机是面向Linux系统的开源产品hypervisor(VMM)可以捕捉CPU的指令,为指令访问硬件控制器和外设充当中介。

(2)半虚拟化

需要修改操作系统

(3)直通

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

5.虚拟化的特性

(1)优势

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

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

动态调整机器/资源配置(虚拟化把系统的应用程序和服务硬件分离、提高了灵活性)高可靠(可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境)

(2)劣势

前期高额费用(初期的硬件支持,对于虚拟化支持)

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

更大的错误影响面(本地物理机down机会导致虚拟机均不可用,同
时可能虚拟机中文件全部损坏)实施配置复杂、管理复杂(管理人员运维、排障困难)

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

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

二.KVM简介

1.简介

广义的KVM实际上包含两个部分,一部分是基于Linux内核支持的KVM内核模块,另一部分是经过简化和修改的Qemu

KVM内核模块模拟处理器和内存以支持虚拟机的运行,Qemu主要处理I/O以及为用户提供一个用户空间来进行虚拟机的管理。两者相互结合,相辅相成,构成了一个完整的虚拟化平台

2.kvm运行时的3种模式

(1)客户模式

可以简单理解成客户机在操作系统运行中的模式,客户模式又分为内核模式和用户模式

(2)用户模式

为用户提供虚拟机管理的用户空间以及代表用户执行I/O,Qemu运行在这个模式之下

(3)内核模式

模拟CPU以及内存,实现客户模式的切换,处理从客户模式的退出。

3.KVM原理

(1)Guest:客户机系统,包括CPU (vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),
被KVM置于一种受限制的CPU 模式下运行。

(2)KVM内核模块模拟处理器和内存以支持虚拟机运行

(3)Qemu主要处理 I/O 以及为客户提供一个用户空间 /dev/kvm 工具libvirt 来进行虚拟机管理
ioctl(定义)专用于设备输入输出操作的系统调用
libvirt:KVM管理工具
以上构成一个完整的虚拟化平台

简单理解:
KVM驱动提供处理器、内存的虚拟化,以及客户机 I/O 的拦截(拦截敏感指令),guest的 I/O 被拦截后.交由Qemu处理
Qemu利用接口libkvm调用(ioctl)虚拟机设备接口/dev/kvm来分配资源、管理、维护虚拟机

4.KVM工作流程

(1)用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。KVM驱动为虚拟机创建虚拟CPU和虚拟内存,

(2)然后执行VMLAU :NCH指令进入客户模式,装载Guest OS并运行。Guest OS运行过程中如果发生异常,则暂停Guest OS的运行并保存当前状态同时退出到内核模式来处理这些异常。

(3)内核模式处理这些异常时如果不需要I/o则处理完成后重新进入客户模式。如果需要I/o则进入到用户模式,则由Qemu 来处理I/O, 处理完成后进入内核模式,再进入客户模式

三.KVM虚拟化平台部署

1.虚拟机资源

虚拟机设置–处理器–勾选虚拟化 Intel-VT-x/EPT 或 AMD-V/RVI(V)
添加磁盘并给大的内存

dev目录下会生成一个KVM虚拟设备,相当于虚拟接口,用于加强用户模式下kvm资源的输送和管理虚拟机

2.实验环境

(1)修改主机名

[root@localhost ~]# hostnamectl set-hostname kvm
[root@localhost ~]# su
[root@kvm ~]# 

(2)将镜像光盘设为自动/永久挂载

[root@kvm ~]# mkdir /mount

[root@kvm ~]# vim /etc/fstab

/dev/cdrom /mount iso9660 defaults 0 0

[root@kvm ~]# mount -a
mount: /dev/sr0 写保护,将以只读方式挂载
[root@kvm ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        50G  5.1G   45G   11% /
devtmpfs                devtmpfs  3.8G     0  3.8G    0% /dev
tmpfs                   tmpfs     3.9G     0  3.9G    0% /dev/shm
tmpfs                   tmpfs     3.9G   13M  3.8G    1% /run
tmpfs                   tmpfs     3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  179M  836M   18% /boot
/dev/mapper/centos-home xfs       247G  112M  247G    1% /home
tmpfs                   tmpfs     781M  4.0K  781M    1% /run/user/42
tmpfs                   tmpfs     781M   28K  781M    1% /run/user/0
/dev/sr0                iso9660   4.3G  4.3G     0  100% /mnt

(3)环境优化

设置DNS反向解析,设置为NO 可以让客户端ssh连接服务器

[root@kvm ~]# vim /etc/ssh/sshd_config

115 UseDNS no		##取消注释,yes改为no

(4)制作本地yum仓库

[root@kvm yum.repos.d]# cd /etc/yum.repos.d/
[root@kvm yum.repos.d]# mkdir abc
[root@kvm yum.repos.d]# mv CentOS-* abc
[root@kvm yum.repos.d]# ls
[root@kvm yum.repos.d]# abc
[root@kvm yum.repos.d]# vim local.repo

[local]
name=kvm
baseurl=file:///mount		##
gpgcheck=0
enable=1

[root@kvm yum.repos.d]# yum clean all
已加载插件:fastestmirror, langpacks
正在清理软件源: local
Cleaning up list of fastest mirrors
Other repos take up 1.0 G of disk space (use --verbose for details)

[root@kvm yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
local                                                           | 3.6 kB  00:00:00
(1/4): local/group_gz                                           | 166 kB  00:00:00
(2/4): local/filelists_db                                       | 3.2 MB  00:00:00
(3/4): local/primary_db                                         | 3.1 MB  00:00:00
(4/4): local/other_db                                           | 1.3 MB  00:00:00
元数据缓存已建立
[root@kvm yum.repos.d]#

(5)关闭防火墙、核心防护

[root@kvm yum.repos.d]# systemctl stop firewalld.service
[root@kvm yum.repos.d]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@kvm yum.repos.d]# setenforce 0

3.安装KVM

(1)安装KVM基本组件

[root@kvm yum.repos.d]# yum groupinstall -y "GNOME Desktop"		#安装GNOME桌面环境,若装了图形界面可以不需要安装
[root@kvm yum.repos.d]# yum -y install qemu-kvm					#安装KVM模块
[root@kvm yum.repos.d]# yum -y install qemu-kvm-tools			#安装KVM调试工具,可不安装
[root@kvm yum.repos.d]# yum -y install virt-install				#构建虚拟机的命令行工具
[root@kvm yum.repos.d]# yum -y install qemu-img					#qemu组件,创建磁盘、启动虚拟机等
[root@kvm yum.repos.d]# yum -y install bridge-utils				#网络支持工具
[root@kvm yum.repos.d]# yum -y install libvirt					#虚拟机管理工具
[root@kvm yum.repos.d]# yum -y install virt-manager				#图形界面管理虚拟机

检测查看cpu是否支持虚拟化

[root@kvm yum.repos.d]# cat /proc/cpuinfo | grep vmx

查看KVM模块是否安装

[root@kvm yum.repos.d]# lsmod | grep kvm
kvm_intel             183621  0
kvm                   586948  1 kvm_intel
irqbypass              13503  1 kvm

(2)设置开启启动界面的显示模式

[root@kvm yum.repos.d]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
[root@kvm yum.repos.d]#

4.设置KVM网络

KVM网络的两种模式:

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

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

使用bridge网桥模式部署

[root@kvm yum.repos.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
UUID=ae9919e1-f754-4a43-9d63-a9c7e2fa74af
DEVICE=ens33
ONBOOT=yes
#IPADDR=192.168.206.177
#NETMASK=255.255.255.0
#GATEWAY=192.168.206.2
#DNS1=114.114.114.114
BRIDGE=br0

创建编辑桥接网卡

[root@kvm yum.repos.d]# vim /etc/sysconfig/network-scripts/ifcfg-bro

TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6PEERDNS=yes
IPV6PEERROUTES=yes
IPV6_ADDR_GEN_MODE=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.206.111
NETMASK=255.255.255.0
GATEWAY=192.168.206.2

5.KVM部署与管理

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

[root@kvm yum.repos.d]# mkdir -p /data_kvm/iso					#创建KVM存储镜像的目录
[root@kvm yum.repos.d]# mkdir -p /data_kvm/iso/store			#创建存储池的目录

[root@kvm yum.repos.d]# mkdir /abc/
[root@kvm yum.repos.d]# cd /abc/								#上传虚拟机的镜像文件

[root@kvm abc]# ls
CentOS-7-x86_64-DVD-1810-7.6.iso

[root@kvm abc]# ll
总用量 4481024
-rw-r--r--. 1 root root 4588568576 822 03:23 CentOS-7-x86_64-DVD-1810-7.6.iso
[root@kvm abc]#
[root@kvm abc]# cp -p CentOS-7-x86_64-DVD-1810-7.6.iso /data_kvm/iso/
[root@kvm abc]# cd /data_kvm/iso/
[root@kvm iso]# ls
CentOS-7-x86_64-DVD-1810-7.6.iso  store
[root@kvm iso]# ll
总用量 4481024
-rw-r--r--. 1 root root 4588568576 822 03:23 CentOS-7-x86_64-DVD-1810-7.6.iso
drwxr-xr-x. 2 root root          6 822 03:14 store
[root@kvm iso]#

[root@kvm iso]# systemctl restart network

(2)使用虚拟系统管理器管理虚拟机

① 打开虚拟系统管理器

② 创建存储池

双击QEMUKVM

然后选择存储路径



③ 添加存储卷


④ 创建镜像池


⑤ 创建虚拟机












正常选择选项进行虚拟机安装即可


以上是关于KVM虚拟化及部署!的主要内容,如果未能解决你的问题,请参考以下文章

部署kvm虚拟化平台及功能管理

CentOS6.5部署KVM及实现在线迁移

KVM及虚拟机部署

KVM及虚拟机部署

KVM及虚拟机部署

KVM及虚拟机部署