KVM 架构和部署

news2024/10/7 4:30:50

建议使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/499557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI选股】如何通过python调用通达信-小达实现AI选股(量化又多了一个选股工具)

文章目录 前言一、通达信-小达是什么&#xff1f;二、使用步骤1. 引入browser_cookie3库2. 通达信-小达 AI选股源代码 总结 前言 ChatGPT火遍网络&#xff0c;那么有没有可以不用写公式就可以实现AI选股的方法&#xff1f;答案是有&#xff0c;今天我们就来试试通达信的小达&a…

软件测试面试常见问题【含答案】

一、面试技巧题(主观题) 序号面试题1怎么能在技术没有那么合格的前提下给面试官留个好印象&#xff1f;2面试时&#xff0c;如何巧妙地避开不会的问题&#xff1f;面试遇到自己不会的问题如何机智的接话&#xff0c;化被动为主动&#xff1f;3对于了解程度的技能&#xff0c;被…

鸿蒙学习总结

控件 button 源码所在路径&#xff0c;小编也只是猜测&#xff0c;还没搞懂鸿蒙上层app到底层的玩法&#xff0c;网上也没相关资料&#xff0c;找源码真是费劲(不是简单的下载个源码的压缩包&#xff0c;而是找到里面的控件比如Button&#xff0c;或者UIAbility实现的源码&…

探索qrc,rcc和CMAKE_AUTORCC

前导知识&#xff1a;解决qt中cmake单独存放 .ui, .cpp, .h文件 前言 我们的Qt程序可以加载一些资源&#xff0c;比如程序窗口的图标。 像下面这样的原始图标&#xff0c;很丑。 可以给它加上图标&#xff0c;一个小海豚。 一、直接加载资源 这是最简单直接的方式。 …

IntersectionObserver API实现虚拟列表滚动

前言 在本篇文章你将会学到&#xff1a; IntersectionObserver API 的用法&#xff0c;以及如何兼容。如何在React Hook中实现无限滚动。如何正确渲染多达10000个元素的列表。 无限下拉加载技术使用户在大量成块的内容面前一直滚动查看。这种方法是在你向下滚动的时候不断加…

keil MDK5软件包介绍、下载、安装与分享

前言 本文介绍了Keil MDK5软件包的分类、作用、下载、安装与更新。软件包下载可通过Keil自带的Pack Installer、进入Keil Pack下载网站手动下载、去芯片厂家官网下载三种方式。同时分享了一个小技巧&#xff0c;可以直接分享已安装好的软件包给别人。 一. Keil MDK软件包介绍 K…

《Netty》从零开始学netty源码(五十五)之InternalThreadLocalMap

InternalThreadLocalMap 前面介绍PoolThreadLocalCache中了解到netty的线程缓存变量值是存在InternalThreadLocalMap中的&#xff0c;它相对于java原生的map优点在于使用数组来管理变量值而不是map&#xff0c;它的数据结构如下&#xff1a; 在它的变量中与PoolThreadLocalCac…

springboot+vue在线BLOG网站(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的在线BLOG网站闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&…

我与猫头鹰的故事——得到学习的阶段总结

目录 一、背景二、过程三、总结四、升华 一、背景 记忆中已经模糊了加入得到的时间&#xff0c;但是现在它却成了我生活的一部分 每天就像有几位高人在给我细细道来他们的经验&#xff0c;给我前行的路上指引方向。 参与得到学习中不仅仅让我个人见识得到提升&#xff0c;最终…

Spring Cloud Gateway 限流

在高并发的应用中&#xff0c;限流是一个绕不开的话题。限流可以保障我们的 API 服务对所有用户的可用性&#xff0c;也可以防止网络攻击。 一般开发高并发系统常见的限流有&#xff1a;限制总并发数&#xff08;比如数据库连接池、线程池&#xff09;、限制瞬时并发数&#xf…

【C++】类和对象(初阶认识)#中篇#

上篇讲到对象的实例化 这里我们接着来探讨对象 目录 类域及成员函数在类域外的声明方法 内联 构造函数 先来看前三点&#xff1a; 无参调用格式 第四点函数重载 最后一点&#xff1a;没写构造时 自动生成 默认构造 并调用 《坑和补丁篇》 默认构造 析构函…

SETUNA2简介、下载和使用方法(截图贴图工具)

如果你在寻找一个可以截图并将截图置顶显示在桌面的工具&#xff0c;那么本文介绍的工具可以满足你的需求&#xff0c;但是我还是建议你移步&#xff1a; Snipaste介绍、安装、使用技巧&#xff08;截图贴图工具&#xff09;_西晋的no1的博客-CSDN博客 &#xff0c;Snipaste工具…

Illustrator如何使用符号与图表之实例演示?

文章目录 0.引言1.使用Microsoft Excel数据创建图表2.修改图表图形及文字 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对Illustrator进行了学习&#xff0c;本文通过《Illustrator CC2018基础与实战》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文…

校园网自动登陆(河南科技学院)

1. 介绍 河南科技学院校园网自动登陆&#xff08;新乡的很多系统相似&#xff0c;可能也可以用&#xff1f;&#xff09;&#xff0c;java版。可以实现电脑&#xff0c;路由器&#xff0c;软路由的自动认证wifi,后续会上传docker版本的。 源码地址 github&#xff1a;https://…

C嘎嘎的运算符重载基础教程以及遵守规则【文末赠书三本】

博主名字&#xff1a;阿玥的小东东 大家一起共进步&#xff01; 目录 基础概念 优先级和结合性 不会改变用法 在全局范围内重载运算符 小结 本期送书&#xff1a;盼了一年的Core Java最新版卷Ⅱ&#xff0c;终于上市了 基础概念 运算符重载是通过函数重载实现的&#xf…

visual studio code安装c语言编译环境

目录 &#xff08;一&#xff09;Windows下安装GCC&#xff0c;下载并安装MinGW 安装MinGW 配置GCC环境变量 电脑使用CMD命令行输入 gcc -v ,查看gcc当前版本号以此判断gcc是否安装成功​编辑 &#xff08;一&#xff09;Windows下安装GCC&#xff0c;下载并安装MinGW 下载…

索引合并,能不用就不要用吧!

文章目录 1. 问题重现2. 索引合并2.1 Using intersect(...)2.2 Using union(...)2.3 Using sort_union(...)2.4 索引合并原理 3. 索引合并的问题 在前面的文章中&#xff0c;松哥和小伙伴们分享了 MySQL 中&#xff0c;InnoDB 存储引擎的数据结构&#xff0c;小伙伴们知道&…

HTB-OpenKeyS

HTB-OpenKeyS 信息收集80端口立足于JenniferJennifer -> root 信息收集 80端口 对其进行简单的SQL注入测试和NoSQL注入测试后进行目录扫描。 auth.swp文件内容如下&#xff1a; 代码不是很完整&#xff0c;只能大致了解意思&#xff08;请原谅我脑子抽了没注意是个swp交换…

USB 连接检测

文章目录 连接检测连接状态的检测带 Vbus 检测功能的 USB 设备不带 Vbus 检测功能的 USB 设备 连接前的初始化设备端主机端 建立连接过程手册规定检测时间及电平标准 连接检测 USB 协议支持热插拔的特性决定了 USB 主机必须能够动态地检测 USB 设备的连接和断开&#xff0c;这…

linux【网络编程】之网络基础

linux【网络编程】之网络基础 一、网络协议与协议分层1.1 为什么要分层1.2 OSI七层模型1.3 TCP/IP五层(或四层)模型 二、网络传输流程2.1 了解局域网2.2 同一网段内的两台主机进行文件传输2.3 跨网段的主机的文件传输 三、数据包封装和分用四、网络中的地址管理4.1 IP地址4.2 M…