KVM虚拟化环境安装

Posted 陈老师门徒计划

tags:

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

在前面的学习过程中,我们对虚拟化及KVM的理论做了深入探究,接下来我们就进一步学习如何实现KVM虚拟化环境及VM的相关操作。

1、KVM虚拟化环境安装

简单回顾一下KVM的知识点

KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。目前KVM已成为主流VMM之一,它包含一个为处理器提供底层虚拟化,可加载的核心模块kvm.ko(kvm-intel.ko或 kvm-amd.ko)。kvm还需要一个经过修改的QEMU 软件(qemu-kvm),作为虚拟机上层控制和界面。KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。 KVM可以运行多个其本身运行未改动的镜像的虚拟机,例如Windows,Mac OS X ,每个虚拟机都有各自的虚拟硬件,比如网卡、硬盘核图形适配器等。

 

KVM和QEMU的关系

QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT), AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了另一个独立的虚拟化解决方案:KVM+QEMU。

 

接下来聊聊基于CentOS Linux release 7.5.1804 (Core) 的环境下安装KVM虚拟化环境的详细过程。

系统版本:CentOS Linux release 7.5.1804 (Core)

#cat/etc/redhat-release

系统位数:x86_64

# uname -r

硬件支持:CPU开启虚拟化支持

如果是物理机的话在Bios里开启虚拟化支持,如有必要,还需在BIOS中开启VT-d。如果是用VMware Workstation做实验,建立的虚拟机的CPU要勾选虚拟化功能,这样虚拟机才会支持KVM虚拟化:虚拟机设置--处理器--勾选虚拟化InterVT-x/EPT或AMD-V/RVI(V)(虚拟机关机状态操作)

VT(Virtualization Technology):处理器虚拟化硬件支持

VT-D(VirtualizationTechonlogy for Directed I/O):I/O设备虚拟化硬件支持

 

主机名重命名

# cat /etc/hostname

kvm-server1

主机名修改后重启系统

或者

使用hostnamectl命令,hostnamectl set-hostname name

 

设置时间

#crontab -l

*/5 * * * * /usr/sbin/ntpdate ntp.api.bz

 

安装KVM环境

RedHat/CentOS  KVM 有如下两种安装方式:

1)在安装Linux系统时安装KVM

                 

         

 

2)在已有的Linux系统中安装KVM(这种安装方式是本文要重点介绍的)

检测是否支持KVM

KVM 是基于 x86 虚拟化扩展(Intel VT 或者 AMD-V) 技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。有返回结果,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。

# grep -E '(svm|vmx)' /proc/cpuinfo  或  egrep '(svm|vmx)'/proc/cpuinfo

注意:信息有输出表示支持虚拟化,否则就不支持虚拟化,无法安装KVM,也可能是没有开启CPU虚拟化支持。

 

查看是否加载KVM模块

# lsmod | grep kvm

kvm_intel             174841  0

kvm                   578518  1 kvm_intel

irqbypass              13503  1   kvm

如果没有加载,运行以下命令:

# modprobe kvm

 

# ll /dev/kvm

crw-------. 1 root root 10, 232 Sep 1016:54  /dev/kvm

 

在部署KVM虚拟化环境之前先了解下KVM虚拟化平台的网络模型

一般虚拟机网络的连接方式主要包括三种方式。主要如下:

1NAT模式:

2Bridge模式

桥接模式是使用比较多的模式,它使虚拟机拥有自己的独立网卡和IP,然后通过借用宿主机的网卡对外连接网络。它把宿主机的网卡当作了一种桥,通过这个桥连接外网的世界。在这种模式下,可以简单的理解成虚拟机和宿主机是两个不同的机器,有独立IP可以相互访问。对于虚拟机的IP获取,一般可以手动配置也可以通过DHCP获取得到。

桥接模式下客户机与宿主机处于同一网络环境,类似于一台真实的宿主机,直接访问网络资源,设置好后客户机与互联网,客户机与主机之间的通信都很容易。

Bridge方式适用于服务器虚拟化

选择:当需要外界能定位(找)到虚机时使用Bridge方式、当不需要外界定位到虚机时使用NAT方式。

 

3host-only:也叫隔离模式,意思就是将所有的虚拟机组成一个局域网,不能和外界通信,不能访问Internet,其他主机也不能访问虚拟主机,安全性高。

 

如何配置桥接网络

如果没有brctl命令(用来管理网桥的工具),则需要安装bridge-utils

# yum -y install bridge-utils

# systemctl restart network

配置KVM的网桥模式

一般来说,服务器可能有多个网卡,选择一个网卡当做网桥来与虚拟机通信

桥接网卡配置:

# cd /etc/sysconfig/network-scripts/

# cp ifcfg-ens33 ifcfg-br0

# cat ifcfg-br0

TYPE=Bridge                     //这一行修改为Bridge,(按照规范首字母大写)

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=none

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=br0                                 //修改设备名称为br0

#UUID=fead84ed-1171-4d14-b693-f80cac2fa9fd     //这一行注释

DEVICE=br0                                //修改设备为br0

ONBOOT=yes

IPADDR=192.168.1.9

PREFIX=24

GATEWAY=192.168.1.1

DNS=8.8.8.8

 

宿主机物理网卡配置,我的网卡是ens33:

# cat ifcfg-ens33

TYPE=Ethernet

BRIDGE=br0                                   //添加这一行,将物理接口桥接到桥接器,即网卡ens33桥接到br0设备上

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=none

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=fead84ed-1171-4d14-b693-f80cac2fa9fd

DEVICE=ens33

ONBOOT=yes

#PREFIX=24

#GATEWAY=192.168.1.1

#DNS=8.8.8.8

注意:在配置完网卡以后,你可能会遇见yum install error 的问题,不用担心,请执行 vi /etc/resolv.conf,添加 nameserver :8.8.8.8

 

重启网卡服务

# systemctl restart network

查看网卡

# brctl show

bridge name    bridge id        STP enabled      interfaces

br0      8000.000c299d13f1     no         ens33

查看ip信息

# ifconfig

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet192.168.1.9  netmask 255.255.255.0  broadcast 192.168.1.255

        ether00:0c:29:9d:13:f1  txqueuelen 1000  (Ethernet)

        RX packets609  bytes 50034 (48.8 KiB)

        RX errors 0  dropped 0 overruns 0  frame 0

        TX packets 41  bytes 3536 (3.4 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0 collisions 0

 

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        ether00:0c:29:9d:13:f1  txqueuelen 1000  (Ethernet)

        RX packets152901  bytes 174467359 (166.3 MiB)

        RX errors 0  dropped 0 overruns 0  frame 0

        TX packets73112  bytes 11194166 (10.6 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0 collisions 0

 

# cat /etc/resolv.conf

# Generated by NetworkManager

nameserver 8.8.8.8

 

# ping www.baidu.com

PING www.a.shifen.com (111.13.100.92) 56(84) bytes of data.

64 bytes from 111.13.100.92 (111.13.100.92): icmp_seq=1 ttl=55time=26.1 ms

64 bytes from 111.13.100.92 (111.13.100.92): icmp_seq=2 ttl=55time=26.6 ms

……

 

安装libvirt及kvm

libvirt是为了更方便地管理各种Hypervisor而设计的一套虚拟化库,libvirt作为中间适配层,让底层Hypervisor对上层用户空间的管理工具(virsh,virt-manager)做到完全透明,因为libvirt屏蔽了底层各种Hypervisor的细节,为上层管理工具提供了一个统一的、较稳定的接口(API)

libvirt项目最初是为Xen设计的一套API,但是目前对KVM等其他Hypervisor的支持也非常的好。libvirt支持多种Hypervisor,既支持包括KVM、QEMU、Xen、VMware、VirtualBox等在内的平台虚拟化方案,又支持OpenVZ、LXC等Linux容器虚拟化系统,还支持用户态Linux(UML)的虚拟化。

libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口(API),而且一些常用的虚拟机管理工具和云计算框架平台(如OpenStack、OpenNebula、Eucalyptus等)都在底层使用libvirt的应用程序接口,结构如下图

和手动使用qemu-kvm命令启动虚拟机不同,Libvirt使用xml文件来定义虚拟机的配置细节,就像配置虚拟机CPU,内存大小,网络,磁盘这些都可以在xml文件中定义,然后使用这些定义启动虚拟机,所谓更改虚拟机配置,其实就是更改这个虚拟机的xml文件参数(更改某些参数需要重启虚拟机才会生效)

 

配置yum环境

使用阿里云的yum源

先备份centos7自带的yum源仓库文件

# mkdir /etc/yum.repos.d/centos_yumrepo

# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/centos_yumrepo

下载新的CentOS-Base.repo 到/etc/yum.repos.d/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

之后运行yum makecache生成缓存

注:也可以使用epel源

yum -y install  qemu-kvmqemu-img qemu-kvm-tools virt-manager libvirt libvirt-python libvirt-clientvirt-* bridge-utils libiscsi libcanberra-gtk2 libvirt-cim.x86_64 libvirt-java.noarch libiscsi-1.9.0-7.el7.x86_64 dbus-devel  libguestfs-tools acpid

重启系统以便加载 kvm 模块

查看虚拟化环境

开启kvm服务,并且设置其开机自动启动

# systemctl start libvirtd.service

# systemctl enable libvirtd.service

# systemctl start acpid.service    (开启虚拟机的电源模式服务)

# systemctl enable acpid.service

# systemctl status libvirtd

# systemctl status acpid

查看状态操作结果,如Active: active (running),说明运行情况良好

 

查看kvm模块支持

# lsmod | grep kvm

查看虚拟工具版本

# virsh --version

3.9.0

# virt-install --version

1.4.3

为方便起见,创建一个link

# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm

# qemu-kvm -version

QEMU emulator version 1.5.3 (qemu-kvm-1.5.3-156.el7_5.5),Copyright (c) 2003-2008 Fabrice Bellard

 

查看网桥

# brctl show

bridge name    bridge id        STP enabled      interfaces

br0      8000.000c299d13f1     no         ens33

virbr0         8000.52540012930f     yes        virbr0-nic

 

再来查看下KVM是否安装成功,执行:

# virsh -c qemu:///system list   或者  #virsh list  (-c qemu可以省略)

如果输入结果像下面这样的,那么成功了:

Id    Name                           State

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

 

到此kvm虚拟化环境安装完毕。


以上是关于KVM虚拟化环境安装的主要内容,如果未能解决你的问题,请参考以下文章

KVM虚拟化平台环境部署

KVM虚拟环境安装

KVM系列教程安装KVM

Deepin_kvm虚拟机群部署

CentOS7.4——KVM虚拟化一 安装配置及基本操作

KVM虚拟化安装配置及克隆管理