云计算大数据:KVM虚拟化技术实战(一)

1、虚拟化是什么

虚拟化是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理,优化资源的解决方案,通过模拟不同的元件做到资源的隔离和资源的充分利用。例如CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

2、虚拟化发展的阶段

到目前为止,虚拟化经历了五个比较明显的阶段,分别是全模拟、分层模拟、半虚拟化、全虚拟化、容器虚拟化。全模拟是指CPU、网卡、芯片、磁盘都是通过软件模拟的,特点是慢;分层模拟采用的是捕获和翻译技术,对全虚拟化进行组合或虚拟化的不同层次;半虚拟化通过改造虚拟机器,让虚拟机明白自己就是一个虚拟机从而执行一些指令;全虚拟化是指2005英特尔支持硬件层面(主要是CPU)的虚拟化之后的时间段,容器虚拟化是现在比较火的虚拟化技术,以docker为代表,主要是进程间的隔离,资源消耗低且具备资源隔离的特性。

3、主流虚拟化软件

目前主流的虚拟化技术主要有: KVM 、 Xen 、 VMware(VirtualBox)、Hyper-v。

Xen 和KVM ,是开源免费的虚拟化软件。

VMware是付费的虚拟化软件。

Hyper-v是微软windows 2008 R2附带的虚拟化组件,需要花钱买授权。

虚拟Linux用哪些软件?

如果是虚拟Linux,建议首先使用Xen ,支持Linux的半虚拟化,可以直接使用主系统的CPU和磁盘及网络资源,达到较少的虚拟化调度操作,可以达到非常高的性能,但Xen 操作复杂,维护成本较高。其次我们推荐KVM 来虚拟Linux,Linux本身支持KVM 的virtio技术,可以达到少量的虚拟化调度操作,得到较高的系统性能。

虚拟windows用那些软件?

在有授权的情况下,虚拟windows,建议使用hyper-v。

没有授权的情况下,实验环境使用VMware,企业生产环境建议使用KVM,可以从redhat那里免费拿到针对windows优化过的磁盘和网络的驱动程序,可以达到较高的性能(几乎与hyper-v性能持平)

不打算买厂商支持,其中vmware和hyper-v,是不建议使用的,主要是授权问题。

4、KVM虚拟化

KVM是指基于Linux内核的虚拟机(Kernel-base Virtual Machine),2010年4月发布的RHEL6.0,将KVM增加到Linux内核是Linux发展的一个重要里程碑,这也是第一个整合到Linux主线内核的虚拟化技术。

一个普通的Linux进程有两种运行模式:内核模式和用户模式( 用户模式是指进程在用户代码中运行。内核模式是指进程进入内核代码,执行内核的代码),KVM增加了第三种模式:客户模式(有自己的内核和用户模式)。这里的客户模式,就相当于你在VMware中安装了自己的某个windows操作系统一样。在KVM模型中,每一个虚拟机都是一个由Linux调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。

简单的类比关系就是,KVM相当于是windows版本的VMware,我们可以在KVM中创建很多其他版本的操作系统实例,只不过KVM在创建实例的时候,需要一些辅助的工具,比如QEMU-KVM和Virt-manager。

5、KVM 的管理工具

KVM仅仅是Linux内核的一个模块

在 Linux 系统中,首先我们可以用modprobe(modprobe是linux的一个命令,可载入指定的个别模块,或是载入一组相依的模块)系统工具去加载 KVM 模块,如果用 RPM 安装 KVM 软件包,系统会在启动时自动加载模块。加载了模块后,才能进一步通过其他工具创建虚拟机。

但KVM仅仅是Linux内核的一个模块,仅有 KVM 模块是远远不够的,因为用户无法直接控制内核模块去做事情,还必须有一个用户空间的工具。

用户工具QEMU-KVM

QEMU是一套模拟CPU的开源软件。KVM作为内核的一个模块,可以通过QEMU提供的模拟方式,来使用处理器。这样,KVM就提供了一个模拟的(虚拟的)硬件层,虚拟机就运行在这个模拟的硬件层之上。


云计算大数据:KVM虚拟化技术实战(一)_第1张图片

上图,是KVM虚拟机的整体架构。KVM内核模块在运行时按需加载进入内核空间运行。KVM本身不执行任何硬件设备模拟,需要用户空间程序QEMU通过/dev/kvm接口设置一个虚拟客户机的地址空间,向它提供模拟的I/O等硬件设备。

Libvirt/Virsh/Virt-manager:

尽管 QEMU-KVM 工具可以创建和管理 KVM 虚拟机,RedHat为 KVM 开发了更通用的辅助工具libvirt。Libvirt是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持Xen等其他虚拟机。

使用libvirt,你只需要通过libvirt提供的函数连接到 KVM 或Xen宿主机,便可以用同样的命令控制不同的虚拟机了。

Libvirt不仅提供了API,还自带一套基于文本的管理虚拟机的命令virsh,你可以通过使用virsh命令来使用libvirt的全部功能。

同时还能使用图形界面进行管理操作,其工具是Virt-manager。他是一套用 python 编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机。Virt-manager 就是利用libvirt的 API 实现的。

6、KVM安装说明

KVM的安装步骤大致如下:

1、准备一台物理机,并安装CentOS 6.x以上的Linux的发行版

这台可以运行最新linux内核的Intel处理器(含VT虚拟化技术)或AMD处理器(含SVM安全虚拟机技术的AMD处理器,也叫AMD-V)

2、安装KVM对应的软件包

3、在KVM中创建虚拟机

通过QEMU-IMG命令创建一个硬盘,第一次接触请选择raw格式

通过virt-install命令安装并启动虚拟机

指定虚拟机的内存、CPU、网络信息

指定虚拟机的网络模式,生产环境使用桥接模式

指定VNC的端口及密码信息

4、下载VNC软件server--client

5、配置VNC软件信息

主要是解决VNC闪退的问题

6、通过VNC连接新创建的虚拟机

根据端口号进行配置

7、在虚拟机中安装系统

8、配置虚拟机的IP地址

7、KVM部署实践

7.1、安装Cent OS 6.X系统

[root@localhost ~]# cat /etc/redhat-release

CentOS release 6.5 (Final)

7.2、检查系统是否支持虚拟化

cat /proc/cpuinfo |grep 'vmx'

cat /proc/cpuinfo |grep 'svm'

依次执行以上两条命令,看看是否有返回值。返回值参考如下:

如果输出的结果包含VMX,它是Intel处理器虚拟机技术标志;

如果包含SVM,它是AMD处理器虚拟机技术的标志,

如果你什么都没有得到,那应你的系统并没有支持虚拟化的处理,不能使用KVM,

另处linux发行版本必须在64bit环境中才能使用KVM。

7.3、更新Linux操作系统软件

yum update

yum upgrade

这两个命令会下载大量的安装包,根据网速不同,需要等待的时长不一。

如果对网速有要求,建议换成国内的yum源地址。

网易Yum源配置

---------------------------------------------------------------

首先备份/etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份)

CentOS7 wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

CentOS6 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

CentOS5 wget http://mirrors.163.com/.help/CentOS5-Base-163.repo

运行以下命令生成缓存

yum clean all

yum makecache

7.4、关闭防火墙

(1) 重启后永久性生效:

开启:chkconfig iptables on

关闭:chkconfig iptables off

(2) 即时生效,重启后失效:

开启:service iptables start

关闭:service iptables stop

内部环境建议永久关闭,永久关闭之后,需要重启

7.5、关闭selinux

(1) 重启后永久性生效:

vi /etc/sysconfig/selinux

SELINUX=disabled

编辑/etc/sysconfig/selinux文件,将文件中的SELINUX配置项改成disabled。

(2) 即时生效,重启后失效:

setenforce 0

SELINUX作为军用级别的防火墙,一般在生产环境中都会关闭掉,不关掉会有很多异常。

建议永久关闭,永久关闭之后,需要重启

7.6、安装KVM相关软件包

yum -y install kvm python-virtinst libvirt bridge-utils virt-manager qemu-kvm-tools virt-viewer virt-v2v

7.7、确认libvirtd是否正常启动

[root@node-3 ~]# /etc/init.d/libvirtd status

libvirtd (pid 3793) is running...

如果没有启动,可以尝试手动启动

/etc/init.d/libvirtd restart

回顾:

RedHat为 KVM 开发了更通用的辅助工具libvirt。Libvirt是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持Xen等其他虚拟机。详见章节5。

7.8、检查KVM是否加载成功

显示结果如下表示kvm模块已经加载,如果没有输出信息,则表示没有加载成功

[root@node-3 ~]# lsmod | grep kvm

kvm_intel 55464 30

kvm 345070 1 kvm_intel

7.9、检查KVM是否成功安装

[root@node-3 ~]# virsh list --all

Id Name State

----------------------------------------------------

请看下篇

你可能感兴趣的:(技术交流,传智播客西安中心)