您现在的位置是:首页 >技术杂谈 >KVM 架构和部署网站首页技术杂谈

KVM 架构和部署

清瞳清 2024-06-06 00:00:02
简介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
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。