运维新手入门——KVM(Beginner‘s Guide to Operations and Maintenance - kvm)

  💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

本人主要分享计算机核心技术:系统维护、数据库、网络安全、自动化运维、容器技术、云计算、人工智能、运维开发、算法结构、物联网、JAVA 、Python、PHP、C、C++等。
不同类型针对性训练,提升逻辑思维,剑指大厂,非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。

运维新手入门——KVM

一、前言

KVM 全称是 Kernel-Based Virtual Machine,基于linux内核的虚拟化技术,这里使用KVM本地模拟虚机交付,记录下使用过程。

二、KVM架构
一些说明
① 虚拟化是云计算的基础。一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等)做虚拟化、将虚拟化后的整体做为一个可供分割且组合的操作系统。
② KVM全称是Kernel-Based Virtual Machine。KVM基于Linux内核实现,属于半虚拟化的Hypervisor。KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存,而Qemu则协助提供IO设备半虚拟化,用于虚拟磁盘IO和网络IO等。不过IO设备的虚拟化方向都是往直接透传到宿主机的方向走,比如vhost-net,直接在硬件或内核级别支持。
③ 一个 KVM虚机在宿主机中其实是一个qemu-kvm进程。而每个虚机中的vCPU则为宿主机中的一个线程。
④ 大名鼎鼎的OpenStack底层也使用Libvirt,Libvirt是KVM的管理工具,还可以管理Xen,VirtualBox等Hypervisor。Libvirt包含3个东西:后台daemon服务libvirtd、API 库和命令行工具 virsh。
⑤ 虚机的vCPU

三、虚拟化原理

(一)CPU虚拟化

总数可以超过物理CPU数量,这个叫CPU overcommit(超配)。

一些说明
① 一个 KVM虚机在宿主机中其实是一个qemu-kvm进程。而每个虚机中的vCPU则为宿主机中的一个线程。
② KVM 允许CPU overcommit(超配:虚机的vCPU总数可以超过物理CPU数量),适当overcommit虚机能够充分利用宿主机的CPU,过大的负载反而会影响整体性能。

(二)内存虚拟化

1、影子页面SPT

一些说明
① 影子页表SPT由KVM维护,实际上就是一个 Guest页表到Host页表的映射。直接将GVA转换为HPA。
② 影子页表SPT优点在于当需要访问物理内存的时候,只会经过一层影子页表的转换。而缺点在于需要为Guest的每个进程都维护一个影子页表,这将带来很大的内存开销。同时影子页表的建立是很耗时的,如果 Guest 的进程过多,将导致影子页表频繁切换。

2、EPT和NPT

一些说明
① Intel的EPT(Extent Page Table)技术和AMD的 NPT(Nest Page Table)技术都是在硬件层面上实现GVA到HPA之间的转换。采用了在两级页表结构,Guest OS页表维护GVA->GPA,EPT页表来维护GPA->HPA映射。
② 原来是HVA->HPA由HostOS完成的映射由EPT直接完成GPA->HPA,EPTP负责指向EPT。
③ EPT/NPT地址转化直接由硬件(MMU)查页表完成,大大提升了效率,且只需为Guest维护一份EPT页表,减少内存的开销。

3、VirtIO

QEMU主要负责虚拟设备IO,而QEMU和核心则为VirtIO,VirtIO设计目标是在虚拟化环境下提供与物理设备相近的 I/O 功能和性能,并且避免在虚拟机中安装额外的驱动程序。VirtIO是用半虚拟化,相较于最先QEMU版本的全虚拟化,性能有很大的提升。

(1)模块组成

一些说明
① VirtIO-Block(块设备):提供虚拟磁盘设备的接口。
② VirtIO-Net(网络设备):提供虚拟网络设备的接口。
③ VirtIO-Serial(串口设备):提供虚拟串口设备的接口。
④ VirtIO-Memory(内存设备):提供虚拟内存设备的接口。
⑤ VirtIO-Input(输入设备):提供虚拟输入设备的接口。
⑥ VirtIO-SCSI、VirtIO-NVMe、VirtIO-GPU、VirtIO-FS、VirtIO-VSock 等等虚拟设备类型和协议。

(2)技术原理

一些说明
① VirtIO使用前后端架构,包括前端驱动(Guest OS Kernel内部 VirtIO Driver),后端设备(QEMU设备 VirtIO Device),传输协议(vring)。
② VirtIO 相当于QEMU实现的全虚拟化,因为直接和Hypervisor中的虚拟化设备交互,避免了CPU在VM Exit和VM Entry之间频繁陷入陷出,性能有较大的提升。且提供了一套统一的虚拟设备接口标准。
③ 不过当前IO设备虚拟化的方向当前主要往IO透传的方向发展了,绕开QEMU直接对接硬件的虚拟化能力,比如Intel VT-d和SR-IOV,基本能达到宿主机的吞吐能力。

(3)块IO虚拟化

virtio-block块IO虚拟化同样是virtio-x虚拟化的子模块。

一些说明
① virtio-block的流程需要经过两次IO协议栈,在Guest和Host主机中都要走完整的VFS IO协议栈。
② 官方提供了vhost-blk方案,不过没有合并到主分支,当前方案和vhost-user网络一样,直接走了内核,性能能大大提高,需要的可以了解下,当前业内比较成熟的。
③ 业内成熟的虚拟存储IO栈的软件为SPDK(Storage Performance Development Kit),提供了一整套工具和库,以实现高性能、扩展性强、全用户态的存储应用程序,需要的可以了解下。

(三)网络虚拟化

网络虚拟化是虚拟化技术中最复杂的部分。存在virtio-net,vhost-net,vhost-user+DPDK,vDPA等方案。这里只简单说下virtio-net(半虚拟化),vhost-net(透传)。

一些说明
① virtio-net为半虚拟化方案,相对于qemu的全虚拟化,virtio-net通过在Guest OS的VirtIO Net Driver层引入了vring与qemu-kvm层VirtIO Net Device进行通信,降低了VM exit和VM entry的开销,一定程度上改善了网络IO的性能。vhost-net则为透传方案,相对于virtio-net半虚拟化绕过了QEMU直接在Guest OS和host宿主机之间通信,减少了数据的拷贝,特别是减少了用户态到内核态的拷贝。性能得到大大加强,就吞吐量来说,vhost-net基本能够跑满一台物理机的带宽。
② 生产环境中一般使用DPDK和vDPA结合OVS(Open vSwitch)使用。

三、管理工具Libvirt

libvirt软件包提供了一个独立于虚拟机监控程序的虚拟化API,可与各种操作系统的虚拟化功能进行交互。

一些说明
① libvirt主要包括3个部分:应用程序编程接口(API)库、一个守护进程(libvirtd)和一个默认命令行管理工具(virsh)。应用程序编程接口(API)库:为了其他虚拟机管理工具(如virsh、virt-manager等)提供虚拟机管理的程序库支持。libvirtd守护进程:负责执行对节点上的域的管理工作,在用各种工具对虚拟机进行管理之时,这个守护进程一定要处于运行状态中。virsh :libvirt项目中默认的对虚拟机管理的一个命令行工具。
② 一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager等)和云计算框架平台(如 OpenStack、OpenNebula、Eucalyptus 等)都在底层使用 libvirt 的应用程序接口。

四、创建CtyunOS虚机

这里使用virt-manager创建一个CtyunOS的虚机,用于加深学习印象。

1、安装KVM

# qemu-kvm -为KVM管理程序提供硬件仿真的软件。
# libvirt-daemon-system -用于将libvirt守护程序作为系统服务运行的配置文件。
# libvirt-clients -用于管理虚拟化平台的软件。
# bridge-utils -一组用于配置以太网桥的命令行工具。
# virtinst -一组用于创建虚拟机的命令行工具。
# virt-manager -易于使用的GUI界面和支持命令行工具,用于通过libvirt管理虚拟机。
# 安装
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager
# qemu-kvm创建软链
sudo ln -s /usr/bin/qemu-system-x86_64 /usr/bin/qemu-kvm
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu-kvm
# libvirtd是否启动
sudo systemctl is-active libvirtd active
# 启动libvirtd
sudo systemctl start libvirtd.service
# 查看网络信息,建议用默认的net网络即可
brctl show

2、开通CtyunOS实例

a)打开virt-manager

b)选择对应的安装介质,配置安装的资源

c)设置安装的系统信息

d)安装系统

e)系统安装完成

f)配置网络

# 配置网络
vi /etc/sysconf iq/network-scripts/ifcfg-ens3
# 修改ONBOOT=yes后重启网络
systemctl restart network
# 安装sshd
yum install -y initscripts openssh-server openssl openssl-devel
service sshd restart
ss -tan
# 查看虚机ip,当然也可以到wirt-manager的虚机详情nic页面查看
virsh domiffadr ctyunos-test
安装配置配置好sshd服务后,即可愉快玩耍ctyunos虚拟机了。

五、常用命令

# virsh 查看帮助命令
virsh help | grep dom*
# 查看当前运行的虚拟机
virsh list
virsh list --all
# 创建一个虚拟机
sudo virt-install --virt-type kvm --name ctyunsos-100 --ram 2048 \
--disk /var/lib/libvirt/images/ctyunsos-100.qcow2,format=qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=ctyunsos2.0.1 \
--location=/data/kvm/images/ctyunos-2.0.1-220311-x86_64-dvd.iso
# 开启和关闭虚拟机 ,ctyunsos-100 是虚拟机名字
virsh start ctyunsos-100      
virsh shutdown ctyunsos-100
# 进入查看虚拟机
virt-viewer ctyunsos-100
# libvirtd 启动时自动启动虚拟机
virsh autostart ctyunsos-100
# 禁止虚拟机开机启动
virsh autostart --disable ctyunsos-100
# 查看虚拟机IP
virsh domifaddr ctyunsos-100
# 挂起/恢复虚拟机
virsh suspend ctyunsos-100
virsh resume ctyunsos-100
# 查看虚拟机信息
virsh dominfo ctyunsos-100
# 软重启虚拟机
virsh reboot ctyunsos-100
# 硬重启虚拟机
virsh reset ctyunsos-100
# 销毁拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
virsh undefine ctyunsos-100
# 编辑虚拟机配置文件
virsh edit ctyunsos-100
# 给虚拟机添加硬盘,创建一块 100G 的硬盘
qemu-img create -f qcow2 ctyunsos-100-d1.qcow2 20G
# 创建快照, 不写 name 自动按时间生成
virsh snapshot-create-as --domain ctyunsos-100 --name snapshot01-ctyunsos-100 --description "ctyunsos-100 snapshot" 
# 查看快照
virsh snapshot-list ctyunsos-100
# 回滚快照
## 回滚名称位 snap-vm-ubuntu 的快照
virsh snapshot-revert --domain vm-ubuntu snapshot01-ctyunsos-100
## 回滚最新版快照
virsh snapshot-revert --domain ctyunsos-100 --current
# clone一个虚拟机
virt-clone --original=ctyunsos-100 --name=ctyunsos-100-new  --file=/var/lib/libvirt/images/ctyunsos-100-new.qcow2
# 查看虚拟机内存和cpu信息
virsh dommemstat  ctyunsos-100
virsh  vcpuinfo  ctyunsos-100

六、虚拟机技术发展

虚拟机技术的思想源头来源于1974年7月的论文《Formal Requirements for Virtualizable Third-Generation Architectures》。经过这么多年的发展,从最先开始的全虚拟化,半虚拟化(XEN),硬件辅助虚拟化(Intel VT-X/AMD-V),KVM/VirtualBox/Hyper-V,容器化技术LXC&Docker(cgroup&namespace),到当前的microVM和functions技术(firecracker)。已经有了很大的发展。


一些说明
1、全虚拟化技术,比如QEMU,主要由HyperVisor将虚拟机的命令翻译成宿主机上能执行的命令,性能很差。
2、半虚拟化技术,比如Xen,在内核加一些接口,接受虚拟机传入内核接口命令,功能和风险较大,需要修改内核。
3、硬件辅助虚拟化技术,最有效的有KVM/Hyper-V,使用Intel VT-X/AMD-V技术CPU直接接收虚拟机的命令,避免的解释和翻译命令的过程,性能大大提高。
4、容器化技术,比如Docker,在微服务的发展下,不需要像KVM一样虚拟化出一个有操作系统,有IO等设备的完整机器,基于Cgroups和namespace,隔离出一个独立的操作系统和网络环境,给应用提供简约的运行环境,虚拟化成本大大减少,提供更轻量级的虚拟化方案。
5、超轻虚拟化技术,比如firecracker,在基于KVM和VirtIO,构建MicroVM Zone。提供毫秒级的VM创建速度,是一个更精简、更安全、更现代化的虚拟化技术方向。

七、总结

1、虚拟化技术的发展,大大推动了云技术的进步。
2、虚拟化技术从论文《Formal Requirements for Virtualizable Third-Generation Architectures》到现在的serverless以及firecracker代表的microVMs技术,越来越往功能化,小型简单化,高安全,低成本的方向发展了。
3、从云计算的角度来看,kvm虚拟技术属于IaaS层的产品,给客户提供完整一套基础设施,客户可以用这个kvm虚机做任何事情,而代表LXC的Docker容器技术则属于PaaS层的产品,为特定的软件服务提供特定的服务,比如MySQL images,而这个MySQL images容器只能用于MySQL服务,而不能再这个容器里面在用于跑其他的服务,比如Redis。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个功能强大的视频翻译和本地化配音工具,支持影视级双语字幕/视频配音

家好,今天给大家分享一个功能强大的视频翻译和本地化配音工具VideoLingo,旨在为用户提供高质量的字幕和配音服务,让全世界的知识能够跨越语言的障碍共享。 项目介绍 VideoLingo项目的开发旨在解决视频内容创作者和翻译者面临的跨语言障碍问题…

力扣-图论-9【算法学习day.59】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…

doxygen–自动生成文档工具

原文地址:doxygen–自动生成文档工具 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 简介 doxygen是软件开发中广泛使用的文档生成工具。它可以从源代码注释中自动生成文档,解析类、函数、参数相关信息,并生…

上市公司投资效率Biddle模型数据(包括最终数据、原始数据及构造说明)2003-2022年

一、计算方式:参考《Journal of accounting and economics》Biddle G C,构建Biddle模型使用企业投资对成长机会的回归模型来估计企业的投资效率,这里成长机会用销售增长率来衡量。回归模型如下图所示: 二、资料范围:包括原始数据…

用JavaScript实现一个贪吃蛇游戏

原理如下,贪吃蛇的蛇身就是一个数组,数组中的每个元素都是一个坐标,蛇身每次移动时都会在数组前插入一个新坐标,并在数组尾部删掉一条记录,吃到食物后数组的尾部记录就不删。如果移到屏幕边缘会从屏幕的另一边出现。好…

【Canvas与光阑】立方体六彩光阑

【成图】 120*120的png图标 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>立方体 六彩光阑 Draft2</…

[代码随想录14]二叉树的常用操作,翻转,对称,最大深度和最小深度,递归版本

前言 在二叉树的题目中&#xff0c;递归的解法无疑是是最简单和最好理解的&#xff0c;也能快速解题&#xff0c;本篇介绍一下递归的常见的二叉树题目。 题目链接 226. 翻转二叉树 - 力扣&#xff08;LeetCode&#xff09; 101. 对称二叉树 - 力扣&#xff08;LeetCode&#…

css基础记录

基础 选择器 复合选择器 后代选择器 div p {}; 类似如上,找到div中所有的后代,注意是所有的后代 子代选择器 > div > a 只选择div的儿子中有a的 并集选择器 用逗号,分隔 p,div,span,h1 { … } 一般一行写一个 CSS元素显示模式 分为块元素,行内元素 块元素 特点…

HDR视频技术之六:色调映射

图像显示技术的最终目的就是使得显示的图像效果尽量接近人们在自然界中观察到的对应的场景。 HDR 图像与视频有着更高的亮度、更深的位深、更广的色域&#xff0c;因此它无法在常见的普通显示器上显示。 入门级的显示器与播放设备&#xff08;例如普通人家使用的电视&#xff0…

《HTML 的变革之路:从过去到未来》

一、HTML 的发展历程 图片: HTML 从诞生至今&#xff0c;经历了多个版本的迭代。 &#xff08;一&#xff09;早期版本 HTML 3.2 在 1997 年 1 月 14 日成为 W3C 推荐标准&#xff0c;提供了表格、文字绕排和复杂数学元素显示等新特性&#xff0c;但因实现复杂且缺乏浏览器…

webrtc学习----前端推流拉流,局域网socket版,一对一

提示&#xff1a;局域网socket版 文章目录 [TOC](文章目录) 前言一、教程二、webrtc工作流程三、推流端四、拉流五、socket服务六、效果七、备注总结 前言 ‌‌‌‌‌WebRTC&#xff08;Web Real-Time Communication&#xff09;‌是一种实时通讯技术&#xff0c;允许网络应用或…

IMX6ULL开发板挂载 Ubuntu 的 NFS 目录,并以交叉编译得到的hello程序进行测试

首先参考博文 https://blog.csdn.net/wenhao_ir/article/details/144404637 使得IMX6ULL开发板、PC机上的USB网卡、VMware中的Ubuntu能互相Ping 通 然后开始将Ubuntu 的 NFS 目录挂载到Ubuntu中。 为什么挂载&#xff1f; 答&#xff1a;其实是把 Ubuntu中的某个目录通过NFS网…

Vscode 构建 uniapp vue3 + ts 微信小程序项目

前言 为什么要使用 Vscode 来开发构建 uniapp 项目&#xff1f;从个人角度来讲&#xff0c;仅是想要 Vscode 丰富的插件生态&#xff0c;以及最重要的优秀的 TtypeScript 类型检查支持&#xff0c;因为本人是 TS 重度使用者。 如果你更习惯使用 js 进行开发&#xff0c;使用 …

【Spark】Spark的两种核心Shuffle工作原理详解

Spark 的shuffle机制 一、Spark ShuffleManager 发展历程 Spark 1.1.0 之前 在 Spark 1.1.0 之前&#xff0c;Spark 使用 BlockStoreShuffleFetcher 来处理 Shuffle 操作。这个实现主要依赖于直接从 BlockManager 获取 Shuffle 数据&#xff0c;并通过网络进行交换。 Spark …

网上商城系统设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本网上商城系统就是在这样的大环境…

UE5制作血条和血包【扣血/回血机制】

首先到第三人称蓝图&#xff0c;创建一个变量health&#xff0c;代表血量&#xff0c;默认值改为100 接着创建一个控件蓝图 设置血条颜色和绑定百分比 绑定血条&#xff0c;因为是百分比所以除以100 然后到第三人称蓝图Begin Play后创建控件蓝图&#xff0c;添加到视口 …

LabVIEW实验站反馈控制系统

开发了一套基于LabVIEW的软X射线磁性圆二色实验站的反馈控制系统。这套系统主要用于实现对实验站高电压的精确控制&#xff0c;从而保持照射在样品上的流强稳定性&#xff0c;为分析样品吸收谱提供可靠基准&#xff0c;同时提供了易用的用户界面和强大的数据存储功能。 项目背景…

【区块链】区块链密码学基础

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 区块链密码学基础引言一、哈希函数1.1 基本概念1.2 数学表达 二、非对称加密2.1…

题海拾贝:力扣 20、有效的括号

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion,开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡.-CSDN博客 我的专栏&#xff1a;《编程之路》、《题海拾贝》、《数据结构与算法之美》 欢迎点赞、关注&#xff01; 1、题目 2、题解 这…

在 Ansys Mechanical 中使用“螺栓工具”插件自动生成螺栓

总结 在有限元分析 &#xff08;FEA&#xff09; 中&#xff0c;高效创建螺栓连接对于确保机械装配的结构完整性和性能至关重要。螺栓是连接组件不可或缺的一部分&#xff0c;它们在负载下的精确建模会影响整个系统。快速高效的螺栓建模使工程师能够快速优化设计&#xff0c;满…