常见虚拟化技术
一、虚拟化主要厂商及产品介绍
系列 | PC/服务器版代表 |
VMware | VMware Workstation、VSphere |
Microsoft | VirtualPC、Hyper-V |
RedHat | KVM、RHEV |
Citrix | Xen |
Oracle | Oracle VM VirtualBox |
虚拟化与云计算的关系
一、虚拟化是什么
虚拟化是一种技术,就是将不可拆分的实体资源变成可以自由划分的逻辑资源,从而实现资源的整合、隔离、在分配,云计算就是利用了虚拟化技术的这个特点。
二、云计算是什么
云计算是一种服务模式(IAAS),其思想就是把各种资源整合起来,然后租给有需要的用户,其中的资源包括处理器(CPU)、内存、存储、网络和其它基本的计算资源。通常我们通过虚拟化手段把这些资源分割打包提供给用户使用
虚拟化平台安装
一、Linux验证虚拟化支持
[root@localhost ~]# grep -Po "vmx|svm" /proc/cpuinfo
grep -Po "vmx|svm" /proc/cpuinfo
vmx
... ...
[root@localhost ~]# lsmod | grep kvm
kvm_intel 174841 6
kvm 578518 1 kvm_intel
irqbypass 13503 1 kvm
[root@server1 ~]# modprobe kvm
[root@server1 ~]# lsmod | grep kvm
kvm_intel 389120 5
kvm 958464 1 kvm_intel
irqbypass 16384 7 kvm
[root@server1 ~]# egrep -o "vmx|svm" /proc/cpuinfo
二、虚拟化平台安装
1、虚拟化实验图例
2、KVM/QEMU/LIBVIRTD
- KVM 是Linux内核模块,它需要CPU指令集(Inter-VT/AMD-V)的支持,是一种硬件辅助虚拟化技术
- QEMU 是一个虚拟化的仿真工具,通过 ioctl 与内核模块交互完成对硬件的虚拟化支持
- Libvitr 是一个对虚拟化管理的接口和工具,提供客户端程序,例如:virsh,virt-manager
3、安装服务
1)、构建虚拟化平台工具软件包:
服务 | 软件包文件 |
虚拟化仿真程序 | qemu-kvm |
核心守护进程 | libvirt-daemon |
客户端程序 | libvirt-client |
QEMU管理模块 | libvirt-daemon-driver-qemu |
网络管理模块 | libvirt-daemon-driver-network |
DHCP、DNS服务 | dnsmasq |
2)、qemu-kvm虚拟化平台安装
虚拟化平台的软件包已经默认整合在系统安装光盘中
安装虚拟化平台
[root@ecs ~]# dnf install -y qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu libvirt-daemon-driver-network dnsmasq
[root@ecs ~]# systemctl enable libvirtd --now
[root@ecs ~]# virsh version
Compiled against library: libvirt 8.0.0
Using library: libvirt 8.0.0
Using API: QEMU 8.0.0
Running hypervisor: QEMU 6.2.0
3)virsh
提供管理各虚拟机的命令接口
支持交互/非交互模式,查看/创建/停止/关闭
格式:virsh 控制指令 [资源名称] [参数]
[root@ecs ~]# virsh version
setlocale: No such file or directory
Compiled against library: libvirt 8.0.0
Using library: libvirt 8.0.0
Using API: QEMU 8.0.0
Running hypervisor: QEMU 6.2.0
虚拟化网络
一、网桥文件
模板来自官方网站
官网手册:https://libvirt.org/docs.html
默认路径:/etc/libvirt/qemu/networks/vbr.xml
[root@ecs ~]# vim /etc/libvirt/qemu/networks/vbr.xml
<network>
<name>vbr</name>
<forward mode='nat'/>
<bridge name='vbr' stp='on' delay='0'/>
<ip address='192.168.100.254' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.100.128' end='192.168.100.200'/>
</dhcp>
</ip>
</network>
二、虚拟网络管理命令
命令 | 描述 |
virsh net-list [--all] | 列出虚拟网络 |
virsh net-start | 启动虚拟交换机 |
virsh net-destroy | 强制停止虚拟交换机 |
virsh net-define | 根据xml文件创建虚拟网络 |
virsh net-undefine | 删除一个虚拟网络设备 |
virsh net-edit | 修改虚拟交换机的配置 |
virsh net-autostart | 设置开机自启动 |
三、创建网桥
# 通过配置文件定义网桥设备
[root@ecs ~]# virsh net-define /etc/libvirt/qemu/networks/vbr.xml
Network vbr defined from /etc/libvirt/qemu/networks/vbr.xml
# 设置开机自启动
[root@ecs ~]# virsh net-autostart vbr
Network vbr marked as autostarted
# 启动网桥
[root@ecs ~]# virsh net-start vbr
Network vbr started
# 验证状态
[root@ecs ~]# virsh net-list --all
Name State Autostart Persistent
-----------------------------------------
vbr active yes yes
# 验证
[root@ecs ~]# ifconfig vbr
虚拟机原理
一、虚拟机的构成
1、虚拟配置文件(*.xml)
- 文件默认路径:/etc/libvirt/qemu/
- 用途:定义了虚拟机的设备,例如:CPU、内存、网卡等
2、存储文件(*.img)
- 文件默认路径:/var/lib/libvirt/images/
- 用途:仿真虚拟机磁盘,存储所有数据信息
3、例如我们要创建 vmhost 虚拟机
创建 vmhost.img
创建 vmhost.xml
二、虚拟机磁盘
虚拟机磁盘可以使用块设备、逻辑卷设备、文件仿真等。
文件仿真 在软件层面模拟存储设备的技术,通常指的是通过软件工具模拟真实文件系统的行为
其中文件仿真模式具有易迁移、易扩展、支持多种磁盘格式、配置方便等特点,在云平台上被广泛使用。
在文件仿真中被广泛采用的CoW格式具有:
- 支持弹性空间
- 支持后端盘复用
- 支持快照
- 支持压缩
1、CoW
Copy On Write 写时拷贝技术
- CoW 技术中,指针并不直接指向原始盘的所有快,而是用于管理和追踪数据块的状态。
初始状态下,所有的指针都指向原始盘中的相应数据块。这意味着系统中的每一个数据块都有一个指针指向其在原始盘中的位置。 当某个数据块需要被修改时,系统不会直接修改原始盘中的数据块,而是会在新的位置创建一个副本,并将修改应用到这个副本上。 创建副本后,指针会被更新,指向新的数据块。原始数据块保持不变,仍然可以被其它快照或版本引用。 在创建快照时,系统会记录当前所有数据块的指针状态。这些指针指向的数据块构成了快照的一个完整视图。 当后续有数据块被修改时,快照中的指针仍然指向原始数据块,从而保证快照的一致性和完整性。 快照可以是原始数据的快照,也可以是修改后的数据的快照,这取决于快照创建的时间点。
- 若一个块要被改写,首先把数据从原始盘拷贝到前端盘,然后在前端盘进行改写,最后把数据指针指向改写过的数据
- 原始盘通常被视为只读的
虚拟机配置管理
一、虚拟机磁盘管理
qemu-img 是虚拟机的磁盘管理命令,支持非常多的磁盘格式,例如 raw、qcow2、vdi、vmdk 等等。
1、qemu-img 命令格式
qemu-img 子命令 子命令参数 块文件名称 大小
2、常用子命令有:
create 创建一个磁盘
info 查看磁盘信息
3、创建磁盘
# 创建普通格式磁盘
[root@ecs ~]# qemu-img create -f raw disk1.img 20G
Formatting 'disk1.img', fmt=raw size=21474836480
# 创建 CoW 格式磁盘
[root@ecs ~]# qemu-img create -f qcow2 disk2.img 20G
Formatting 'disk2.img', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=21474836480 lazy_refcounts=off refcount_bits=16
# 验证
[root@ecs ~]# ls
disk1.img disk2.img
[root@ecs ~]# qemu-img info disk1.img
image: disk1.img
file format: raw
virtual size: 20 GiB (21474836480 bytes)
disk size: 1 MiB
[root@ecs ~]# qemu-img info disk2.img
image: disk2.img
file format: qcow2
virtual size: 20 GiB (21474836480 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
[root@ecs ~]# rm -f disk1.img disk2.img
[root@ecs ~]# ls
[root@ecs ~]#
4、创建带后端盘的文件
# 上传镜像 cirros.qcow2 到 /var/lib/libvirt/images
[root@ecs ~]# cd /var/lib/libvirt/images/
[root@ecs images]# qemu-img create -b cirros.qcow2 -F qcow2 -f qcow2 vmhost.img 20G
[root@ecs images]# qemu-img info vmhost.img
image: vmhost.img
file format: qcow2
virtual size: 20 GiB (21474836480 bytes)
disk size: 670 MiB
cluster_size: 65536
backing file: cirros.qcow2
backing file format: qcow2
Format specific information:
......
二、虚拟机配置文件管理
1、虚拟配置文件
文件:/etc/libvirt/qemu/虚拟机名称.xml
虚拟机配置文件太长,记不住怎么办
虚拟机配置文件可以用模板创建,能够认识修改即可
<domain type='kvm'> # 虚拟机类型
<name>vmhost</name> #虚拟机名称
<memory unit='KB'>1048576</memory> # 最大内存
<currentMemory unit='KB'>1048576</currentMemory> # 当前内存
<vcpu placement='static'>2</vcpu> # CPU数量
<os>
<type arch='x86_64' machine='pc'>hvm</type> # 系统引导参数
<boot dev='hd'/>
<bootmenu enable='yes'/>
<bios useserial='yes'/>
</os>
<features> # 电源管理特性
<acpi/>
<apic/>
</features>
<cpu mode='host-passthrough'></cpu> # CPU仿真
<clock offset='localtime'/> # 系统时钟
<on_poweroff>destroy</on_poweroff> # 模拟硬件按钮
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices> # 设备定义
<emulator>/usr/libexec/qemu-kvm</emulator> # 仿真程序
<disk type='file' device='disk'> # 文件/磁盘仿真
<driver name='qemu' type='qcow2'/> # 文件格式
<source file='/var/lib/libvirt/images/vmhost.img'/> # 磁盘文件路径
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'> 网卡仿真
<source bridge='vbr'/> # 连接网桥名称
<model type='virtio'/>
</interface>
<channel type='unix'> # agent客户端
<target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>
<serial type='pty'></serial> # 终端类型
<console type='pty'>
<target type='serial'/>
</console>
<memballoon model='virtio'></memballoon>
</devices>
</domain>
2、示例
---虚拟机名称:vmhost
---虚拟机配置:CPU(2核心) 内存(16G)
---虚拟机网络:vbr
[root@ecs ~]# vim /etc/libvirt/qemu/vmhost.xml
02: <name>vmhost</name>
03: <memory unit='KB'>1024000</memory>
04: <currentMemory unit='KB'>1024000</currentMemory>
05: <vcpu placement='static'>2</vcpu>
25: <source file='/var/lib/libvirt/images/vmhost.img'/>
29: <source bridge='vbr'/>
三、创建虚拟机
1、虚拟机管理命令
命令 | 说明 |
virsh list [--all] | 列出虚拟机 |
virsh start/shutdown/reboot | 启动/关闭/重启虚拟机 |
virsh destroy | 强制停止虚拟机 |
virsh define/undefine | 创建/删除虚拟机 |
virsh console | 连接虚拟机的 console |
2、创建 vmhost 虚拟机
[root@ecs ~]# virsh define /etc/libvirt/qemu/vmhost.xml
Domain vmhost defined from /etc/libvirt/qemu/vmhost.xml
[root@ecs ~]# virsh list --all
Id Name State
----------------------------------------------------
- vmhost shut off
[root@ecs ~]# virsh start vmhost
Domain vmhost started
[root@ecs ~]# virsh console vmhost # 两次回车
Connected to domain vmhost
Escape character is ^]
login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
cirros login:
退出使用 ctrl + ]
3、虚拟机管理命令(续)
命令 | 说明 |
virsh edit | 修改虚拟机的配置 |
virsh autostart | 设置虚拟机自启动 |
virsh dominfo | 查看虚拟机摘要信息 |
virsh domiflist | 查看虚拟机网卡信息 |
virsh domblklist | 查看虚拟机硬盘信息 |
公有云概述
一、云服务类型
1、三大服务模式
- IaaS:基础设施服务(把各种资源整合起来,然后租给有需要的用户,其中的资源包括处理器(CPU)、内存、存储、网络和其他基本的计算资源)
- Paas:平台服务(除基础设施外还提供如:编程语言,运行环境,技术支持,甚至针对该平台而进行的应用系统开发、优化等服务,也就是中间件服务)
- SaaS:软件服务(是一种通过Internet提供软件的模式,客户端可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务)
2、公有云、私有云、混合云
- 公有云:是第三方的云供应商,通过互联网为广大用户提供的一种按需使用的服务器资源,是一种云基础设施。
- 私有云:是一个企业或组织的专用云环境。一般在企业内部使用,不对外提供服务,因此它也被视为一种企业云。
- 混合云:是在私有云的基础上,组合一个或多个公有云资源,从而允许在不同云环境之间共享应用和数据的使用方式。