目录
一、虚拟化技术
虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU 并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
二、虚拟化的历史
● 1961年,IBM709机器实现了分时系统,将CPU占用切分为多个极短的时间片(1/100sec)每一个时间片执行不同的工作,通过对这些时间片进行轮询从而将一个CPU伪装成多个CPU
● 1972年, IBM正式将 system 370机的分时系统命名为虚拟机
● 1990年, IBM推出的 system390 机支持逻辑分区(将一个CPU分为多份,相互独立,也就是逻辑分割)
● Xen 2003年问世,是一个外部的hypervisor程序(虚拟机管理程序),能够控制虚拟机和给多个客户机分配资源
● KVM:2007年问世,现已内置在kernel内核中的
2.1 Xen和KVM的区别
● Xen:同时支持虚拟化与半虚拟化,需要在Linux系统内核之上再运行一个由Xen提供的微内核,由微内核控制虚拟化计算和内存资源的分配与使用 。因为诞生时间很早,那时硬件和系统内核层面根本没有支持虚拟化的,所以Xen被设计为不依赖也不使用硬件的虚拟化支持,通过对操作系统进行显式地修改(“移植”)以使其可以在Xen上作为虚机运行。支持的虚拟化技术:全虚拟化,半虚拟化
● KVM:是Linux完全原生的全虚拟化解决方案,就是在Linux内核中添加的一个虚拟机模块,直接使用Linux内核中已经完善的进程调度、内存管理与硬件设备交互等部分,使Linux成为一个可以支持运行虚拟机的Hypervisor。因此,KVM并不是一个完善的模拟器,而只是一个提供虚拟化功能的内核插件,它的具体的模拟器工作是借助工具(QEMU)来完成。支持的虚拟化技术:全虚拟化
三、虚拟化的类型
- 全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
● 使用的方法:使用 hypervisor(VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层,而基于核心的虚拟机是面向Linux系统的开源产品hypervisor(VMM)可以捕捉CPU的指令,为指令访问硬件控制器和外设充当中介。 - 半虚拟化:需要修改操作系统
- 直通:直接使用物理硬件资源(需要支持,还不完善)
四、虚拟化的优劣势
4.1 优势
- 集中化管理(远程管理、维护)
- 提高硬件利用率(物理资源利用率低-例如峰值,虚拟化解决了“空闲”容量)
- 动态调整机器/资源配置(虚拟化把系统的应用程序和服务硬件分离、提高了灵活性)
- 高可靠(可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境)
4.2 劣势
- 前期高额费用(初期的硬件支持)
- 降低硬件利用率(特定场景-例如极度吃资源的应用不一定适合虚拟化)
- 更大的错误影响面(本地物理机down机会导致虚拟机均不可用,同时可能虚拟机中文件全部损坏)
- 实施配置复杂、管理复杂(管理人员运维、排障困难)
- 一定的限制性(虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序及供应商结合使用)
- 安全性(虚拟化技术自身的安全隐患)
五、KVM简介
● KVM:Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。
● KVM 是基于虚拟化扩展的 X86 硬件的开源Linux原生的全虚拟化方案(要求cpu支持Intel-VT-x或AMD-V)
● KVM 内嵌于内核模块中,模拟处理器和内存以支持虚拟机运行
● 虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度,虚拟机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KVM 能够使用 Linux 内核的已有功能,但 KVM 本身不执行任何模拟。需要客户空间程序(虚拟机)通过/dev/kvm(此虚拟设备需要开起硬件辅助虚拟化才能看到)接口设置一个客户机虚拟服务器的地址空间,并且由Qemu模拟I/O(ioctl)进行调度资源和维护管理
六、KVM架构及原理
KVM 虚拟化架构分为三种模式
- 客户模式(guestOS):
VM中的OS为GuestOS客户机在操作系统中运行的模式,客户机分为内核模式和用户模式。 - 用户模式:
为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu 工作在此模式下(Qemu 的主要功能) - linux内核模式:
模拟CPU、内存,实现客户模式切换,处理从客户模式的推出,KVM 即运行在此模式下
七、KVM原理
- Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行。
- KVM 内核模块模拟处理器和内存以支持虚拟机运行
- Qemu 主要处理 I/O 以及为客户提供一个用户空间 /dev/kvm 工具 libvirt 来进行虚拟机管理
● libvirt:KVM 管理工具,除了可以管理 KVM 这类 VMM,还可以管理 Xen,VirtualBox,甚至OpenStack 底层
● libvirt 包含3个组件:后台 daemon 程序libvirtd、API库、命令行工具 virsh
八、安装虚拟机
九、KVM虚拟化平台部署
● 修改主机名
[root@localhost ~]# hostnamectl set-hostname kvm
[root@localhost ~]# su
[root@kvm ~]#
● 将镜像光盘设为自动/永久挂载
[root@kvm ~]# vim /etc/fstab
/dev/cdrom /mnt iso9660 defaults 0 0
[root@kvm ~]# mount -a
mount: /dev/sr0 写保护,将以只读方式挂载
[root@kvm ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
...省略部分
/dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt
● 环境优化
设置DNS反向解析
#是否反解DNS,设置为NO可以让客户端连接服务器更快
[root@kvm ~]# vim /etc/ssh/sshd_config
115 UseDNS no#取消DNS注释,改为NO
● 制作本地YUM仓库
[root@kvm ~]# cd /etc/yum.repos.d/
[root@kvm yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@kvm yum.repos.d]# mkdir backup
[root@kvm yum.repos.d]# ls
backup CentOS-Debuginfo.repo CentOS-Sources.repo
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo
[root@kvm yum.repos.d]# mv C* backup/
[root@kvm yum.repos.d]# ls
backup
[root@kvm yum.repos.d]# vim local.repo
[local]
name=centos
baseurl=file:///mnt
gpgcheck=0
enable=1
[root@kvm yum.repos.d]# yum clean all#清空yum仓库
[root@kvm yum.repos.d]# yum makecache #加载yum数据
● 关闭防火墙、核心防护
[root@kvm ~]# systemctl stop firewalld
[root@kvm ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@kvm ~]# setenforce 0
● 安装KVM基本组件
#安装 GNOME 桌面环境,如果装了图形界面可以不需要装
yum groupinstall -y "GNOME Desktop"
#KVM 模块
yum -y install qemu-kvm
#安装KVM 调试工具,可不安装
yum -y install qemu-kvm-tools
#构建虚拟机的命令行工具
yum -y install virt-install
#qemu 组件,创建磁盘、启动虚拟机等
yum -y install qemu-img
#网络支持工具
yum -y install bridge-utils
#虚拟机管理工具
yum -y install libvirt
#图形界面管理虚拟机
yum -y install virt-manager
[root@kvm ~]# yum -y install qemu-kvm qemu-kvm-tools virt-install qemu-img bridge-utils libvirt virt-manager
● 检测CPU是否支持虚拟化
AMD处理器查看svm
Intel处理器查看vmx
[root@kvm ~]# cat /proc/cpuinfo | grep svm
● 查看CPU是否支持虚拟化
● 查看KVM模块是否已安装
[root@kvm ~]# lsmod | grep kvm#lsmod:显示已载入的系统模块
● 设置开启启动界面的显示模式
[root@kvm ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
● 设置KVM网络
KVM网络的两种模式:
- NAT: 默认设置,数据包由 NAT 方式通过主机的接口进行
传送,可以访问外网,但是无法从外部访问虚拟机网络 - 网桥:这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)
● 使用Bridge网桥模式进行部署
修改ens-33网卡
[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
#IPADDR=192.168.112.111
#NETMASK=255.255.255.0
#GATEWAY=192.168.112.2
#DNS=192.168.112.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=2c8a16a0-7b41-4a34-b480-046a227efb9d
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0#删除原先地址,设置为网桥模式,关联br0网卡
● 创建、编辑桥接网卡
[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=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.112.111
NETMASK=255.255.255.0
GATEWAY=192.168.112.2
● KVM部署与管理
创建KVM存储和镜像数据的目录、上传centos7镜像
[root@kvm network-scripts]# mkdir -p /data_kvm/iso
[root@kvm network-scripts]# mkdir -p /data_kvm/store#虚拟机存储的目录
[root@kvm ~]# cd /data_kvm/iso/
[root@kvm iso]# ls
CentOS-7-x86_64-DVD-1708.iso
● 使用虚拟系统管理器管理虚拟机
[root@kvm iso]# virt-manager
- 创建存储池
iso用于放置镜像文件
store用于安装新系统
- 创建存储卷
- 创建虚拟机