案例:搭建KVM虚拟化平台
需求概述
公司现有部分Linux服务器利用率不高,为充分利用这些Linux服务器,可以部署KVM,在物理机上运行多个业务系统
案例前置知识点
什么是虚拟化
虚拟化就是把硬件资源从屋里方式转变为逻辑方式,打破原有物理结构,使用户可以灵活管理这些资源,并且允许1台物理机上同时运行多个操作系统,以实现资源利用率最大化和灵活管理的一项技术
虚拟化特征
虚拟化主要有四大特征
- 分区:对物理机分区,可实现在单一物理机上同时运行多个虚拟机
- 隔离:同一物理机上多个虚拟机相互隔离
- 封装:整个虚拟机执行环境封装在独立文件中
- 当对于硬件独立:虚拟机无须修改,可运行在任何物理机上
虚拟化的优势
- 减少服务器数量,降低硬件采购成本
- 资源利用率最大化
- 降低机房空间、散热、用电消耗的成本
- 硬件资源可动态调整,提高企业IT业务灵活性
- 高可用性
- 在不中断服务的情况下进行物理硬件调整
- 降低管理成本
- 具备更高效的灾备能力
虚拟化架构的分类
根据在整个系统中的位置不同,虚拟化架构分为以下几种:
- 宿主型虚拟化
指在宿主操作系统之上安装和运行虚拟化程序,依赖于宿主操作系统对设备的支持和物理资源的管理。如:KVM - 裸金属型虚拟化
裸金属虚拟化架构指直接在硬件上面安装虚拟化软件,再在其上安装操作系统和应用,依赖虚拟层内核和服务器控制台进行管理。如Xen、ESXi - 操作系统虚拟化
操作系统虚拟化架构在操作系统层面增加虚拟服务器功能。操作系统虚拟化架构把单个的操作系统划分为多个容器,使用容器管理器来进行管理。宿主操作系统负责在多个虚拟服务器(即容器)之间分配硬件资源,并且让这些服务器彼此独立。如:Docker - 混合虚拟化架构
混合虚拟化架构将一个内核级驱动器插入到宿主操作系统内核。这个驱动器作为虚拟硬件管理器来协调虚拟机和宿主操作系统之间的硬件访问。
根据虚拟化对象来区分,计算机虚拟化又分为:CPU虚拟化、内存虚拟化和I/O虚拟化
CPU虚拟化又分为全虚拟化和半虚拟化
内存虚拟化:物理内存映射给虚拟机,
I/O虚拟化:模拟虚拟化,半虚拟化,I/O透传
主流计算虚拟化技术
开源的:KVM、Xen 闭源的:Hyper-V 、VMware ESXi 、Huawei FusionSphere
KVM是全虚拟化的,Xen有全虚拟化和半虚拟化
KVM的核心是KVM module(Linux Kernel):主要功能是初始化。
KVM虚拟化架构
KVM模块直接整合在Linux内核中
1.KVM组成
- KVM Driver
虚拟机创建
虚拟机内存分配
虚拟CPU寄存器读写
虚拟CPU运行 - QEMU(经过简化与修改)
模拟PC硬件的用户控件组件
提供I/O设备模型及访问外设的途径
2.KVM虚拟化三种模式
客户模式
用户模式
内核模式
3. KVM工作原理
案例环境
环境:
使用一台物理机器,安装Centos7.5_x64 系统(bdqn)作为宿主机,在bdqn安装KVM并安装虚拟机test01
主机 | 操作系统 | IP地址 |
---|---|---|
bdqn | Centos7.5 | 192.168.137.70 |
test01 | Centos7.5 | 192.168.137.72 |
案例需求:
安装KVM
安装Linux虚拟机
使用KVM命令集管理虚拟机
案例实施
- 安装KVM
安装KVM所需软件
yum -y groupinstall Desktop 安装桌面
yum -y install qemu-kvm KVM模块
yum -y install qemu-kvm-tools KVM调试工具
yum -y install virt-install
yum -y install qemu-img qemu组件,创建磁盘、启动虚拟机等
yum -y install bridge-utils 网络支持工具
yum -y install libvirt 虚拟机管理工具
yum -y install virt-manager 图形界面管理虚拟机
查看CPU是否支持虚拟化(如果是AMD的服务器使用cat /proc/cpuinfo | grep svm命令查看)只要结果非空,代表已支持虚拟化
[root@localhost ~]# cat /proc/cpuinfo | grep vmx
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr
sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc
eagerfpu pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave
avx f16c rdrand hypervisor lahf_lm ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust
smep arat spec_ctrl intel_stibp flush_l1d arch_capabilities
检查KVM模块是否安装
[root@localhost ~]# lsmod | grep kvm
kvm_intel 183621 0
kvm 586948 1 kvm_intel
irqbypass 13503 1 kvm
- 设置KVM网络
KVM网络包括:用户模式(NAT)与桥接模式
本案例中使用桥接模式
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br0
vim ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
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="b2a0537e-c7d3-4998-8f49-bc467742274b"
DEVICE="ens33"
ONBOOT="yes"
BRIDGE="br0"
#IPADDR="192.168.137.70"
#PREFIX="24"
#GATEWAY="192.168.137.2"
#DNS1="114.114.114.114"
#IPV6_PRIVACY="no"
vim ifcfg-br0
TYPE="Bridge"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
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"
UUID="b2a0537e-c7d3-4998-8f49-bc467742274b"
DEVICE="br0"
ONBOOT="yes"
IPADDR="192.168.137.70"
PREFIX="24"
NETMASK="255.255.255.0"
GATEWAY="192.168.137.2"
DNS1="114.114.114.114"
systemctl restart network
ip a
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:56:9f:32 brd ff:ff:ff:ff:ff:ff
inet 192.168.137.70/24 brd 192.168.137.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe56:9f32/64 scope link
valid_lft forever preferred_lft forever
- KVM图形化管理
virt-manager是基于libvirt的图形化虚拟机管理软件
[root@localhost ~]# virt-manager
- 新建存储池
创建存储池store和镜像存储池iso
- 新建存储卷
单击创建好的存储池store,创建存储卷
- 准备镜像文件到镜像存储池iso下
- 开始新建虚拟机配置
- 安装虚拟机
使用KVM命令集管理虚拟机
KVM基本功能管理
[root@localhost ~]# whatis qemu-img
qemu-img (1) - QEMU disk image utility
查看虚拟机信息
[root@localhost ~]# qemu-img info /var/lib/libvirt/images/store/test01.qcow2
image: /var/lib/libvirt/images/store/test01.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 1.4G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
查看虚拟机状态
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
4 centos7.0 running
虚拟机关机或开机
[root@localhost ~]# virsh shutdown centos7.0
域 centos7.0 被关闭
[root@localhost ~]# virsh start test02
域 test02 已开始
虚拟机暂停(挂起)与恢复
[root@localhost ~]# virsh suspend centos7.0
域 centos7.0 被挂起
[root@localhost ~]# virsh resume centos7.0
域 centos7.0 被重新恢复
配置虚拟机伴随宿主机自动启动
[root@localhost ~]# virsh autostart centos7.0
域 centos7.0标记为自动开始
虚拟机克隆(语法:virt-clone -o 原虚拟机 -n 新虚拟机 -f 新img文件)
[root@localhost ~]# virt-clone -o centos7.0 -n test02 -f /var/lib/libvirt/images/store/test02.qcow2 //*确保在关机状态下进行克隆
WARNING 当卷已经被全部分配后,需要的卷容量将超过可用池空间。(20480 M 需要的容量 > 7477 M 可用容量)
正在分配 'test02.qcow2' | 20 GB 00:00:53
成功克隆 'test02'。
制作快照
[root@localhost ~]# virsh list –all
Id 名称 状态
----------------------------------------------------
5 test02 running
- centos7.0 关闭
[root@localhost ~]# virsh snapshot-create centos7.0
已生成域快照 1572105184
快照管理
[root@localhost ~]# virsh snapshot-list centos7.0 //查看快照
名称 生成时间 状态
------------------------------------------------------------
1572105184 2019-10-26 23:53:04 +0800 shutoff
[root@localhost ~]# virsh snapshot-revert centos7.0 1572105184 //恢复快照
[root@localhost ~]# virsh snapshot-delete centos7.0 1572105184 //删除快照
已删除域快照 1572105184
[root@localhost ~]# virsh snapshot-list centos7.0
名称 生成时间 状态
查看虚拟机帮助
[root@localhost ~]# virsh -h
命令行安装虚拟机
[root@localhost iso]# virt-install --name demo --ram 500 --disk path=/kvm/images/demo.img,size=8 --cdrom /kvm/images/iso/CentOS-7-x86_64-DVD-1810.iso --graphics vnc
参数说明
-n | --name #指定创建虚拟机名称
--ram #指定内存大小
--vcpus #指定CPU个数
--disk path #指定虚拟机文件存储名称及位置
size #虚拟机大小,单位G
--cdrom #指定镜像位置
vnc #指定远程连接
删除虚拟机
[root@localhost iso]# virsh undefine demo
域 demo 已经被取消定义