一引言
1.1哪些是虚拟化?
在计算机技术中,虚拟化(技术)或虚拟技术(英文:Virtualization)是一种资源管理技术,是将计算机的各类实体资源(CPU、内存、磁盘空间、网络适配器等),给以具象、转换后呈现下来并可供分区、组合为一个或多个笔记本配置环境。
由此,打破实体结构间的不可切割的障碍,使用户可以比先前的配置更好的方法来应用这种笔记本硬件资源。这种资源的新虚拟部份是不受现有资源的架设方法,地域或化学配置所限制。
通常所指的虚拟化资源包括估算能力和数据储存。
因为目前信息技术领域的好多企业都曾在宣传上将该企业的某种技术称为虚拟化技术,这种技术囊括的范围可以从Java虚拟机技术到系统管理软件,这就促使确切的划分虚拟技术显得困难。因而各类相关学术论文在提到虚拟技术时经常提及的便是如上面所提及的那种不严格的定义。
1.2为何要用虚拟化
同一台化学机运行多个不同版本应用软件
硬件依赖性较低和易于数据迁移
1.3虚拟化技术的优势
1.增加营运成本
服务器虚拟化增加了IT基础设施的营运成本,令系统管理员甩掉了繁杂的数学服务器、OS、中间件及兼容性的管理工作,降低人工干预频度,使管理更强化大、便捷。
2.提升应用兼容性
服务器虚拟化提供的封装性和隔离性使大量应用独立运行于各类环境中,管理人员不需频繁按照底层环境调整应用,只需建立一个应用版本并将其发布到虚拟化后的不同类型平台上即可。
3.加速应用布署
采用服务器虚拟化技术只需输入激活配置参数、拷贝虚拟机、启动虚拟机、激活虚拟机即可完成布署,大大减短了布署时间,减免人工干预,增加了布署成本。
4.提升服务可用性
用户可以便捷地备份虚拟机,在进行虚拟机动态迁移后,可以便捷的恢复备份,或则在其他化学机上运行备份,大大提升了服务的可用性。
5.提高资源借助率
通过服务器虚拟化的整合,增强了CPU、内存、存储、网络等设备的借助率,同时保证原有服务的可用性,使其安全性及性能不受影响。
6.动态调度资源
在服务器虚拟化技术中,数据中心从传统的单一服务器弄成了统一的资源池,用户可以即时地调整虚拟机资源,同时数据中心管理程序和数据中心管理员可以灵活按照虚拟机内部资源使用情况灵活分配调整给虚拟机的资源。
7.减少能源消耗
通过降低运行的化学服务器数目,降低CPU以外各单元的耗电量,达到节能降耗的目的。
1.4KVM简介
KVM,基于内核的虚拟机(英文:Kernel-basedVirtualMachine,简写为KVM),是一种用于Linux内核中的虚拟化基础设施linux命令chm,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导出Linux2.6.20核心中,以可加载核心模块的形式被移植到FreeBSD及illumos上。
KVM在具备IntelVT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM构架的支持。
KVM目前由RedHat等厂商开发,对CentOS/Fedora/RHEL等RedHat系发行版支持绝佳。
1.5关于KVM
KVM是开源软件,全称是kernel-basedvirtualmachine(基于内核的虚拟机)。
是x86构架且硬件支持虚拟化技术(如intelVT或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.6关于VirtualMachineManager
在笔记本运算中,红帽公司的VirtualMachineManager是一个虚拟机管理员,可以让用户管理多个虚拟机。
基于内核的虚拟机libvirt与VirtualMachineManager。
VirtualMachineManager可以让用户:
创建、编辑、引导或停止虚拟机。
查看并控制每位虚拟机的控制台。
查看每部虚拟机的性能以及使用率。
查看每部正在运行中的虚拟机以及主控端的即时性能及使用率信息。
不论是在本机或远程,皆可使用KVM、Xen、QEMU。
1.7其他虚拟化软件
①Xen
Xen是一个开放源代码虚拟机监视器,由XenProject开发。它准备在单个计算机上运行多达128个有完全功能的操作系统。
在旧(无虚拟硬件)的处理器上执行Xen,操作系统必须进行显式地更改(“移植”)以在Xen上运行(并且提供对用户应用的兼容性)。这致使Xen无需特殊硬件支持,就能达到高性能的虚拟化。
②QEMU
QEMU是一套由FabriceBellard所编撰的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有个别后三者所不具备的特点,如高速率及跨平台的特点。经由KVM(初期为kqemu加速器,如今kqemu已被KVM代替)这个开源的加速器,QEMU能模拟至接近真实笔记本的速率。
QEMU有两种主要运作模式:
1Usermode模拟模式,意谓是用户模式。
QEMU能引导这些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。
2Systemmode模拟模式,意谓是系统模式。
QEMU能模拟整个笔记本系统,包括中央处理器及其他周边设备。它促使为系统源代码进行测试及除错工作显得容易。其亦能拿来在一部主机上模拟数部不同虚拟笔记本。
二KVM布署与使用
系统环境说明
[root@kvm ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@kvm ~]# uname -r 3.10.0-693.el7.x86_64 [root@kvm ~]# sestatus SELinux status: disabled [root@kvm ~]# 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) [root@kvm ~]# hostname -I 172.16.1.240 10.0.0.240 # kvm主机内存不能低于4GB
2.1安装KVM虚拟化软件
安装依赖包(可以使用本地yum源)
yum install libvirt* virt-* qemu-kvm* -y
安装软件说明内容:
libvirt # 虚拟机管理 virt # 虚拟机安装克隆 qemu-kvm # 管理虚拟机磁盘
启动服务
[root@kvm ~]# systemctl start libvirtd.service [root@kvm ~]# systemctl status libvirtd.servic
安装VNC软件:
VNC软件,用于VNC(VirtualNetworkComputing),为一种使用RFB合同的显示屏画面分享及远程操作软件。此软件借由网路centos 使用fedora源,可发送按键与键盘的动作及即时的显示屏画面。
VNC与操作系统无关,因而可跨平台使用,比如可用Windows联接到某Linux的笔记本,反之亦同。甚至在没有安装顾客端程序的笔记本中,只要有支持JAVA的浏览器,也可使用。
安装VNC时,使用默认安装即可,无需安装server端。
2.2配置第一台KVM虚拟机
使用命令
[root@kvm ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/oldboy.raw,format=raw,size=10 --cdrom /data/CentOS-7-x86_64-DVD-1511.iso --network network=default --graphics vnc,listen=0.0.0.0,port=5900 --noautoconsole
注意:须要先将镜像文件拷贝到/data/CentOS-7-x86_64-DVD-1511.iso。
使用参数说明:
参数参数说明--virt-typeHV_TYPE要使用的管理程序名称(kvm,qemu,xen,...)--os-type系统类型--os-variantDISTRO_VARIANT在顾客机上安装的操作系统,比如:'fedora18'、'rhel6'、'winxp'等。-nNAME,--nameNAME顾客机实例名称--memoryMEMORY配置顾客机虚拟显存大小--vcpusVCPUS配置顾客机虚拟CPU(vcpu)数目。--diskDISK指定储存的各类选项。-cdromCDROM硬盘安装介质-wNETWORK,--networkNETWORK配置顾客机网路插口。--graphicsGRAPHICS配置顾客机显示设置。虚拟化平台选项:-v,--hvm这个顾客机应当是一个全虚拟化顾客机-p,--paravirt这个顾客机应当是一个半虚拟化顾客机--container这个顾客机应当是一个容器顾客机--virt-typeHV_TYPE要使用的管理程序名称(kvm,qemu,xen,...)--archARCH模拟CPU构架--machineMACHINE机器类型为仿真类型其它选项:--noautoconsole不要手动尝试联接到顾客端控制台--autostart主机启动时手动启动域。--noreboot安装完成后不启动顾客机。以上信息通过"virt-install--help"获得。
在启动的同时使用vnc联接
2.3KVM虚拟机管理操作
virsh命令常用参数总结
参数参数说明基础操作list查看虚拟机列表centos 使用fedora源,列举域start启动虚拟机,开始一个(先前定义的)非活跃的域shutdown关掉虚拟机,关掉一个域destroy(危险)强制关掉虚拟机,销毁(停止)域vncdisplay查询虚拟机vnc端标语配置管理操作dumpxml导入主机配置信息undefine删掉主机define导出主机配置domrename对虚拟机进行重命名挂起与恢复suspend挂起虚拟机resume恢复虚拟机自启动管理autostart虚拟机开机启动autostart--disable取消虚拟机开机启动以上参数通过“virsh--help”获得。
KVM虚拟机配置文件位置操作过程:
[root@kvm ~]# ll /etc/libvirt/qemu/centos7.xml
更改KVM虚拟机配置的方式
[root@kvm ~]# virsh edit centos7
使用该命令更改可以对文件进行句型校准。
备份与恢复
备份虚拟机配置(死机时备份):
[root@kvm ~]# virsh dumpxml centos7 > centos7.xml
删掉虚拟机配置
# 查看 [root@kvm ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - centos7 关闭 # 删除 [root@kvm ~]# virsh undefine centos7 域 centos7 已经被取消定义 [root@kvm ~]# virsh list --all Id 名称 状态 ----------------------------------------------------
导出虚拟机
# 导入 [root@kvm ~]# virsh define centos7-off.xml 定义域 centos7(从 centos7-off.xml) # 查看 [root@kvm ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - centos7 关闭
更改虚拟机名称
# 重命名 [root@kvm ~]# virsh domrename centos7 oldboy7 Domain successfully renamed # 查看 [root@kvm ~]# virsh list Id 名称 状态 ---------------------------------------------------- 9 oldboy7 关闭
虚拟机挂起与恢复
# 挂起虚拟机 [root@kvm ~]# virsh suspend oldboy7 域 oldboy7 被挂起 # 查看状态 [root@kvm ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 9 oldboy7 暂停
恢复虚拟机
[root@kvm ~]# virsh resume oldboy7 域 oldboy7 被重新恢复
查询虚拟机vnc端口
[root@kvm ~]# virsh vncdisplay oldboy7 :0 # :0 即 为 5900 端口,以此类推 :1为5901 。
开机自启动设置
# 设置 libvirtd 服务开机自启动。 [root@kvm ~]# systemctl is-enabled libvirtd.service enabled
设置宿主机开机虚拟机在其他
[root@kvm ~]# virsh autostart oldboy7 域 oldboy7标记为自动开始 # 实质为创建软连接 [root@kvm ~]# ll /etc/libvirt/qemu/autostart/oldboy7.xml lrwxrwxrwx 1 root root 27 1月 22 12:17 /etc/libvirt/qemu/autostart/oldboy7.xml -> /etc/libvirt/qemu/oldboy7.xml
取消开机自启动
[root@kvm ~]# virsh autostart --disable oldboy7 域 oldboy7取消标记为自动开始
三kvm虚拟机console登陆
3.1CentOS7.X版本console登陆
配置console登陆
在oldboy7虚拟机内操作(该操作仅限centos7):
[root@kvm ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8" [root@kvm ~]# reboot # 115200n8:能显示虚拟机的启动过程
重启完成后,使用virshconsole联接虚拟机。
[root@kvm ~]# virsh console oldboy7 连接到域 oldboy7 换码符为 ^] CentOS Linux 7 (Core) Kernel 3.10.0-327.el7.x86_64 on an x86_64 oldboy7 login: root Password: Last login: Mon Jan 22 12:24:48 from 192.168.122.1 [root@oldboy7 ~]# w 12:26:11 up 0 min, 1 user, load average: 0.09, 0.03, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root ttyS0 12:26 3.00s 0.02s 0.01s w
3.2CentOS6.X版本console登陆
使用virshconsole联接CentOS6虚拟主机方式:
安装一台centos6的kvm虚拟机
virt-install --virt-type kvm --os-type=linux --os-variant rhel6 --name oldboy6 --memory 1124 --vcpus 1 --disk /data/oldboy6/oldboy-6.raw,format=raw,size=10 --cdrom /data/CentOS-6.9-x86_64-bin-DVD1.iso --network network=default --graphics vnc,listen=0.0.0.0,port=5901 --noautoconsole
新安装一台虚拟机后,是难以通过virshconsole命令连入虚拟机中的,这时我们须要开启虚拟机的console功能。
以下操作都在虚拟机中进行
1、添加ttyS0的许可,准许root登录
[root@oldboy6 ~]# echo "ttyS0" >> /etc/securetty
2、编辑/etc/grub.conf中加入console=ttyS0
在该文件的第16行。kernel选项后添加
[root@oldboy6 ~]# sed -i '/tkernel/s#.*#& console=ttyS0#g' /etc/grub.conf [root@oldboy6 ~]# sync # 同步配置到 /boot/grub/grub.conf [root@oldboy6 ~]# cat -n /etc/grub.conf 1 # grub.conf generated by anaconda 2 # 3 # Note that you do not have to rerun grub after making changes to this file 4 # NOTICE: You have a /boot partition. This means that 5 # all kernel and initrd paths are relative to /boot/, eg. 6 # root (hd0,0) 7 # kernel /vmlinuz-version ro root=/dev/vda3 8 # initrd /initrd-[generic-]version.img 9 #boot=/dev/vda 10 default=0 11 timeout=5 12 splashimage=(hd0,0)/grub/splash.xpm.gz 13 hiddenmenu 14 title CentOS 6 (2.6.32-696.el6.x86_64) 15 root (hd0,0) 16 kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=48532582-c271-4c0a-b55f-395fe16cd8aa rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0 17 initrd /initramfs-2.6.32-696.el6.x86_64.img