您现在的位置是:首页 >技术杂谈 >KVM 架构和部署网站首页技术杂谈
KVM 架构和部署
建议使用centos和ubuntu 系统做实验,rocky 系列有些不太支持
宿主机环境准备
KVM需要宿主机CPU必须支持虚拟化功能,因此如果是在vmware workstation上使用虚拟机做宿主机,那么必须要在虚拟机配置界面的处理器选项中开启虚拟机化功能。
验证开启虚拟化
grep -Em 1 "vmx|svm" /proc/cpuinfo
#Intel CPU 对应 vmx
#AMD CPU 对应 svm
安装KVM工具包
KVM 相关工具包介绍
- qemu-kvm: 为kvm提供底层仿真支持
- libvirt-daemon: libvirtd守护进程,管理虚拟机
- libvirt-client: 用户端软件,提供客户端管理命令
- libvirt-daemon-driver-qemu: libvirtd连接qemu的驱动
- libvirt: 使用最多的KVM虚拟化管理工具和应用程序接口,即通过libvirt调用KVM创建虚拟机,
libvirt是KVM通用的访问API,其不但能管理KVM,还能管理VMware、Xen、Hyper-V、
virtualBox等虚拟化方案。 - virt-manager: 图形界面管理工具,其底层也是调用libvirt API来完成对虚拟机的操作,包括虚拟机的
创建、删除、启动、停止以及一些简单的监控功能等。 - virt-install: 虚拟机命令行安装工具
- virsh: 命令行工具是基于 libvirt API 创建的命令行工具,它可以作为图形化的 virt-manager 应用的
备选工具。virsh 命令可以被用来创建虚拟化任务管理脚本,如安装、启动和停止虚拟机 - virt-viewer: 通过 VNC 和 SPICE 协议显示虚拟机器图形控制台的最小工具。该工具在其同名软件包
中:virtviewer - cockpit: CentOS8 专门提供的基于Web的虚拟机管理界面
libvirt 包介绍
libvirt 程序包是一个与虚拟机监控程序相独立的虚拟化应用程序接口,它可以与操作系统的一系列虚拟化性能进行交互
libvirt 程序包提供:
- 一个稳定的通用层来安全地管理主机上的虚拟机。
- 一个管理本地系统和连网主机的通用接口。
在虚拟机监控程序支持的情况下,部署、创建、修改、监测、控制、迁移以及停止虚拟机操作都需要这些API。尽管 libvirt 可同时访问多个主机,但 API 只限于单节点操作
libvirt 程序包被设计为用来构建高级管理工具和应用程序,例如 virt-manager 与 virsh 命令行管理工具。libvirt 主要的功能是管理单节点主机,并提供 API 来列举、监测和使用管理节点上的可用资源,其中包括CPU、内存、储存、网络和非一致性内存访问(NUMA)分区。管理工具可以位于独立于主机的物理机上,并通过安全协议和主机进行交流
libvirt结构图
centos 8 还提供基于web的虚拟机管理方式(这里只是简单提及一下,大家做个了解)
yum -y install cockpit cockpit-machines
systemctl enable --now cockpit.socket
#打开浏览器,访问以下地址;
https://localhost:9090
输入虚拟机的账号密码登录
安装 KVM 相关包
使用虚拟化,需要至少 qemu-kvm 和 qemu-img(安装qemu-kvm会自动安装) 软件包
建议安装:yum install qemu-kvm libvirt virt-manager virt-install
示例:centos 8 安装KVM相关工具
yum -y install qemu-kvm libvirt virt-manager virt-install virt-viewer
systemctl start libvirtd
示例:Ubuntu安装KVM
Ubuntu 18.04
官方文档: https://ubuntu.com/server/docs/virtualization-libvirt
# apt install qemu-kvm virt-manager libvirt-daemon-system
# kvm-ok #验证是否支持kvm,只有Ubuntu支持,CentOS 不支持
INFO: /dev/kvm exists
KVM acceleration can be used
安装
```bash
apt -y install qemu-kvm virt-manager libvirt-daemon-system
#如果没有开启CPU虚拟化功能会提示以下信息
[root@ubuntu1804 ~]#kvm-ok
INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used
#添加CPU的虚拟化支持再执行
[root@ubuntu1804 ~]#kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
图形化工具 virt-manager
centos 上管理工具 virt-manager
我们一般的实验系统都是最小化安装,是不带图形化界面的,所以我们的图形化管理功能是不存在的,我们可以借助 X-manager
来展示图形
官方地址:https://www.xshell.com/zh/xmanager/
下载完成后,在桌面上找到文件夹里的 Xmanager - Passive
打开置于后台
[root@localhost ~]# export DISPLAY=192.168.31.24:0.0
[root@localhost ~]# virt-manager
默认网络设置
安装完虚拟工具后,会自动生成一个virbr0网卡。类似于VMware生成的VMnet8网卡,充当虚拟机的NAT网卡
准备安装系统的ISO相关文件
[root@localhost ~]# mkdir -pv /data/isos/
mkdir: created directory '/data'
mkdir: created directory '/data/isos/'
[root@localhost ~]# ls /data/isos/
CentOS-7-x86_64-Minimal-2009.iso CentOS-Stream-8-x86_64-20230209-boot.iso
创建虚拟机
virt-manager 是一个图形化虚拟机管理工具,方便管理和查看虚拟机
注意:此方式创建虚拟机的磁盘空间为立即分配,所以不要分太大!
此处指定的磁盘空间不要太大,因为是从宿主机中立即分配此处所指定的空间
生成虚拟机相关文件
[root@localhost ~]# ll /var/lib/libvirt/images/centos7.0.qcow2
-rw-------. 1 root root 21478375424 May 7 01:24 /var/lib/libvirt/images/centos7.0.qcow2
[root@localhost ~]# ll /etc/libvirt/qemu/centos7.0.xml
-rw-------. 1 root root 5946 May 7 00:49 /etc/libvirt/qemu/centos7.0.xml
使用virt-install 创建虚拟机
虽然使用virt-manager 可以方便的管理虚拟机,但如果需要批量进行虚拟机的创建管理,命令行工具virt-install 更加方便和适合
virt-install 使用说明
# virt-install --help
usage: virt-install --name NAME --ram RAM STORAGE INSTALL [options]
使用 '--option=?' 或者 '--option help' 查看可用子选项
有关示例及完整选项语法,请查看 man page。
使用指定安装介质新建虚拟机
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
--connect URI 使用 libvirt URI 连接到 hypervisor
通用选项:
-n NAME, --name NAME 客户端虚拟机的名称
--memory MEMORY 配置虚拟机内存分配
例如:
--memory 1024 (in MiB)
--memory 512,maxmemory=1024
--vcpus VCPUS 为虚拟机配置的 vcpus 数。
例如:
--vcpus 5
--vcpus 5,maxcpus=10,cpuset=1-4,6,8
--vcpus sockets=2,cores=4,threads=2
--cpu CPU CPU 型号及功能。
例如:
--cpu coreduo,+x2apic
--cpu host
--metadata METADATA 配置虚拟机元数据
例如:
--metadata name=foo,title="My pretty title",uuid=...
--metadata description="My nice long description"
安装方法选项:
--cdrom CDROM 光驱安装介质
-l LOCATION, --location LOCATION 安装源
例如:
nfs:host:/path
http://host/path
ftp://host/path
--pxe 使用 PXE 协议从网络引导
--import 在磁盘映像中构建虚拟机
--livecd 将光驱介质视为 Live CD
-x EXTRA_ARGS, --extra-args EXTRA_ARGS 附加到使用 --location 引导的内核的参数
--initrd-inject INITRD_INJECT 使用 --location 为 initrd 的 root 添加给定文件
--os-variant DISTRO_VARIANT 在其中安装 OS 变体的虚拟机,比
如:'fedora18'、'rhel6'、'winxp' 等等
--boot BOOT 配置虚拟机引导设置。
例如:
--boot hd,cdrom,menu=on
--boot init=/sbin/init (for containers)
--idmap IDMAP 为 LXC 容器启用用户名称空间。
例如:
--idmap uid_start=0,uid_target=1000,uid_count=10
设备选项:
--disk DISK 使用不同选项指定存储。例如:
--disk size=10 (new 10GiB image in default location)
--disk /my/existing/disk,cache=none
--disk device=cdrom,bus=scsi
--disk=?
-w NETWORK, --network NETWORK 配置虚拟机网络接口。
例如:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--network none
--network help
--graphics GRAPHICS 配置虚拟机显示设置。
例如:
--graphics vnc
--graphics spice,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja
--controller CONTROLLER 配置虚拟机控制程序设备。
例如:
--controller type=usb,model=ich9-ehci1
--input INPUT 配置虚拟机输入设备。
例如:
--input tablet
--input keyboard,bus=usb
--serial SERIAL 配置虚拟机串口设备
--parallel PARALLEL 配置虚拟机并口设备
--channel CHANNEL 配置虚拟机沟通频道
--console CONSOLE 配置虚拟机与主机之间的文本控制台连接
--hostdev HOSTDEV 将物理 USB/PCI/etc 主机设备配置为与虚拟机共享
--filesystem FILESYSTEM 将主机目录传递给虚拟机。
例如:
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=template
--sound [SOUND] 配置虚拟机声音设备模拟
--watchdog WATCHDOG 配置虚拟机 watchdog 设备
--video VIDEO 配置虚拟机视频硬件。
--smartcard SMARTCARD 配置虚拟机智能卡设备。例如:--smartcard mode=passthrough
--redirdev REDIRDEV 配置虚拟机重定向设备。例如:--redirdev
usb,type=tcp,server=192.168.1.1:4000
--memballoon MEMBALLOON 配置虚拟机 memballoon 设备。例如:--memballoon model=virtio
--tpm TPM 配置虚拟机 TPM 设备。例如:--tpm /dev/tpm
--rng RNG 配置虚拟机 RNG 设备。例如:--rng /dev/random
--panic PANIC 配置虚拟机 panic 设备。例如:--panic default
虚拟机配置选项:
--security SECURITY 设定域安全驱动器配置。
--numatune NUMATUNE 为域进程调整 NUMA 策略。
--memtune MEMTUNE 为域进程调整内粗策略。
--blkiotune BLKIOTUNE为域进程调整 blkio 策略。
--memorybacking MEMORYBACKING 为域进程设置内存后备策略。例如:
--memorybacking hugepages=on
--features FEATURES 设置域 <features> XML。
例如:
--features acpi=off
--features apic=on,eoi=on
--clock CLOCK 设置域 <clock> XML。例如:--clock
offset=localtime,rtc_tickpolicy=catchup
--pm PM 配置 VM 电源管理功能
--events EVENTS 配置 VM 生命周期管理策略
--resource RESOURCE 配置 VM 资源分区(cgroups)
虚拟化平台选项:
-v, --hvm 客户端应该是一个全虚拟客户端
-p, --paravirt 这个客户端一个是一个半虚拟客户端
--container 这台虚拟机需要一个容器客户端
--virt-type HV_TYPE 要使用的管理程序名称(kvm、qemu、xen等等)
--arch ARCH 模拟的 CPU 构架
--machine MACHINE 要模拟的机器类型
其它选项:
--autostart 引导主机时自动启动域。
--wait WAIT 等待安装完成的分钟数。
--noautoconsole 不要自动尝试连接到客户端控制台
--noreboot 完成安装后不要引导虚拟机。
--print-xml [XMLONLY] 输出所生成域 XML,而不是创建虚拟机。
--dry-run 完成安装步骤,但不要创建设备或者定义虚拟机。
--check CHECK 启用或禁用验证检查。例如:
--check path_in_use=off
--check all=off
-q, --quiet 禁止无错误输出
-d, --debug 输入故障排除信息
virt-install 命令创建虚拟机磁盘
注意:qemu-img create 一定要确认对应路径下没有此文件,如果存在将覆盖原文件
qemu-img create -f qcow2 /data/kvm_cache/centos8.qcow2 20G
观察文件虚拟磁盘大小,比较用virt-manager 创建的虚拟机磁盘文件大小
[root@localhost ~]# ll -h /data/kvm_cache/
total 196K
-rw-r--r--. 1 root root 193K May 7 01:52 centos8.qcow2
利用osinfo-query 命令查看支持的OS版本
创建虚拟机使用光盘启动并手动安装
#创建默认NAT模式的虚拟机,并不自动打开virt-viewer连接console,需要手动打开virt-manager 连接,并手动安装系统
virt-install --name centos8 --ram 1024 --vcpus 2 --cdrom=/data/isos/CentOS-Stream-8-x86_64-20230209-boot.iso --disk path=/data/kvm_cache/centos8.qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-variant=centos-stream8
Starting install...
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
[root@localhost ~]# export DISPLAY=192.168.31.24:0.0
[root@localhost ~]# virt-manager
安装过程和以上相同
使用桥接网络
virt-install --name centos8 --ram 1024 --vcpus 2 --cdrom=/data/isos/CentOS-Stream-8-x86_64-20230209-boot.iso --disk path=/data/kvm_cache/centos8.qcow2 --network network=bridge:virbr0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole --os-variant=centos-stream8
基于现有虚拟机磁盘为模板创建新的虚拟机
1、利用virt-manager实现
基于已经安装好的的虚拟机磁盘文件,创建新的磁盘文件
[root@localhost ~]# cp -a /data/kvm_cache/centos8.qcow2 /data/kvm_cache/centos8-2.qcow2
2、利用virt-install实现
[root@localhost kvm_cache]# cp centos8.qcow2 centos8-2.qcow2
virt-install --name centos8-2 --ram 1024 --vcpus 2 --cdrom=/data/isos/CentOS-Stream-8-x86_64-20230209-boot.iso --disk path=/data/kvm_cache/centos8.qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --autostart --boot hd
运行工具,可以看到下面出现新的虚拟机
[root@localhost ~]# virt-manager