linux 虚拟化技术
1.虚拟化与云计算的关系
虚拟化是一种技术,顾名思义,就是将不可拆分的实体资源变成可以自由划分的逻辑资源,从而实现资源的整合、隔离、在分配,云计算就是利用了虚拟化技术的这个特点。
云计算是一种服务模式(IAAS),其思想就是把各种资源整合起来,然后租给有需要的用户,其中的资源包括处理器(CPU)、内存、存储、网络和其它基本的计算资源。通常我们通过虚拟化手段把这些资源分割打包提供给用户使用。
2.Linux虚拟化平台安装
-
KVM/QEMU/LIBVIRT简介
- KVM 是Linux内核模块,它需要CPU指令集(Intel-VT/AMD-V)的支持,是一种硬件辅助虚拟化技术
- QEMU 是一个虚拟化的仿真工具,通过ioctl与内核模块交互完成对硬件的虚拟化支持
- Libvirt 是一个对虚拟化管理的接口和工具,提供客户端程序,例如: virsh ,virt-manager
-
构建虚拟化平台工具软件包
服务 软件包文件 虚拟化仿真程序 qemu–kvm 核心守护进程 libvirt–daemon 客户端程序 libvirt–client QEMU管理模块 libvirt–daemon–driver–qemu 网络管理模块 libvirt–daemon–driver–network DHCP 、DNS服务 dnsmasq -
Linux qemu-kvm 虚拟化平台安装
虚拟化平台的软件包已经默认整合在系统安装光盘中,配置本地yum源后,安装虚拟化平台的命令如下。
[root@ecs ~]# dnf install -y qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu libvirt-daemon-driver-network dnsmasq
# 设置开机自启并且启动服务
[root@ecs ~]# systemctl enable --now libvirtd
-
查看 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
3.配置虚拟化网络
- 创建网桥,网桥文件的模板来自官方网站,其默认路径:/etc/libvirt/qemu/networks/default.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.100' 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 ~]# cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/vbr.xml
# 创建虚拟网络
[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-start vbr
Network vbr started
# 设置开机自启动
[root@ecs ~]# virsh net-autostart vbr
Network vbr marked as autostarted
# 查看设备状态
[root@ecs ~]# virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------------
vbr active yes yes
4.虚拟机磁盘管理
-
虚拟机磁盘管理
qemu-img 是虚拟机的磁盘管理命令,支持非常多的磁盘格式,例如 raw、qcow2、vdi、vmdk 等。
qemu-img 命令格式如下:
qemu-img 子命令 子命令参数 块文件名称 大小
常用的子命令有:
create 创建一个磁盘info 查看磁盘信息
1、创建磁盘
# 创建普通格式磁盘
[root@ecs ~]# qemu-img create -f raw disk1.img 20GFormatting 'disk1.img', fmt=raw size=21474836480
# 创建 CoW 格式磁盘
[root@ecs ~]# qemu-img create -f qcow2 disk2.img 20GFormatting 'disk2.img', fmt=qcow2 size=21474836480 encryption=off cluster_size=65536 lazy_refcounts=off
# 验证
[root@ecs ~]# ls -lh
-rw-r--r-- 1 root root 20G Nov 28 14:20 disk1.img-rw-r--r-- 1 root root 193K Nov 28 14:20 disk2.img
2、创建带后端盘的文件
# 网上下载并上传镜像,例如: cirros.qcow2 到 /var/lib/libvirt/images/
[root@ecs images]# cd /var/lib/libvirt/images
[root@ecs images]#cp /root/cirros.qcow2 /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.imgfile format: qcow2virtual size: 20G (21474836480 bytes)disk size: 196Kcluster_size: 65536backing file: cirros.qcow2Format specific information:... ...
5.虚拟机配置文件
虚拟机配置文件/etc/libvirt/qemu/{虚拟机名称}.xml,其模板文件路径:public/node_base.xml,模板文件来源于官方网站https://libvirt.org/format.html
虚拟机配置文件内容如下:
<domain type='kvm'> # 虚拟机类型
<name>#####</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/#####.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>
6.创建虚拟机
虚拟机管理命令如下所示:
命令 | 说明 |
---|---|
virsh list [–all] | 列出虚拟机 |
virsh start / shutdown | 启动/关闭虚拟机 |
virsh destroy | 强制停止虚拟机 |
virsh define/undefine | 创建/删除虚拟机 |
virsh console | 连接虚拟机的 console |
virsh edit | 修改虚拟机的配置 |
virsh autostart | 设置虚拟机自启动 |
virsh dominfo | 查看虚拟机摘要信息 |
virsh domiflist | 查看虚拟机网卡信息 |
virsh domblklist | 查看虚拟机硬盘信息 |
创建 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
#两次回车退出使用 ctrl + ]