KVM 虚拟化技术

1.1 前言                           

1.1.1 什么是虚拟化?

在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。

virtual machines(虚拟机)  virtualization server(虚拟化服务器)    physical server(物理服务器)    shared storage(共享存储)

由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。

一般所指的虚拟化资源包括计算能力和数据存储。

由于目前信息技术领域的很多企业都曾在宣传中将该企业的某种技术称为虚拟化技术,这些技术涵盖的范围可以从Java虚拟机技术到系统管理软件,这就使得准确的界定虚拟技术变得困难。因此各种相关学术论文在谈到虚拟技术时常常提到的便是如前面所提到的那个不严格的定义。

1.1.2 为什么要用虚拟化

  🏆同一台物理机运行多个不同版本应用软件

  🏆硬件依赖性较低和便于数据迁移

                    图 - 虚拟化前后对比

1.1.3 虚拟化技术的优势

  1.降低运营成本

  服务器虚拟化降低了IT基础设施的运营成本,令系统管理员摆脱了繁重的物理服务器、OS、中间件及兼容性的管理工作,减少人工干预频率,使管理更加强大、便捷。

  2.提高应用兼容性

  服务器虚拟化提供的封装性和隔离性使大量应用独立运行于各种环境中,管理人员不需频繁根据底层环境调整应用,只需构建一个应用版本并将其发布到虚拟化后的不同类型平台上即可。

  3.加速应用部署

  采用服务器虚拟化技术只需输入激活配置参数、拷贝虚拟机、启动虚拟机、激活虚拟机即可完成部署,大大缩短了部署时间,免除人工干预,降低了部署成本。

  4.提高服务可用性

  用户可以方便地备份虚拟机,在进行虚拟机动态迁移后,可以方便的恢复备份,或者在其他物理机上运行备份,大大提高了服务的可用性。

  5.提升资源利用率

  通过服务器虚拟化的整合,提高了CPU、内存、存储、网络等设备的利用率,同时保证原有服务的可用性,使其安全性及性能不受影响。

  6.动态调度资源

  在服务器虚拟化技术中,数据中心从传统的单一服务器变成了统一的资源池,用户可以即时地调整虚拟机资源,同时数据中心管理程序和数据中心管理员可以灵活根据虚拟机内部资源使用情况灵活分配调整给虚拟机的资源。

  7.降低能源消耗

  通过减少运行的物理服务器数量,减少CPU以外各单元的耗电量,达到节能减排的目的。

1.1.4 KVM简介

KVM,基于内核的虚拟机(英语:Kernel-based Virtual Machine,缩写为 KVM),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。

  KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。

  KVM目前由Red Hat等厂商开发,对CentOS/Fedora/RHEL等Red Hat系发行版支持极佳。

1.1.5 关于KVM

KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。
它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。
在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。

1.1.6 关于Virtual Machine Manager

  在电脑运算中,红帽公司的Virtual Machine Manager是一个虚拟机管理员,可以让用户管理多个虚拟机。

  基于内核的虚拟机libvirt与Virtual Machine Manager。 

Virtual Machine Manager可以让用户

  🎃 创建、编辑、引导或停止虚拟机。

  🎃 查看并控制每个虚拟机的控制台。

  🎃 查看每部虚拟机的性能以及使用率。

  🎃 查看每部正在运行中的虚拟机以及主控端的即时性能及使用率信息。

  🎃 不论是在本机或远程,皆可使用KVM、Xen、QEMU。

1.1.7 其他虚拟化软件

🍪 Xen

  Xen是一个开放源代码虚拟机监视器,由XenProject开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。

  在旧(无虚拟硬件)的处理器上执行Xen,操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。

🍪 QEMU

  QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由KVM(早期为kqemu加速器,现在kqemu已被KVM取代)这个开源的加速器,QEMU能模拟至接近真实电脑的速度。QEMU有两种主要运作模式:

  User mode模拟模式,亦即是用户模式。

  QEMU能引导那些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。

  System mode模拟模式,亦即是系统模式。

  QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为系统源代码进行测试及除错工作变得容易。其亦能用来在一部主机上模拟数部不同虚拟电脑。

1.2 KVM部署与使用                        

系统环境说明    

复制代码
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@localhost ~]# uname -r
3.10.0-693.el7.x86_64
[root@localhost ~]# sestatus 
SELinux status:                 disabled
[root@localhost ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
复制代码

查看自己的cpu是否支持KVM:

[root@localhost ~]# egrep '(vmx|svm)' /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm epb tpr_shadow vnmi ept vpid tsc_adjust dtherm ida arat pln pts
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm epb tpr_shadow vnmi ept vpid tsc_adjust dtherm ida arat pln pts

如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU支持KVM。这里可以看到vmx(红色),说明该cpu支持。

1.2.1 安装KVM虚拟化软件

安装依赖包(可以使用本地yum源)

[root@localhost ~]# yum install qemu-kvm libvirt virt-install bridge-utils -y

安装软件说明内容:

libvirt    # 虚拟机管理
virt       # 虚拟机安装克隆
qemu-kvm   # 管理虚拟机磁盘

验证安装是否成功:

[root@localhost ~]# lsmod | grep kvm
kvm_intel             170086  0 
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm

启动服务

复制代码
[root@localhost ~]# systemctl start libvirtd.service
[root@localhost ~]# systemctl status libvirtd.service
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since 六 2019-12-14 05:14:02 CST; 29s ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 13546 (libvirtd)
    Tasks: 19 (limit: 32768)
   CGroup: /system.slice/libvirtd.service
           ├─13546 /usr/sbin/libvirtd
           ├─13643 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
           └─13645 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper

12月 14 05:14:05 localhost.localdomain dnsmasq[13643]: started, version 2.76 cachesize 150
12月 14 05:14:05 localhost.localdomain dnsmasq[13643]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset a...t inotify
12月 14 05:14:05 localhost.localdomain dnsmasq-dhcp[13643]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
12月 14 05:14:05 localhost.localdomain dnsmasq-dhcp[13643]: DHCP, sockets bound exclusively to interface virbr0
12月 14 05:14:05 localhost.localdomain dnsmasq[13643]: reading /etc/resolv.conf
12月 14 05:14:05 localhost.localdomain dnsmasq[13643]: using nameserver 114.114.114.114#53
12月 14 05:14:05 localhost.localdomain dnsmasq[13643]: using nameserver fe80::1%ens33#53
12月 14 05:14:05 localhost.localdomain dnsmasq[13643]: read /etc/hosts - 2 addresses
12月 14 05:14:05 localhost.localdomain dnsmasq[13643]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
12月 14 05:14:05 localhost.localdomain dnsmasq-dhcp[13643]: read /var/lib/libvirt/dnsmasq/default.hostsfile
Hint: Some lines were ellipsized, use -l to show in full.
复制代码

接下来配置网卡

1.这里使用网桥模式,增加一个桥接网卡:

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cat ifcfg-ens33 
BOOTPROTO=none
DEVICE=ens33
NM_CONTROLLED=no
ONBOOT=yes
BRIDGE=br0

2.新建一个文件—ifcfg-br0,并编辑,编辑的内容如下:

复制代码
[root@localhost network-scripts]# vi ifcfg-br0
BOOTPROTO=static
DEVICE=br0
TYPE=Bridge
NM_CONTROLLED=no
IPADDR=192.168.1.220 
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
复制代码

3.重启网络服务:

[root@localhost network-scripts]# systemctl restart network
复制代码
[root@localhost network-scripts]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.220  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fec5:1999  prefixlen 64  scopeid 0x20<link>
        inet6 2409:8a0c:13:390:20c:29ff:fec5:1999  prefixlen 64  scopeid 0x0<global>
        ether 00:0c:29:c5:19:99  txqueuelen 1000  (Ethernet)
        RX packets 53  bytes 5708 (5.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 29  bytes 2357 (2.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fec5:1999  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c5:19:99  txqueuelen 1000  (Ethernet)
        RX packets 893  bytes 83845 (81.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 648  bytes 78250 (76.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 68  bytes 5912 (5.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 68  bytes 5912 (5.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:d7:57:2b  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
复制代码

可以看到原来ens33网卡的ip道br0网卡上了,这样网卡就配置完成了。

最后,安装及配置虚拟机

检查服务进程:

[root@localhost network-scripts]# ps aux |grep libvirtd 
root        978  0.1  0.4 1000784 16464 ?       Ssl  19:38   0:00 /usr/sbin/libvirtd
root       2099  0.0  0.0 112728   988 pts/0    S+   19:48   0:00 grep --color=auto libvirtd

获取操作系统安装镜像文件,把该文件放到 /home/iso 目录下:

[root@localhost ~]# mkdir -p /home/iso
[root@localhost ~]# cd /home/iso

创建虚拟机文件存放的目录:

[root@localhost iso]# mkdir -p /home/kvm-bak

使用 virt-install 创建虚拟机

[root@localhost home]# virt-install --name=test2 --virt-type=kvm --memory 512,maxmemory=1024 --location=/home/iso/CentOS-7-x86_64-DVD-1708.iso  --disk path=/home/kvm-bak2/test2.img,size=10 --bridge=br0 --vnc --vncport=15950 --vnclisten=0.0.0.0 --noautoconsole --autostart
复制代码
[root@localhost home]# virt-install --name=test2 --virt-type=kvm --memory 512,maxmemory=1024 --location=/home/iso/CentOS-7-x86_64-DVD-1708.iso  --disk path=/home/kvm-bak2/test2.img,size=10 --bridge=br0 --vnc --vncport=15950 --vnclisten=0.0.0.0 --noautoconsole --autostart

开始安装......
搜索文件 .treeinfo......                                                                                                                    |  354 B  00:00:00     
搜索文件 vmlinuz......                                                                                                                      | 5.6 MB  00:00:00     
搜索文件 initrd.img......                                                                                                                   |  46 MB  00:00:00     
正在分配 'test2.img'                                                                                                                        |  10 GB  00:00:00     
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。
复制代码

VNC连接开始安装虚拟机。

 

 安装完重新开启虚拟机。才能使用VNC连接

[root@localhost home]# virsh start test2

使用参数说明                                        

参数

参数说明

--virt-type HV_TYPE

要使用的管理程序名称 (kvm, qemu, xen, ...)

--os-type

系统类型

--os-variant DISTRO_VARIANT

在客户机上安装的操作系统,例如:'fedora18'、'rhel6'、'winxp' 等。

-n NAME, --name NAME

客户机实例名称

--memory MEMORY

配置客户机虚拟内存大小

--vcpus VCPUS

配置客户机虚拟 CPU(vcpu) 数量。

--disk DISK

指定存储的各种选项。

-cdrom CDROM   

光驱安装介质

-w NETWORK, --network NETWORK

配置客户机网络接口。

--graphics GRAPHICS

配置客户机显示设置。

虚拟化平台选项:

-v, --hvm         

这个客户机应该是一个全虚拟化客户机

-p, --paravirt    

这个客户机应该是一个半虚拟化客户机

--container       

这个客户机应该是一个容器客户机

--virt-type HV_TYPE

要使用的管理程序名称 (kvm, qemu, xen, ...)

--arch ARCH       

模拟 CPU 架构

--machine MACHINE

机器类型为仿真类型

其它选项:

--noautoconsole

不要自动尝试连接到客户端控制台

--autostart

主机启动时自动启动域。

--noreboot 

安装完成后不启动客户机。

以上信息通过 " virt-install --help " 获得。

KVM虚拟机管理操作                                      

virsh命令常用参数总结

参数

参数说明

基础操作

list

查看虚拟机列表,列出域

start

启动虚拟机,开始一个(以前定义的)非活跃的域

shutdown

关闭虚拟机,关闭一个域

destroy(危险)

强制关闭虚拟机,销毁(停止)域

vncdisplay

查询虚拟机vnc端口号

配置管理操作

dumpxml

导出主机配置信息

undefine

删除主机

define

导入主机配置

domrename

对虚拟机进行重命名

挂起与恢复

suspend

挂起虚拟机

resume

恢复虚拟机

自启动管理

autostart

虚拟机开机启动

autostart --disable

取消虚拟机开机启动

以上参数通过  “virsh  --help” 获得。

posted @   星火撩原  阅读(507)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示

目录导航