上一篇(工业云原生设计探讨-数字化架构设计(9)_luozhonghua2000的博客-CSDN博客)我们谈到整体生态中的云原生,虚拟机层与数字工厂原生系统打通是通过我们工业一体机,对上就是云原生层,再上层就是中台,最后才是应用app,虚拟机层都属于os级基础软件,因此我们考虑从iaas开始验证(真正要做好,vm达到100%硬件性能是必须要在芯片上做优化和升级的),这里基本上是手工命令实现的,要商业化起码要做到管理界面维护虚机集群弹性和订单化及虚机性能优化。
本篇内容:裸金属虚拟化方法, 裸机虚拟化解决方案
第一部分:裸金属虚拟化方法
虚拟化架构常见的分为两类: 一、宿主虚拟化,二、裸机虚拟化
宿主虚拟化
很好理解,就是你想装虚拟化软件,需要先装一个操作系统
就比如 Windows系统上的 VMware Workstation VirtualBox 软件 ,Mac OS 上的 Parallels Desktop 软件
宿主虚拟化的 hypervisor 就像是安装在子操作系统上的一个应用,这种方式比裸机虚拟化的 hypervisor 提供更好的硬件兼容性,因为调用硬件的流程是 虚拟机内核 -> Hypervisor -> 操作系统 -> 硬件,但这也导致了宿主虚拟化的性能是要比裸机虚拟化差很多的
优点:
1、硬件兼容性好
2、使用方便,附加功能比较丰富
缺点:
1、性能差
裸机虚拟化
这个不需要操作系统, 虚拟管理程序本身就是一个操作系统,例如:VMware ESXI 、Proxmox VE、Microsoft Hyper-V, 裸机虚拟化的性能是要优于宿主虚拟化的,一般IDC都是运行的这类系统
裸机型在虚拟化中Hypervisor直接管理访问硬件资源,不需要底层操作系统,也可以将Hypervisor看作是一个很薄的操作系统, hypervisor直接访问硬件资源,这个使得虚拟机能够获得更好的性能、扩展性与稳定性。
调用的流程是 虚拟机内核 -> Hypervisor -> 硬件
优点:
1、性能好,损耗极低
2、一般拥有资源管理、高可用性和安全方面的功能,比较适合企业数据中心
缺点:
1、硬件支持有限,因为hypervisor通常内置的设备驱动很有限,比如esxi
第二部分:裸机虚拟化解决方案
主流计算虚拟化技术
开源的:KVM、Xen 闭源的:Hyper-V 、VMware ESXi 、Huawei FusionSphere
KVM是全虚拟化的,Xen有全虚拟化和半虚拟化
KVM的核心是KVM module(Linux Kernel):主要功能是初始化。
KVM模块直接整合在Linux内核中
1.KVM组成
- KVM Driver
虚拟机创建
虚拟机内存分配
虚拟CPU寄存器读写
虚拟CPU运行 - QEMU(经过简化与修改)
模拟PC硬件的用户控件组件
提供I/O设备模型及访问外设的途径
2.KVM虚拟化三种模式
客户模式
用户模式
内核模式
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命令集管理虚拟机
1、安装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
2、设置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: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
3、KVM图形化管理
virt-manager是基于libvirt的图形化虚拟机管理软件
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 已经被取消定义



