KVM虚拟化部署

KVM虚拟化

一、虚拟化概述

1.1.什么是虚拟化技术

1.2.虚拟化技术工作原理

1.3.虚拟化类型

1.4.虚拟化的优势

1.5.虚拟化产品概要

1.6.虚拟机运行架构

二、KVM虚拟化

2.1.KVM概述

2.2.KVM相关组件介绍

2.3.KVM部署

2.3.1.KVM相关组件安装

2.3.2.设置网卡:

2.3.3.创建虚拟机系统

2.4.虚拟机克隆

2.5.虚拟机快照

一、虚拟化概述

1.1.什么是虚拟化技术

虚拟化是一种技术,可以利用以往局限于硬件的资源来创建有用的 IT 服务。它让您能够将物理计算机的工作能力分配给多个用户或环境,从而充分利用计算机的所有能力。

举一个实际例子,假设你有 3 台物理服务器,分别用于不同的特定用途。其中一台是邮件服务器,一台是 Web 服务器,最后一台则用于运行企业内部的传统应用。每台服务器仅使用了大约 30% 的能力,没有完全发挥它们的潜能。但是,由于传统应用对内部运营非常重要,您必须将其连同所运行的第三台服务器予以保留,对吗?

过去确实如此。相对简单和可靠的做法是在单独的服务器上运行单独的任务:1 台服务器, 1 个运行操作系统,1 个处理任务。我们很难让 1 台服务器有多个大脑。但是,借助虚拟化技术,您可以将邮件服务器分为 2 个能够处理独立任务的特殊服务器,从而实现传统应用的迁移。您仍然使用相同的硬件,但可以更加高效地利用这些资源。

考虑到安全问题,您可以再次划分第一台服务器,从而可以处理另一项任务,将其使用率从 30% 提高到 60%,甚至提高到 90%。这样,现在空闲的服务器可以用于其他任务或停用,以降低散热和维护成本。

1.2.虚拟化技术工作原理

一种叫做 Hypervisor (虚拟机监控程序)的软件可有效分隔物理资源,并将这些资源分配给不同虚拟环境(也就是需要这些资源的任务)使用。虚拟机监控程序可能位于操作系统的顶层(例如在便携式计算机上),或者直接安装在硬件上(例如服务器),这是大多数企业使用虚拟化的方式。虚拟机监控程序接管物理资源,并对它们进行划分,以便虚拟环境能够对其进行使用。

XEN

来自物理环境的资源根据需要进行了分区,分配给了很多虚拟环境使用

。用户在虚拟环境(通常称为客户机或虚拟机)内部,能够与计算任务交互,并运行计算。虚拟机作为单个数据文件运行。与任何数字文件相同,虚拟机可从一台计算机迁移至另一台计算机,在任何一台计算机上打开,工作方式都是相同的。

当虚拟环境正在运行时,如果用户或程序发出一条指令,请求来自物理环境的更多资源, 虚拟机监控程序就会将请求传递到物理系统并缓存更改,所有这些步骤都接近本机速度(特别是如果该请求来自基于 KVM,即基于内核的虚拟机的开源虚拟机监控程序)。

1.3.虚拟化类型

数据虚拟化

分散在各处的数据可以整合为单个来源。实现数据虚拟化后,企业可将数据视为一个动态供应源,进而获得相应的处理能力,可以汇总多个来源的数据、轻松容纳新的数据源,并按用户所需转换数据。数据虚拟化工具处于多个数据源的前端,可将它们化零为整,作为统一的数据源,以符合业务需求的形式、在正确的时间,向任意应用或用户提供所需数据。

桌面虚拟化

人们常把桌面虚拟化与操作系统虚拟化混淆,实际上,后者允许您在单台机器上部署多个操作系统,而桌面虚拟化则允许中央管理员(或自动化管理工具)一次向数百台物理机部署模拟桌面环境。不同于需要在每台机器上进行物理安装、配置和更新的传统桌面环境,桌面虚拟化可让管理员在所有虚拟桌面上执行大规模的配置、更新和安全检查。

服务器虚拟化

服务器是用于处理大量特定任务的计算机,这样可让其他计算机(例如便携式计算机和台式机)能够执行其他各种任务。通过虚拟化服务器,可以让它们执行特定功能,这需要进行分区,以便使用各个组件来运行多种功能。

操作系统虚拟化

操作系统虚拟化在内核中进行,内核则是操作系统的中央任务管理器。这是并行运行 Linux 和 Windows 环境的实用方式。此外,企业还可将虚拟操作系统应用于多台计算机,以实现以下功能:

  • 降低批量硬件成本,因为计算机不需要具备很强的开箱即用能力。
  • 提高安全性,因为所有虚拟实例都被监控和隔离。
  • 节省花费在 IT 服务(例如软件更新)上的时间。

网络功能虚拟化

网络功能虚拟化(NFV)可以隔离网络的关键功能(例如目录服务、文件共享和 IP 配置),并将它们分到各个不同的环境中。一旦软件功能独立于物理计算机,特定功能便可以组合成为新网络,并分配给环境。虚拟化网络可以减少物理组件的数量,例如交换机、路由器、服务器、线缆和集线器,它们都是创建多个独立网络所必需的资源,这种虚拟化方式在电信行业中使用尤其广泛。

1.4.虚拟化的优势

虚拟化可以提高 IT 敏捷性、灵活性和可扩展性,同时大幅节约成本。更高的工作负载移动性、更高的性能和资源可用性、自动化运维 - 这些都是虚拟化的优势,虚拟化技术可以使 IT 部门更轻松地进行管理以及降低拥有成本和运维成本。其他优势包括:

    • 降低资金成本和运维成本。
    • 最大限度减少或消除停机。
    • 提高 IT 部门的工作效率、效益、敏捷性和响应能力。
    • 加快应用和资源的调配速度。
    • 提高业务连续性和灾难恢复能力。
    • 简化数据中心管理。

1.5.虚拟化产品概要

说明:以上为部分商业虚拟化产品。

VMware

可谓服务器虚拟化的老大,客户数量多、功能强大、稳定,但价格贵,让一些小企业望而止步。同时自己缺少公有云产品,现在主要依靠与AWS合作和其它公有云厂商的合作。

  1. Microsoft

微软的虚拟化产品Hyper-V起源于Windows Server 2008 R2,因搭乘Windows Server系统,在市场份额上有一定的先天优势。且微软有自己的公有云Azure产品,Hyper-V与Azure的互操作性和整合性越来越强,也为Hyper-V的发展带来生态的支撑。Hyper的价格比VMware便宜, 但即使如此,Hyper-V这个虚拟化界的老二,依然远远落后于VMware。

  1. Citrix

在桌面虚拟化领域,XenApp和XenDesktop绝对处于领导者位置。近两年 Citrix提出了Citrix Workspace的概念即在企业交付中涵盖包括Windows桌面、应用,新型的移动设备管理和原生应用交付,以及企业数据在不同设备中的交互。但从服务器虚拟化领域,XenServer的口碑明显低于VMware和Hyper-V,甚至其他服务器虚拟化产品,在服务器虚拟化的市场份额较低。

  1. Red Hat:

Red Hat位于“远见者”象限,这主要是由于KVM采用的技术与OpenStack有着紧密关系。Red Hat领导着核心KVM OSS开发社区,有着忠实的RHEL开发者和客户群,但主要的竞争也来源于基于开源的解决方案。

Huawei:

华为FusionSphere在2014年首次进入x86服务器虚拟化基础设施魔力象限。最早的产品是基于XEN开发的,从6.3版本开始转为KVM,在功能和性能上提高迅速。华为有自己的虚拟化,私有云和公有云产品,有针对运营商的云解决方案。作为硬件厂商,又拥有自己品牌的服务器、网络设备,存储设备等,其解决方案可以使用其软硬件结合,兼容性更好,是所有虚拟化厂商中,生态最为健全,周边配套最为齐备,这也是华为产品最为独特且较难超越的优势。

1.6.虚拟机运行架构

传统运行模式

一台计算机同时只能运行一个操作系统在系统之上运行运用软件

  • 寄居架构
    作为应用软件安装在操作系统上可安装多个操作系统
    宿主(Host OS)与客户(Guest OS)

​​​​​​​

原生架构

虚拟机软件直接安装在计算机硬件上   (裸金属安装)

虚拟机本身就是一个操作系统

虚拟机中可以同时运行多个操作系统

虚拟机中可以同时运行多个操作系统

二、KVM虚拟化

2.1.KVM概述

KVM  即Kernel-based Virtual Machine  基于内核的虚拟机。 KVM,是一个开源的系统虚拟化模块,自 Linux 内核 2.6.20 之后集成在Linux的各个主要发行版本中。 它使用 Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM 目前已成为学术界的主流 VMM(虚拟机监控器)之一。KVM的虚拟化需要硬件支持(如 Intel VT技术或者 AMD V技术)。是基于硬件的完全虚拟化。而 Xen 早期则是基于软件模拟的 Para-Virtualization(半虚拟化)。

2.2.KVM相关组件介绍

kvmqemulibvirt的区别和联系

在所谓的kvm技术中,应用到的其实有2个东西:qemu+kvm

kvm:

负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备;

qemu:

是模拟IO设备(网卡,磁盘),kvm加上qemu之后就能实现真正意义上服务器虚拟化。

因为用到了上面两个东西,所以一般都称之为qemu-kvm。

libvirt:

则是调用kvm虚拟化技术的接口用于管理的,用libvirt管理方便,直接用qemu-kvm的接口太繁琐。

libvirt简介

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

2.3.1.KVM相关组件安装

需要在带有桌面环境的服务器中使用KVM技术:

# yum -y install qemu-kvm.x86_64 qemu-kvm-tools.x86_64 python-virtinst.noarch qemu-img.x86_64 bridge-utils.x86_64 libvirt virt-manager

验证CPU是否支持虚拟化:

# cat /proc/cpuinfo | grep vmx //如出现信息则表示支持虚拟化

# cat /proc/cpuinfo | grep svm //此方式为验证AMD的CPU

vmx //inter

svm //AMD

#若查看不到信息,说明没有开启虚拟化,查看文档末尾进行修改虚拟化设置

验证KVM模块是否安装:

# lsmod | grep kvm //出现信息则表示已安装

kvm_intel              53484  0

kvm                   316506  1 kvm_intel

# systemctl enable libvirtd

# systemctl start libvirtd

2.3.2.设置网卡:

使用桥接模式。

# vim /etc/sysconfig/network-scripts/ifcfg-ens32

TYPE=Ethernet

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=ens32

UUID=20a84c35-af30-49be-9b30-7a4977980ab0

DEVICE=ens32

ONBOOT=yes

IPADDR=192.168.1.40

PREFIX=24

GATEWAY=192.168.1.1

DNS1=8.8.8.8

IPV6_PEERDNS=yes

IPV6_PEERROUTES=yes

IPV6_PRIVACY=no

BRIDGE="br0" //增加此行

生成桥接网卡配置文件

# vim /etc/sysconfig/network-scripts/ifcfg-br0 //加入以下内容

DEVICE=br0

BOOTPROTO=static

ONBOOT=yes

TYPE=Bridge

NAME=br0

IPADDR=192.168.1.40 //可以改为ens32的IP地址,也可以设置为其他IP地址,这里的IP地址可以与其他主机通信,而ens32的IP地址将会无效

NETMASK=255.255.255.0

关闭网络管理工具,否则无法正常使用桥接模式:

# systemctl stop NetworkManager

# systemctl disable NetworkManager

# systemctl restart network //重启网卡服务器

查看配置文件是否生效:

# ifconfig //出现了"br0  "、"virbr0"表示配置成功

通过CRT连接192.168.1.40 宿主机

2.3.3.创建虚拟机系统

在图形化界面下操作:

# virt-manager //打开kvm虚拟机管理界面,打不开未响应可以尝试 rpm -e卸载该程序并重新安装

或者应用程序---系统工具---虚拟系统管理器

通过图形化界面开始创建 新的系统并使用

可以先通过fdisk命令创建分区并挂载,再将安装数据存放在挂载点中。

# mount /dev/sdb1 /var/lib/libvirt/images/

使用KVM命令管理虚拟机:

# yum install -y acpid //安装"电源管理"服务

acpid为替代传统的APM电源管理标准而推出的新型电源管理标准。建议所有的笔记本用户开启它。一些服务可能不需要acpi。支持的通用操作有:“电源开关”,“电源监视”,“笔记本LID开关”,“笔记本显示屏亮度”,“休眠”,“挂机”等等。

# systemctl start acpid

# systemctl enable acpid

# virsh -h //查看命令帮助信息,KVM管理命令

/etc/libvirt/qemu //kvm虚拟机配置文件存放目录

# virsh list --all //查看虚拟机运行状态

 Id    名称                         状态

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

 5     centos-1                       running

# virsh shutdown centos-1 //关机"centos-1"这台服务器

# virsh destroy centos-1 //强制关机"centos-1"这台服务器

# virsh create /etc/libvirt/qemu/centos-1.xml //通过虚拟机配置文件位置启动该虚拟机

# virsh list --all

 Id    名称                         状态

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

 6     centos-1                       running

# virsh suspend centos-1 //挂起正在运行的虚拟机

域 centos-1 被挂起

# virsh resume centos-1 //恢复被挂起虚拟机

域 centos-1 被重新恢复

# virsh autostart centos-1 //设置该虚拟机开机自动启动

域 centos-1标记为自动开始

# virsh domiflist centos1 //查看指定虚拟机的网卡信息

配置宿主机中的虚拟机网卡:

# vi /etc/sysconfig/network-scripts/ifcfg-ens32 //修改网卡为启动,以及设置IP状态为静态获取以及相关IP参数。保存退出

DEVICE=ens32

HWADDR=52:54:00:02:3F:7D

TYPE=Ethernet

UUID=75e0081f-17fb-49be-ab4c-22ace4b8ac37

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=192.168.1.200

NETMASK=255.255.255.0

# systemctl restart network //重启网卡后即可通过该IP与宿主机通信,也可用该IP与真实机通信

给宿主机中的虚拟机添加多个网卡:

方法1:通过图形化界面添加

1.在宿主机中打开虚拟系统管理器,选中要添加网卡的虚拟机,并点击上方"打开"

2.点击第二个 蓝色背景感叹号图标,在最下方"添加硬件",选中第二个"network" 并记住该MAC地址,便于添加网卡配置文件使用

方法二:

也可使用命令行进行添加新网卡:

# virsh attach-interface --domain centos1 --type bridge --source br0

成功附加接口

# virsh domiflist centos1 //添加完后查看该指定虚拟机网卡列表

通过命令行添加的新网卡也需要生成新网卡配置文件,以及填写新网卡mac地址在网卡配置文件中。

3.生成新网卡配置文件:

图形化添加网卡 命令行添加网卡都需要执行以下操作:

# cd /etc/sysconfig/network-scripts/

# cp ifcfg-ens32 ifcfg-ens33

# vi ifcfg-ens33 //修改新网卡配置文件参数

DEVICE=ens33

HWADDR=52:54:00:4f:5e:db //mac地址为最开始添加网卡时的mac地址

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=192.168.1.201 //IP改为新网卡IP地址

NETMASK=255.255.255.0

也可以在此文件下找新网卡的mac地址,便于生成新网卡配置文件:

# vi /etc/udev/rules.d/70-persistent-net.rules

2.4.虚拟机克隆

克隆前,centos7.0需要提前关机

安装克隆命令:

# yum install -y virt-install

#  virt-clone -o centos7.0 -n centos7-2 -f /var/lib/libvirt/images/centos7-2.qcow2

可在存储数据的地方看到刚刚克隆的虚拟机:

# ll /var/lib/libvirt/images/

# ll  /etc/libvirt/qemu //查看操作系统配置文件

注意:刚克隆出来的操作系统只占用了1.4G左右,因为未开机使用,所以所占用空间较少。且CentOS6中克隆后需要修改克隆服务器的网卡信息(MAC地址)而CentOS7中不需要,系统会自动修改。

对比两个操作系统的配置文件异同点:

# vimdiff centos7.0.xml centos7-2.xml

2.5.虚拟机快照

快照的作用: 1、灾难恢复  2、回滚到历中的某个状态

查看快照信息:

#  qemu-img info /var/lib/libvirt/images/centos7.0.qcow2

image: /var/lib/libvirt/images/centos7.0.qcow2

file format: qcow2

virtual size: 9.0G (9663676416 bytes)

disk size: 1.3G

cluster_size: 65536

Format specific information:

    compat: 1.1

    lazy refcounts: true

创建快照:

#  virsh snapshot-create centos7.0

已生成域快照 1617042100

创建快照的同时定义名称:

# virsh snapshot-create-as centos7.0 centos_sshd

查询操作系统及快照列表:

# virsh snapshot-list centos7.0

查询快照文件:

# tree /var/lib/libvirt/qemu/snapshot/

查询快照详细信息:

# qemu-img  info /var/lib/libvirt/images/centos7.0.qcow2

查询当前系统运行在哪个快照下:

# virsh snapshot-current centos7.0

<domainsnapshot>

  <name>centos_sshd</name>

查询操作系统运行状态:

# virsh domstate centos7.0

关闭

查询系统的快照:

# virsh snapshot-list centos7.0

恢复快照:

# virsh snapshot-revert centos7.0 1463020969

删除快照:

#  virsh snapshot-delete  centos7.0 centos_sshd

已删除域快照 centos_sshd

再次查看,快照应该被删除:

# virsh snapshot-list centos7.0

常见问题及解决方案:

1.通过命令"# cat /proc/cpuinfo | grep vmx" 查看centos系统不支持虚拟化的解决方案:

解决此问题的前提条件:

cpu支持Inter VT-X或AMD虚拟化技术(当虚拟机能够安装centos x64位系统时,表示支持虚拟化)

物理机下,VMware Workstation能安装64位CentOS系统,处理器为Inter i7 ,且支持Inter VT-X虚拟化技术,物理机BIOS中已打开Inter虚拟化开关,既然能安装64位系统,说明物理机BIOS中支持虚拟化开关已打开。

通过命令"# cat /proc/cpuinfo | grep pae" 能够查看到信息出现,说明此服务器目前支持版半虚拟化

全虚拟化为vmx(inter)、svm(AMD)

解决方案:

在workstation上实现嵌套虚拟化,需要编辑物理机上centos虚拟机的vmx文件,找到虚拟机安装文件,带有.vmx后缀,最后一行修改或添加以下内容即可解决问题:

vhv.enable = "TRUE"

验证问题是否解决:

# cat /proc/cpuinfo | grep vmx //如出现信息则表示解决问题

搭建好kvm之后创建虚拟机时卡在第五步不动

需要编辑 /usr/share/virt-manager/virtManager/baseclass.py 将其中涉及Gdk.Cursor.new_from_name行注释掉

#cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress")

#gdk_window.set_cursor(cursor)

#cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "default")

#gdk_window.set_cursor(cursor)

同样编辑 /usr/share/virt-manager/virtManager/asyncjob.py 将其中涉及 Gdk.Cursor.new_from_name 行注释掉:

#gdk_window.set_cursor(

#Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress"))

重新启动virt-manager

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值