1. 虚拟化技术
1.1 什么是虚拟化
虚拟化是一种能够更有效地利用物理计算机硬件的过程,是云计算的基础。
虚拟化技术使用软件,在计算机硬件上创建一个抽象层,能够将单台计算机的硬件元素(处理器、内存、存储等)分成多个虚拟计算机(通常称为虚拟机(VM))。每个虚拟机都会运行自己的操作系统(OS),其行为就像一台独立的计算机,即使它只在一部分实际底层计算机硬件上运行。
由此可见,虚拟化可以更高效地利用物理计算机硬件,提高组织在硬件投资方面的投资回报率。
1.2 虚拟化技术分类
虚拟化技术可以分为四个阶段:仿真虚拟化、完全虚拟化、半虚拟化和操作系统虚拟化。
1.2.1 仿真虚拟化
硬件仿真虚拟化分为硬件指令虚拟化和硬件资源虚拟化。硬件指令虚拟化目的是将客户机发出的指令翻译成所在主机平台的指令,从而实现对客户机指令的模拟操作;硬件资源虚拟化目的是虚拟出硬件资源,通常主机平台与客户机平台所用的指令集是一样的,只是为了提高效率,将虚拟资源映射到物理资源,并在虚拟机计算中使用本地硬件。
1.2.2 完全虚拟化
完全虚拟化(Full Virtualization)使用一个虚拟机,它在客户操作系统和原始硬件之间进行协调。“协调”在这里是一个关键,因为VMM在客户操作系统和裸硬件之间提供协调。特定受保护的指令必须被捕获下来并在Hypervisor中进行处理,这些底层硬件并不由操作系统所拥有,而是由操作系统通过Hypervisor共享。
1.2.3 半虚拟化
半虚拟化(Paravirtualization),可以提供极高的性能,与完全虚拟化有一些类似,这种方法使用了一个Hypervisor来实现对底层硬件的共享访问,将与虚拟化有关的代码集成到了操作系统本身中。与硬件辅助的完全虚拟化有一点相似是Hypervisor运行在Ring 1,而Guest OS运行在Ring 0上。
1.2.4 操作系统虚拟化
操作系统虚拟化在操作系统本身上实现服务器的虚拟化,特点是一个单一的节点运行唯一的操作系统实例。通过在这个系统上加装虚拟化平台,可以将系统分成多个独立隔离的容器,每个容器是一个虚拟的操作系统,被称为虚拟环境,也称为虚拟专用服务器。
2. KVM
KVM,即Kernel-based Virtual Machine,是指基于Linux内核的虚拟机,是第一个整合到Linux内核的虚拟化技术。在KVM模型中,每一个虚拟机都是一个由Linux调度程序管理的标准进程,可以在用户空间启动客户机操作系统。
一个普通的Linux进程有两种运行模式:内核和用户。而KVM增加了第三种模式:客户模式(有自己的内核和用户模式)。
KVM是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主要VMM(虚拟机监控器)之一。KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术),是基于硬件的完全虚拟化,而Xen早期则是基于软件模拟的Para-Virtualization。
KVM虚拟化主要包含两个组件:
- KVM内核模块:KVM内核模块通过加载到Linux内核中,为虚拟机提供处理器虚拟化功能。它将Linux内核转换成一个类型1(或称为裸机)的虚拟机监控器,可以直接运行在物理硬件上。
- QEMU(Quick Emulator):QEMU是一个开源的硬件模拟器和虚拟机监控器,用于提供KVM虚拟机的设备模拟和管理。QEMU支持多种硬件平台和设备类型,可以与KVM结合使用,提供完整的虚拟化解决方案。
3. 小试牛刀-安装KVM
3.1 查看CPU是否支持全虚拟化
查看自己的CPU是否支持全虚拟化,并且是64位的。
Intel:cat /proc/cpuinfo |grep –color vmx
AMD:cat /proc/cpuinfo |grep –color svm
3.2 安装KVM模块
[root@centos-kvm ~]# yum install qemu-kvm libvirt libguestfs-tools virt-install virt-manager libvirt-python -y
- qemu-kvm:kvm主程序,KVM虚拟化模块
- virt-manager:KVM图形化管理工具
- libvirt:虚拟化服务
- libguestfs-tools:虚拟机的系统管理工具
- virt-install:安装虚拟机的实用工具。比如virt-clone克隆工具就是这个包安装的
- libvirt-python:python调用libvirt虚拟化服务的api接口库文件
3.3 查看安装完KVM后的服务
[root@centos-kvm ~]# systemctl start libvirtd # 开启虚拟化服务
[root@centos-kvm ~]# systemctl enable libvirtd # 设置libvirtd服务开机启动
[root@centos-kvm ~]# systemctl is-enabled libvirtd # 查看是不是开机启动
enabled
确认是否正确加载KVM模块
[root@centos-kvm ~]# lsmod |grep kvm
kvm_intel 188793 0
kvm 653928 1 kvm_intel
irqbypass 13503 1 kvm
3.4 使用命令建立虚拟机
将KVM管理工具从英文界面,切换成中文界面
[root@centos-kvm ~]# echo $LANG
en_US.UTF-8
[root@centos-kvm ~]# LANG=’zh_CN.UTF-8′
[root@centos-kvm ~]# virt-manager
执行virt-manager后,弹出如下界面:
4. 配置KVM网络桥接功能
[root@centos-kvm Packages]# rpm -ivh bridge-utils-1.5-9.el7.x86_64.rpm
把ens33绑定到br0桥设备上
[root@centos-kvm Packages]# cd /etc/sysconfig/network-scripts/
[root@centos-kvm network-scripts]# vim ifcfg-ens33
#在文件最后插入
BRIDGE=”br0″
生成桥设备的配置文件
[root@centos-kvm network-scripts]# vim ifcfg-br0
DEVICE=”br0″
NM_CONTROLLED=”yes”
BOOTPROTO=”none”
TYPE=”Bridge”
IPADDR=”192.168.xxx.xxx”
NETMASK=”255.255.255.0″
GATEWAY=”192.168.xxx.xxx”
DNS1=”192.168.xxx.xxx”
[root@centos-kvm network-scripts]# service network restart
Restarting network (via systemctl): [ 确定 ]
测试br0
[root@centos-kvm network-scripts]# ifconfig
[root@centos-kvm network-scripts]# ping www.baidu.com
PING www.a.shifen.com (153.3.238.110) 56(84) bytes of data.
64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=1 ttl=52 time=27.2 ms
64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=2 ttl=52 time=27.4 ms
64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=3 ttl=52 time=27.4 ms
查看桥接的信息
[root@centos-kvm network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29447ea5 no ens33
virbr0 8000.525400445df3 yes virbr0-nic
5. 创建一台KVM虚拟机
把CentOS7 镜像上传到/var/lib/libvirt/images/目录下
[root@centos-kvm ~]# virt-manager
点击“完成”,至此,创建好了一个新的KVM虚拟机了。
6. KVM虚拟机常用命令
① 列出在运行的虚拟机
[root@centos-kvm ~]# virsh list
② 关闭 centos7-kvm虚拟机
[root@centos-kvm ~]# virsh shutdown centos7-kvm
③ 启动 centos7-kvm 虚拟机
[root@centos-kvm ~]# virsh start centos7-kvm
④ 设置 centos7-kvm 虚拟机为物理机开机后,自动启动
[root@centos-kvm ~]# virsh autostart centos7-kvm
⑤ 导出 centos7-kvm 虚拟机配置文件
[root@centos-kvm ~]# virsh dumpxml centos7-kvm > centos7-kvm.xml
⑥ 取消 centos7-kvm 定义(域 centos7-kvm 已经被取消定义)
[root@centos-kvm ~]# virsh undefine centos7-kvm
⑦ 把虚拟机重新加入到 virt-manager 目录列表
[root@centos-kvm ~]# virsh define centos7-kvm.xml # virsh define 虚拟机.xml的绝对路径
⑧ 强制关闭 centos7-kvm 虚拟机并删除出域
[root@centos-kvm ~]# virsh destroy centos7-kvm
⑨ 取消虚拟机随宿主机开机自启
[root@centos-kvm ~]# virsh autostart –disable centos7-kvm
挂起虚拟机
[root@centos-kvm ~]# virsh suspend centos7-kvm
恢复虚拟机
[root@centos-kvm ~]# virsh resume centos7-kvm
参考链接:
https://www.ibm.com/cn-zh/topics/virtualization
https://cloud.tencent.com/developer/article/1382959