KVM
虚拟化与云计算
- 虚拟化
- 虚拟化是一种技术 ,将不可拆分的实体资源编程可以自由划分的逻辑资源;从而实现资源的整合 , 隔离 , 再分配 , 云计算就是利用了虚拟化技术的特点.
- 云计算
- 云计算是一种 服务模式(IAAS) ,
- 其思想就是把各种资源整合起来 , 然后租给有需求的用户 , 其中的资源包括处理器(CPU) , 内存 , 存储 , 网络和其他基本的计算资源
- 通常我们通过虚拟化手段把这些资源分割打包提供给用户使用
- 核心技术是
KVM
常见的虚拟化系列
创建一台虚拟机
1、创建虚拟机 2cpu,4G内存(默认用户名: root 密码: a)
使用 windows 的同学,请使用 vmware 链接克隆一台新的虚拟机
[root@真机 ~]# vm clone ecs
Domain ecs started [ OK ]
[root@真机 ~]# vm setip ecs 192.168.100.254
#------连接到 ecs 主机,设置主机名
[root@localhost ~]# hostnamectl set-hostname ecs
[root@localhost ~]# exit
2、验证 ecs 是否支持虚拟化
[root@ecs ~]# grep -Po "vmx|svm" /proc/cpuinfo
vmx
... ...
[root@ecs ~]# lsmod |grep kvm
kvm_intel 174841 6
kvm 578518 1 kvm_intel
irqbypass 13503 1 kvm
Linux虚拟化平台安装
安装服务
KVM/QEMU/LIBVIRTD
1. `KVM` : 是Linux内核模块 , 需要CPU指令集的(`Intel-VT/AMD-V`)支持 ,是一种硬件辅助虚拟化技术
2. `QEMU` : 是一个虚拟化的仿真工具 , 通过`ioctl`与内核模块交互完成对硬件的虚拟化技术
3. `Libvirt` : 是一个对虚拟化管理的接口和工具 , 提供客户端程序 , 例如`virsh` , `virt-manager`
构建虚拟化平台工具软件包
1. `qemu-kvm` 虚拟化仿真程序
2. `libvirt-daemon` 核心守护进程
3. `libvirt-client` 客户端程序
4. `libvirt-daemon-driver-qemu` QEMU管理模块
5. `libvirt-daemon-driver-network` 网络管理模块
6. `dnsmasq` DHCP , DNS服务
Linux qemu-kvm 虚拟化平台安装
-
虚拟化平台软件包
qemu-kvm
libvirt-daemon
libvirt-client
libvirt-daemon-driver-qemu
libvirt-daemon-driver-network
dnsmasq
-
使用
yum
安装
dnf install -y qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu libvirt-daemon-driver-network dnsmasq
-
设置开机自动启动并现在启动
systemctl enable --now libvirtd
-
查看版本
virsh version
[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
创建网桥
virsh
- 提供管理各虚拟机的命令接口
- 支持交互/非交互模式 , 查看/创建/停止/关闭
- 格式 :
virsh 控制指令 [资源名称] [参数]
virsh net-list [--all]
列出虚拟网络virsh net-start
启动虚拟交换机virsh net-destroy
强制停止虚拟交换机virsh net-define
根据xml文件创建虚拟网络virsh net-undefine
删除一个虚拟网络设备virsh net-edit
修改虚拟交换机的配置,有检错功能virsh net-autostart
设置开机自启动
创建网桥配置
- 官网手册
https://libvirt.org/docs.html
- 虚拟机和真机不能在同一网段 , 不方便路由访问 ,虚拟机和真机需要在不同的网段,主要是为了避免IP地址冲突和实现网络隔离。在同一局域网内,每个设备都需要唯一的IP地址,否则会出现IP地址冲突,导致网络连接问题。将虚拟机和真机设置在不同的网段,可以确保它们拥有各自的IP地址空间,互不干扰。此外,将虚拟机和真机进行网络隔离,可以提高网络安全。
- 写配置文件 , 一个用于配置libvirt的XML文件,定义了一个名为"vbr"的网络。这个网络使用了NAT模式进行转发,并且通过一个名为"vbr"的桥接器进行连接。 默认路径
/etc/libvirt/qemu/network/vbr.xml
[root@ecs ~]# vim /etc/libvirt/qemu/networks/vbr.xml
<network>
<name>vbr</name> #定义了这个网络的名称,为"vbr" , 使用`ifconfig`查看
<forward mode='nat'/> # 定义了网络转发模式为NAT ,NAT模式允许虚拟机访问外部网络,同时隐藏了虚拟机的真实IP地址。
<bridge name='vbr' stp='on' delay='0'/> #这里定义了一个桥接器,名称为"vbr"。STP(Spanning Tree Protocol)被启用,用于防止网络环路。delay='0'表示STP的转发延迟被设置为0,意味着STP功能被禁用。使用`virsh net-list`查看vbr
<ip address='192.168.100.254' netmask='255.255.255.0'> #定义了网络使用的IP地址和子网掩码。IP地址是192.168.100.254,子网掩码是255.255.255.0。
<dhcp> #这个标签内定义了DHCP服务的相关设置。
<range start='192.168.100.128' end='192.168.100.200'/> #定义了DHCP服务的地址范围。在这个例子中,范围从192.168.100.128到192.168.100.200。这意味着在这个范围内的IP地址可以被分配给连接到这个网络的客户端。
</dhcp>
</ip>
</network>
-
创建网桥
virsh net-define /etc/libvirt/qemu/networks/vbr.xml
-
设置开机自启动
virsh net-autostart vbr
-
启动网桥
virsh net-start vbr
-
验证状态
virsh net-list --all
ifconfig vbr
虚拟机原理
虚拟机的构成
- 虚拟配置文件
*.xml
- 文件默认路径 :
/etc/libvirt/qemu/
- 用途 : 定义了虚拟机的设备 , 例如CPU , 内存 , 网卡等
- 文件默认路径 :
- 存储文件
*.img
- 文件默认路径 :
/var/lib/libvirt/images/
- 用途 : 仿真虚拟机磁盘 , 存储所有数据信息
- 文件默认路径 :
虚拟机磁盘
-
虚拟机磁盘可以使用块设备 , 逻辑卷设备 , 文件仿真等.
-
其中文件仿真模式具有易迁移,易扩展,支持多钟磁盘格式 , 配置方便等特点 , 在云平台上被广泛使用
-
在文件仿真中被广泛采用的
Cow
格式具有 :- 支持弹性空间
- 支持后端盘复用
- 支持快照
- 支持压缩
-
Cow
:Copy On Write
写时拷贝技术- 使用指针指向原始盘所有块
- 若一个块要被改写 , 首先把数据从原始盘拷贝到前端盘 , 然后在前端盘进行改写 , 最后把数据指针指向改写过的数据
- 原始盘始终是只读
虚拟机配置管理
虚拟机磁盘管理
qemu-img
是虚拟机的磁盘管理命令 ,支持非常多的磁盘格式 , 例如raw,qcow2,vdi,vmdk
等qemu-img
命令格式qemu-img 子命令 子命令参数 块文件名称 大小
- 常用子命令有
create
创建 ;- -F : 指定要创建的镜像文件的格式
- 用于指定目标镜像文件的格式。这意味着在创建新镜像文件时,您需要使用
-F
参数来明确您希望创建的镜像格式。
- 用于指定目标镜像文件的格式。这意味着在创建新镜像文件时,您需要使用
- -f : 指定源文件的格式
- 指定源文件的格式。这个参数通常用在将一个镜像文件转换为另一种格式时,例如使用
qemu-img convert
命令。
- 指定源文件的格式。这个参数通常用在将一个镜像文件转换为另一种格式时,例如使用
- -b : 指定一个基础镜像文件 , 新的镜像文件将基于此文件创建
(后端盘)
- -F : 指定要创建的镜像文件的格式
info
查看磁盘信息;
[root@ecs ~]# qemu-img create -f raw disk1.img 20G
Formatting 'disk1.img', fmt=raw size=21474836480
# create创建 -f指定 raw格式 disk1.img文件 大小20G
[root@ecs ~]# qemu-img info disk1.img
# 查看磁盘disk1.img的信息
创建虚拟磁盘
-
创建虚拟机vhost的磁盘文件
- 后端数据盘 :
cirros.qcow2
- 创建前端盘 :
/var/lib/libvirt/images/vmhost.img
- 前端盘大小是 :
20G
- 后端数据盘 :
- 把数据盘拷贝到对应目录
[root@ecs ~]# cp cirros.qcow2 /var/lib/libvirt/images/
[root@ecs ~]# cd /var/lib/libvirt/images/
- 克隆磁盘
[root@ecs ~]# qemu-img info cirros.qcow2
# 查看磁盘cirros.qcow2的信息 ,确认磁盘格式
[root@ecs ~]# qemu-img create -F qcow2 -f qcow2 -b cirros.qcow2 vmhost.img 20G
[root@ecs ~]# qemu-img info vmhost.img #查看信息
虚拟机配置文件
- 虚拟配置文件
(*.xml)
- 文件 :
/etc/libvirt/qemu/{虚拟机名称}.xml
- 模板文件 :
node_base.xml
- 模板文件来源 , 官方网站 :
https://libvirt.org/format.html
- 文件 :
- 拷贝模板文件到对应文件中 , 方便修改
cp node_base.xml /etc/libvirt/qemu/vmhost.xml
- 修改配置文件
- 虚拟机名称 :
vmhost
- 虚拟机配置 :
CPU(2核)内存(1G)
- 虚拟机网络 :
vbr桥接
- 虚拟机名称 :
[root@ecs ~]# vim /etc/libvirt/qemu/vmhost.xml
<domain type='kvm'> #虚拟机
<name>vmhost</name> #名字 , 唯一
<memory unit='KB'>1024000</memory> #预留内存
<currentMemory unit='KB'>1024000</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>
<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'>
<source file='/var/lib/libvirt/images/vmhost.img'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<source bridge='vbr'/>
创建虚拟机
- 操作命令汇总
virsh list [--all]
列出虚拟机virsh start/shutdown
启动/关闭虚拟机virsh destroy
强制停止虚拟机virsh define/undefine
创建/删除虚拟机virsh console
连接虚拟机的 console
[root@ecs ~]# virsh define /etc/libvirt/qemu/vmhost.xml
# 创建虚拟机
[root@ecs ~]# virsh list --all #查看所有虚拟机
Id Name State
----------------------------------------------------
- vmhost shut off
#vmhost未启动
[root@ecs ~]# virsh start vmhost #启动虚拟机
[root@ecs ~]# virsh console vmhost # 两次回车
#连接虚拟机
退出使用 ctrl + ]
- 管理命令汇总
virsh edit
修改虚拟机的配置virsh autostart
设置虚拟机自启动virsh dominfo
查看虚拟机摘要信息virsh domiflist
查看虚拟机网卡信息virsh domblklist
查看虚拟机硬盘信息
公有云
云服务三大类型
laaS
: 基础设施服务PaaS
: 平台服务SaaS
: 软件服务
云计算是什么
-
云计算是一种服务模式(
IAAS
) , 其思想就是把各种资源整合起来 , 然后租给有需要的用户 , 其中的资源包括处理器 , 内存 , 存储, 网络和其他基本的计算资源 -
云计算是一种服务模式(
PAAS
), 除基础设施外还提供如 : 编程语言 , 运行环境 , 技术支持 , 甚至针对平台而机型的应用系用开发 , 优化等服务 , 也就是中间件服务 -
云计算是一种服务模式(
SAAS
) , 是一种通过Internet提供软件的模式 , 客户可以根据自己实际需求 , 通过互联网向厂商订购所需的应用软件服务
公有云 , 私有云 , 混合云
- 公有云
- 公有云是第三方的云供应商 , 通过互联网为广大用户提供的一种按需使用的服务器资源 , 是一种云基础设施
- 私有云
- 私有云是一个企业或组织的专用云环境 , 一般在企业内部使用 , 不对外提供服务 , 因此也被视为一种企业云
- 混合云
- 混合云实在私有云的基础上 , 组合一个或多个公有云资源 ,从而允许在不同云环境之间共享应用和数据的使用方式.