1.部署KVM虛擬化平臺

一.KVM原理簡介

廣義的KVM實際上包含兩部分,一部分是基于Linux內核支持的KVM內核模塊,另一部分就是經過簡化和修改的Qemuo

KVM內核模塊是模擬處理器和內存以支持虛擬機的運行,Qemu主要處理丨℃以及為用戶提供一個用戶空間工具來進行虛擬機的管理。兩者相互結合、相輔相成,構成了一個完整的虛擬化平臺。

需要注意的是,Qemu本身并不是KVM的一部分,Qemu是一套完整的虛擬化解決方案,是純軟件實現虛擬化,包括處理器虛擬化、內存虛擬化以及各種虛擬設備的模擬,但因為是純軟件模擬出來的,所以Qemu的性能比較低。

二.KVM運行時的三種模式

客戶模式:執行非I/O的客戶代碼,虛擬機運行在這個模式下

用戶模式:用戶執行I/O代碼,QEMU運行在這個模式下?

內核模式:CPU調度和內存管理相關

客戶模式(?Guest Mode)?:?可以理解為虛擬機在操作系統中運行的模式。?客戶模式又分為內核模式和用戶模式。?內核模式模擬CPU以及內存,?實現客戶模式的切換,?處理從客戶模式的退出。?KVM內核模塊運行在這個模式下,?模擬CPU以及內存,?實現客戶模式的切換,?處理從客戶模式的退出。

用戶模式(?User Mode)??在這種模式下,?運行QEMU,?實現IO模擬與虛擬機管理。?QEMU運行在這個模式下,?為用戶提供虛擬機管理的用戶空間工具以及代表用戶執行I/O操作。?

內核模式(?Kernel Mode)??這是KVM虛擬化的核心模式,?運行KVM內核模塊。?在這個模式下,?KVM為虛擬機創建虛擬CPU和虛擬內存,?然后執行VMLAUNCH指令進入客戶模式,?裝載Guest OS并運行。?如果Guest OS運行過程中發生異常,?KVM會暫停Guest OS的運行,?保存當前狀態,?并退出到內核模式來處理這些異常。?內核模式還負責處理需要I/O的情況,?處理完成后重新進入客戶模式。

三.KVM工作原理

KVM(Kernel-based Virtual Machine)是基于Linux內核的虛擬機技術,其工作原理核心是利用硬件虛擬化擴展(如Intel VT-x/AMD-V)將物理CPU、內存和I/O設備虛擬化為多個虛擬機資源,具體如下:

核心組件

? KVM模塊:作為Linux內核模塊,負責創建和管理虛擬機(VM),并通過硬件虛擬化功能實現CPU和內存的虛擬化。

? QEMU:模擬I/O設備(如網卡、硬盤),與KVM結合后,通過KVM模塊接管CPU和內存,自身專注于I/O模擬,提升性能。

工作流程

1. 初始化:KVM模塊加載后,通過/dev/kvm接口為每個虛擬機創建虛擬CPU(vCPU),每個vCPU對應一個Linux進程。

2. CPU虛擬化:利用硬件虛擬化技術(如Intel VT-x的VMX模式),將vCPU調度到物理CPU上運行,實現指令集的隔離和特權級轉換。

3. 內存虛擬化:通過KVM的內存管理組件(如影子頁表或EPT/NPT技術),將虛擬機的虛擬地址映射到物理地址,確保各VM內存獨立。

4. I/O虛擬化:QEMU通過軟件模擬或硬件直通(如PCIe設備直通),讓VM訪問外設,硬件直通可提升I/O性能。

5. 資源調度:Linux內核的調度器負責分配物理CPU時間片給各個vCPU,內存和I/O資源也由KVM和QEMU協同管理。

關鍵技術

? 硬件輔助虛擬化:依賴CPU提供的虛擬化指令,避免純軟件模擬的性能損耗。

? 半虛擬化驅動(virtio):VM通過virtio接口與宿主機通信,優化網絡、磁盤等I/O性能。

? 實時遷移:利用KVM的狀態保存和恢復機制,可在物理主機間遷移運行中的VM,不中斷服務。

KVM通過與Linux內核深度整合,實現了高效的服務器虛擬化,廣泛應用于云計算和企業服務器集群。

  • Qemu:快速仿真器
  • Libkvm:?libkvm?通過 ioctl 系統調用進入內核模式
  • Ioctl:ioctl是設備驅動程序中對設備的I/O通道進行管理的函數
  • fd:用fd 通過ioctl 向設備驅動來發送創建,運行虛擬機命令,設備驅動/dev/kvm 就會來解析命令
  • /dev/kvm:Linux字符集設備 /dev/kvm,是kvm的內核模塊

QEMU(Quick EMUlator)是一個開源的通用模擬器和虛擬化軟件,由?Fabrice Bellard創建。?它允許在一個平臺上運行一個或多個操作系統,這些操作系統與宿主機(運行QEMU的機器)的原生操作系統完全隔離。QEMU具有以下主要功能:

  • 系統模擬:可以模擬多種不同的計算機類型和架構,如x86, x86-64 (AMD64/Intel 64), ?ARM, ?PowerPC, ?SPARC等。這意味著可以在一個架構上運行為另一架構編譯的操作系統和程序。
  • 用戶模式模擬:支持用戶模式模擬,允許單個程序以不同的操作系統用戶空間在主機上運行,這對于開發和測試跨平臺應用程序非常有用。
  • 虛擬化:當在支持硬件虛擬化的處理器上運行時,QEMU可以利用?KVM(Kernel-based Virtual Machine)模塊提供快速虛擬化,使虛擬機以接近物理硬件的速度運行,同時提供隔離和資源控制的優點。
  • 網絡和設備模擬:支持復雜的網絡模擬功能,允許虛擬機通過不同的網絡拓撲配置相互通信或訪問互聯網。同時能夠模擬各種硬件設備,如硬盤、網絡接口卡、圖形適配器、USB設備等。

QEMU可以獨立使用,也經常與其他虛擬化和模擬工具一起使用,如?VirtualBox或?VMware的用戶界面,或者與?libvirt這樣的虛擬化管理庫配合使用,以簡化虛擬機的管理和操作。這使得QEMU在軟件開發、測試、系統管理、教育和研究等領域有廣泛應用

四.實驗步驟

實驗環境

主機

.? 操作系統

IP地址

主要軟件

kvm01

CentOS 7.9 x86_64

192.168.10.108

KVM 虛擬機

kvm02

CentOS 7.9 x86_64

192.168.10.109

1.搭建KVM虛擬化平臺

1.2準備KVM虛擬化環境

1YUM 安裝 KVM

yum -y install qemu-kvm

yum -y install qemu-img

yum -y install bridge-utils

yum -y install qemu-kvm-tools

yum -y install virt-install

yum -y install libvirt

yum -y install virt-manager

yum -y install libguestfs-tools

備注:

qemu-kvm : kvm核心包–虛擬操作系統模擬器加速模塊

qemu-img :是QEMU的磁盤管理工具

bridge-utils:虛擬機與外界通信的命令管理工具

qemu-kvm-tools :qemu-kvm的工具包

virt-install:虛擬機安裝工具

libvirt:必須要裝的核心工具

virt-manager:虛擬機圖形管理工具(宿主機有桌面環境時可以考慮安裝,命令操作或者遠程控制則不需要)

libguestfs-tools:用于訪問虛擬機的磁盤映像文件提供的一組命令

QEMU是“Quick Emulator”的縮寫,是一個用C語言編寫的開源虛擬化軟件。

QEMU(Quick Emulator)快速仿真器

(2)關機,設置CPU支持虛擬化,然后開機

(3)開機后驗證

hostnamectl set-hostname kvm01

?bash

vim /etc/hosts

192.168.10.201 kvm01

192.168.10.202 kvm02

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

cat /proc/cpuinfo | grep vmx

lsmod | grep kvm

(4)開啟libvirtd服務

安裝完成后還需要開啟 libvirtd 服務,以開啟相關支持。

systemctl start libvirtd

systemctl enable libvirtd

2.設置KVM網絡

這里以 Bridge(橋接)為例進行操作演示

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifcfg-br0

vi ifcfg-ens160

BRIDGE=br0

vi ifcfg-br0

TYPE=bridge

NAME=br0

DEVICE=br0

systemctl restart network

ifconfig

3.KVM管理

virt-manager

1)創建存儲池

存儲池的名稱為:kgc

存儲池的目錄為:/data_kvm/store

(2)創建存儲卷

kgc的存儲池中添加存儲卷

存儲卷名稱為:test01

卷最大容量10G

(3)將Linux系統的ISO文件拷貝到/opt目錄下,并關閉存儲設置

(4)在kvm01的主機上新建虛擬機,名稱為test01

5.使用KVM命令集管理虛擬機

virsh -h? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //查看命令幫助

ls /etc/libvirt/qemu/? ? ? ? ? ? //查看KVM的配置文件存放目錄

virsh list --all? ? ? ? ? ? ? ? ? ? ? //查看虛擬機狀態

virsh shutdown test01? ? ? ?//虛擬機關機

virsh start test01? ? ? ? ? ? ? ? //虛擬機開機

virsh destroy test01? ? ? ? ? ?//強制實例系統關閉電源

?virsh create /etc/libvirt/qemu/test01.xml? ?//通過配置文件啟動虛擬機系統實例

virsh suspend test01? ? ? ? ? ? ?//掛起虛擬機

?virsh resume test01? ? ? ? ? ? ? //恢復虛擬機

virsh autostart test01? ? ? ? ? ? //配置虛擬機實例伴隨宿主機自動啟動

virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml? ? ? ? ?//導出虛擬機配置

virsh shutdown test01

virsh undefine test01? ? ? ? ? ? ? ? ?//虛擬機的刪除與添加

查看刪除結果,test01 的配置文件被刪除,但是磁盤文件不會被刪除。

ls /etc/libvirt/qemu/

通過 virsh list --all 查看不到 test01 的信息,說明此虛擬機被刪除

通過備份的配置文件重新定義虛擬機:

cd /etc/libvirt/qemu

?mv test02.xml test01.xml

重新定義虛擬機:

virsh define test01.xml

修改虛擬機配置信息

vim命令:vim /etc/libvirt/qemu/test01.xml

virsh命令:?virsh edit test01

6.KVM文件管理

(1)查看當前磁盤格式

qemu-img info /data_kvm/store/test01.qcow2

備注:

如果虛擬機磁盤文件不是 qcow2 格式,可以通過 qemu-img 命令轉換磁盤文件格式,

如執行以下操作可以將 test01 虛擬機 raw 格式磁盤轉換至 qcow2 格式。

[root@kvm01 ~]# virsh shutdown test01

[root@kvm01 ~]# qemu-img convert -f raw -O qcow2 /data_kvm/store/test01.img /data_kvm/store/test01.qcow2

執行轉換磁盤格式的命令后還需要修改 test01 的 xml 配置文件中磁盤的類型與磁盤文件名。

[root@kvm01 ~]# virsh edit test01

…… //省略部分內容

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2' cache='none'/>

<source file='/data_KVM/store/test01.qcow2'/>

<target dev='vda' bus='virtio'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

</disk>

(2)virt-cat 命令,類似于 cat 命令

使用這個命令需要安裝 libguestfs-tools-c 工具包。

virt-cat -a /data_kvm/store/test01.qcow2 /etc/sysconfig/grub

3virt-edit 命令

virt-edit 命令,用于編輯文件,用法與 vim 基本一致。

virt-edit -a /data_kvm/store/test01.qcow2 /etc/resolv.conf

(4virt-df 命令

virt-df 命令用于查看虛擬機磁盤信息。

virt-df -h test01

7.虛擬機克隆

?(1)查看虛擬機狀態 ?

virsh list --all

(2)從 test01 克隆 test02

virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2

(3)查看虛擬機狀態

virsh list --all

(4)啟動虛擬機

?virsh start test02

8.虛擬機快照

KVM 虛擬機要使用鏡像功能,磁盤格式必須為 qcow2。

1)對 test01 創建快照

virsh snapshot-create test01

已生成域快照 1503494464

2)查看虛擬機快照版本信息

virsh snapshot-current test01

(3)查看快照信息

?virsh snapshot-list test01

(4)創建新快照

?virsh snapshot-create test01

(5)查看快照信息

virsh snapshot-list test01

(6)恢復虛擬機狀態

virsh snapshot-revert test01 1503494464

(7)查看虛擬機快照版本信息

?virsh snapshot-current test01

(8)刪除快照

?virsh snapshot-delete test01 1503494464

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87591.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87591.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87591.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

優化與管理數據庫連接池

優化與管理數據庫連接池 在現代高并發系統中,數據庫連接池是保障數據庫訪問性能的核心組件之一。合理配置、優化和管理連接池,可以有效緩解連接創建成本高、連接頻繁斷開重連等問題,從而提升系統整體的響應速度與穩定性。 數據庫連接池的作用與價值 數據庫連接池的核心思…

實現回顯服務器(基于UDP)

目錄 一.回顯服務器的基本概念 二.回顯服務器的簡單示意圖 三.實現回顯服務器&#xff08;基于UDP&#xff09;必須要知道的API 1.DatagramSocket 2.DatagramPacket 3.InetSocketAddress 4.二者區別 1. 功能職責 2. 核心作用 3. 使用場景流程 四.實現服務器端的主…

LabVIEW電液伺服閥自動測試

針對航空航天及工業液壓領域電液伺服閥測試需求&#xff0c;采用 LabVIEW 圖形化編程平臺&#xff0c;集成 NI、GE Druck 等品牌硬件&#xff0c;構建集靜態特性&#xff08;流量/ 壓力 / 泄漏&#xff09;與動態特性&#xff08;頻率響應&#xff09;測試于一體的自動化系統&a…

性能優化 - 高級進階: Spring Boot服務性能優化

文章目錄 Pre引言&#xff1a;為何提前暴露指標與分析的重要性指標暴露與監控接入Prometheus 集成 性能剖析工具&#xff1a;火焰圖與 async-profilerasync-profiler 下載與使用結合 Flame 圖優化示例 HTTP 及 Web 層優化CDN 與靜態資源加速Cache-Control/Expires 在 Nginx 中配…

力扣網C語言編程題:除自身以外數組的乘積

一. 簡介 本文記錄力扣網上涉及數組方面的編程題&#xff0c;主要以 C語言實現。 二. 力扣上C語言編程題&#xff1a;涉及數組 題目&#xff1a;除自身以外數組的乘積 給你一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i…

SpringBoot擴展——發送郵件!

發送郵件 在日常工作和生活中經常會用到電子郵件。例如&#xff0c;當注冊一個新賬戶時&#xff0c;系統會自動給注冊郵箱發送一封激活郵件&#xff0c;通過郵件找回密碼&#xff0c;自動批量發送活動信息等。郵箱的使用基本包括這幾步&#xff1a;先打開瀏覽器并登錄郵箱&…

【html】iOS26 液態玻璃實現效果

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>液體玻璃效果演示</title><style>bo…

探索算法秘境:量子隨機游走算法及其在圖論問題中的創新應用

目錄 ?編輯 一、量子隨機游走算法的起源與原理 二、量子隨機游走算法在圖論問題中的創新應用 三、量子隨機游走算法的優勢與挑戰 四、結語 在算法研究的浩瀚星空中&#xff0c;總有一些領域如同遙遠星系&#xff0c;閃爍著神秘而誘人的光芒。今天&#xff0c;我們將一同深…

C# 一維數組和矩形數組全解析

在編程的世界里&#xff0c;數組是一種非常重要的數據結構。今天&#xff0c;我們就來詳細了解一下一維數組和矩形數組。 數組基礎認知 數組實例是從 System.Array 繼承類型的對象。由于它從 BCL 基類派生而來&#xff0c;所以繼承了許多有用的成員&#xff1a; Rank 屬性&a…

WebStorm編輯器側邊欄

目錄 編輯器側邊欄行號配置行號隱藏行號 代碼折疊側邊欄圖標書簽添加匿名書簽添加助記符書簽 運行和調試管理斷點配置斷點圖標 版本控制配置Git Blame注釋 編輯器側邊欄 編輯器左側的垂直區域。當編寫代碼時&#xff0c;提供重要信息和操作圖標。外觀和行為可以根據你的喜好進…

騰訊云TCCA認證考試報名 - TDSQL數據庫交付運維工程師(PostgreSQL版)

數據庫交付運維工程師-騰訊云TDSQL(PostgreSQL版)認證 適合人群&#xff1a; 適合從事TDSQL(PostgreSQL版)交付、運維、售前咨詢以及TDSQL(PostgreSQL版)相關項目的管理人員。 認證考試 單選*40道多選*20道 成績查詢 70分及以上通過認證&#xff0c;官網個人中心->認證考…

attn_mask 為 (1, 1) 時什么意思? 7,7又是什么意思?

在深度學習中&#xff0c;特別是在 Transformer 模型和注意力機制&#xff08;Attention Mechanism&#xff09;中&#xff0c;attn_mask&#xff08;注意力掩碼&#xff09;是一個用于控制注意力計算的張量。它決定了在計算注意力分數時&#xff0c;哪些位置應該被關注&#x…

Qt聯合Halcon開發二:Halcon窗口綁定Qt控件顯示Hobject圖像【詳細圖解流程】

1. 項目準備 在本項目中&#xff0c;我們將使用Qt框架與Halcon庫結合&#xff0c;展示圖像并進行圖像處理。首先&#xff0c;確保你已經配置好Qt和Halcon的開發環境。 環境配置可查看上篇文章 2. 創建Qt界面 在Qt中&#xff0c;創建一個窗口并拖入按鈕和Graphics View控件。G…

Redis 持久化機制詳解:RDB、AOF 原理與面試最佳實踐(AOF篇)

在上一章我們深入學習了 Redis 中重要的數據持久化機制 ——RDB&#xff08;Redis Database&#xff09;&#xff0c;了解了其通過周期性快照將數據以二進制文件形式保存到磁盤的原理&#xff0c;包括觸發條件、文件結構以及優缺點等核心內容。 Redis 持久化機制詳解&#xff…

【GateWay】和權限驗證

【GateWay】網關詳解和權限驗證 一、Gateway 核心概念與架構二、路由斷言&#xff08;Route Predicates&#xff09;詳解三、過濾器&#xff08;Filters&#xff09;機制四、權限認證的核心理論模型五、Spring Cloud Gateway Security OAuth2 集成方案六、OAuth2.0 集成 一、…

QSqlDatabase: QSQLITE driver not loaded

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言可能的原因解決辦法1. 確認 SQLite 驅動插件文件2. 拷貝插件文件到應用程序目錄3. 設置插件搜索路徑4. 安裝 SQLite 依賴庫5. 解決 QCoreApplication 實例問題 …

20250619在榮品的PRO-RK3566開發板的Android13下解決海羅光電有限公司HL070T58C-05屏在啟動的時候出現白色條紋的問題【時序】

20250619在榮品的PRO-RK3566開發板的Android13下解決海羅光電有限公司HL070T58C-05屏在啟動的時候出現白色條紋的問題 2025/6/19 20:39 緣起&#xff1a;榮品的PRO-RK3566開發板的Android13下&#xff0c;點亮海羅光電有限公司HL070T58C-05屏。 在啟動的時候會出現花屏/白色條紋…

docker使用Volume對Nginx進行掛載

需求&#xff1a; 需要將Nginx的歡迎頁面也就是index.html文件進行修改。 原始方法&#xff1a;由于docker會為每一個容器創建其對應的文件信息&#xff0c;但是創建的信息內容只有其最基礎的運行信息&#xff0c;所以想要直接去訪問其index.html就無法做到。 使用volume&am…

基于springboot的寵物服務預約系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

idea 2025會在用戶目錄創建IdeaSnapshots文件夾

推薦一個api管理測試工具 一個簡單的API測試和編寫文檔的工具 idea 2025會在用戶目錄創建IdeaSnapshots文件夾 解決方案 打開 Profiler 點擊 setting 參考 https://youtrack.jetbrains.com/articles/SUPPORT-A-1086/How-to-change-or-turn-off-the-IdeaSnapshots-folder-…