KVM_虛擬化技術

来源:https://www.cnblogs.com/yaohong/archive/2017/12/29/8144118.html
-Advertisement-
Play Games

一:什麼是 KVM KVM 是指基於 Linux 內核的虛擬機(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的 Qumranet 組織開發的一種新的“虛擬機”實現方案。 2007 年 2 月發佈的 Linux 2.6.20 內核第一次包含了 KVM  ...


一:什麼是 KVM

KVM 是指基於 Linux 內核的虛擬機(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的 Qumranet 組織開發的一種新的“虛擬機”實現方案。 2007 年 2 月發佈的 Linux 2.6.20 內核第一次包含了 KVM 。增加 KVM 到 Linux 內核是 Linux 發展的一個重要里程碑,這也是第一個整合到 Linux 主線內核的虛擬化技術。

KVM 在標準的 Linux 內核中增加了虛擬技術,從而我們可以通過優化的內核來使用虛擬技術。在 KVM 模型中,每一個虛擬機都是一個由 Linux 調度程式管理的標準進程,你可以在用戶空間啟動客戶機操作系統。一個普通的 Linux 進程有兩種運行模式:內核和用戶。 KVM 增加了第三種模式:客戶模式(有自己的內核和用戶模式)。

一個典型的 KVM 安裝包括以下部件:

  • 一個管理虛擬硬體的設備驅動,這個驅動通過一個字元設備 /dev/kvm 導出它的功能。通過 /dev/kvm 每一個客戶機擁有其自身的地址空間,這個地址空間與內核的地址空間相分離或與任何一個正運行著的客戶機相分離。
  • 一個模擬硬體的用戶空間部件,它是一個稍微改動過的 QEMU 進程。從客戶機操作系統執行 I/O 會擁有 QEMU。QEMU 是一個平臺虛擬化方案,它允許整個 PC 環境(包括磁碟、顯示卡(圖形卡)、網路設備)的虛擬化。任何客戶機操作系統所發出的 I/O 請求都被攔截,並被路由到用戶模式用以被 QEMU 過程模擬模擬。

二: 安裝 KVM

2.1 系統要求

KVM 需要有 CPU 的支持 (Intel VT 或 AMD SVM),在安裝 KVM 之前檢查一下 CPU 是否提供了虛擬技術的支持

  • 基於Intel處理器的系統,運行grep vmx /proc/cpuinfo查找 CPU flags 是否包括vmx關鍵詞
  • 基於AMD處理器的系統,運行grep svm /proc/cpuinfo查找 CPU flags 是否包括svm關鍵詞
  • 檢查 BIOS,確保 BIOS 里開啟VT選項

註:

  • 一些廠商禁止了機器 BIOS 中的 VT 選項 , 這種方式下 VT 不能被重新打開
  • /proc/cpuinfo 僅從 Linux 2.6.15(Intel) 和 Linux 2.6.16(AMD) 開始顯示虛擬化方面的信息。請使用 uname -r 命令查詢您的內核版本。如有疑問,請聯繫硬體廠商
egrep "(vmx|svm)" /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid

 

2.2 安裝 kvm 軟體

安裝 KVM 模塊、管理工具和 libvirt (一個創建虛擬機的工具)

yum install -y qemu-kvm libvirt virt-install virt-manager bridge-utils
/etc/init.d/libvirtd start
chkconfig libvirtd on

2.2.1 確保正確載入 KVM 模塊

lsmod  | grep kvm
kvm_intel              54285  0 
kvm                   333172  1 kvm_intel

2.2.2 檢查 kvm 是否正確安裝

virsh -c qemu:///system list
 Id    Name                           State
----------------------------------------------------

如果這裡是錯誤信息,說明安裝出現問題

2.3 配置網路-網橋模式

kvm 上網有兩種配置,一種是 default,它支持主機和虛擬機的互訪,同時也支持虛擬機訪問互聯網,但不支持外界訪問虛擬機,另外一種是 bridge 方式,可以使虛擬機成為網路中具有獨立 IP 的主機。

2.3.1 預設網路 virbro

預設的網路連接是 virbr0,它的配置文件在 /var/lib/libvirt/network 目錄下,預設配置為

cat /var/lib/libvirt/network/default.xml 

  default
  77094b31-b7eb-46ca-930e-e0be9715a5ce

2.3.2 橋接網路

配置橋接網卡,配置如下

more /etc/sysconfig/network-scripts/ifcfg-\*
:::::::::::::: 新建文件
/etc/sysconfig/network-scripts/ifcfg-br0
::::::::::::::
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.39.20
NETMASK=255.255.255.0
GATEWAY=192.168.39.1
DNS1=8.8.8.8
:::::::::::::: 物理網卡
/etc/sysconfig/network-scripts/ifcfg-em1
::::::::::::::
DEVICE=em1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
BRIDGE=br0
::::::::::::::

2.4 配置網路-NAT模式

NATM模式下不用配置為網卡

2.5配置 VNC

(1) 修改 VNC 服務端的配置文件

[root@LINUX ~]# vim /etc/libvirt/qemu.conf  
vnc_listen = "0.0.0.0"   第十二行,把 vnc_listen 前面的#號去掉。

(2) 重啟 libvirtd 和 messagebus 服務

[root@LINUX ~]# /etc/init.d/libvirtd restart
Stopping libvirtd daemon:                                  [  OK  ]
Starting libvirtd daemon: libvirtd: initialization failed  [FAILED]
解決辦法:
[root@LINUX ~]# echo "export LC_ALL=en_US.UTF-8"  >>  /etc/profile
[root@LINUX ~]# source /etc/profile
[root@LINUX ~]# /etc/init.d/libvirtd restart
[root@LINUX ~]# /etc/init.d/messagebus restart

三:創建虛擬機

virt-manager 是基於 libvirt 的圖像化虛擬機管理軟體,操作類似 vmware,不做詳細介紹。

  • (1)Virt-manager 圖形化模式安裝
  • (2)Virt-install 命令模式安裝【本文使用此方式】
  • (3)Virsh XML 模板安裝

3.1 上傳 ISO

[root@LINUX ~]# mkdir -p /home/iso
[root@LINUX ~]# mkdir -p /home/kvm
將 iso 拷貝到 /home/iso 目錄

3.2 創建 kvm 虛擬機的磁碟文件

本例創建的磁碟文件為 10G,實際使用中應註意下 /home 的空間,可以設置為 100G

[root@LINUX ~]# cd /home/kvm/
[root@LINUX ~]# qemu-img create -f qcow2 -o preallocation=metadata kvm_mode.img 10G        

3.3 啟動虛擬機

3.3.1 啟動虛擬機參數說明

virt-install命令有許多選項,這些選項大體可分為下麵幾大類,同時對每類中的常用選項也做出簡單說明。

一般選項:指定虛擬機的名稱、記憶體大小、VCPU個數及特性等;

  • -n NAME, --name=NAME:虛擬機名稱,需全局惟一;
  • -r MEMORY, --ram=MEMORY:虛擬機內在大小,單位為MB;
  • --vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#]:VCPU個數及相關配置;
  • --cpu=CPU:CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?來獲取支持的CPU模式;

安裝方法:指定安裝方法、GuestOS類型等;

  • -c CDROM, --cdrom=CDROM:光碟安裝介質;
  • -l LOCATION, --location=LOCATION:安裝源URL,支持FTP、HTTP及NFS等,如ftp://172.16.0.1/pub;
  • --pxe:基於PXE完成安裝;
  • --livecd: 把光碟當作LiveCD;
  • --os-type=DISTRO_TYPE:操作系統類型,如linux、unix或windows等;
  • --os-variant=DISTRO_VARIANT:某類型操作系統的變體,如rhel5、fedora8等;
  • -x EXTRA, --extra-args=EXTRA:根據--location指定的方式安裝GuestOS時,用於傳遞給內核的額外選項,例如指定kickstart文件的位置,--extra-args "ks=http://172.16.0.1/class.cfg"
  • --boot=BOOTOPTS:指定安裝過程完成後的配置選項,如指定引導設備次序、使用指定的而非安裝的kernel/initrd來引導系統啟動等 ;例如:
  • --boot cdrom,hd,network:指定引導次序;
  • --boot kernel=KERNEL,initrd=INITRD,kernel_args=”console=/dev/ttyS0”:指定啟動系統的內核及initrd文件;

存儲配置:指定存儲類型、位置及屬性等;

  • --disk=DISKOPTS:指定存儲設備及其屬性;格式為--disk /some/storage/path,opt1=val1,opt2=val2等;常用的選項有:
    • device:設備類型,如cdrom、disk或floppy等,預設為disk;
    • bus:磁碟總結類型,其值可以為ide、scsi、usb、virtio或xen;
    • perms:訪問許可權,如rw、ro或sh(共用的可讀寫),預設為rw;
    • size:新建磁碟映像的大小,單位為GB;
    • cache:緩存模型,其值有none、writethrouth(緩存讀)及writeback(緩存讀寫);
    • format:磁碟映像格式,如raw、qcow2、vmdk等;
    • sparse:磁碟映像使用稀疏格式,即不立即分配指定大小的空間;
  • --nodisks:不使用本地磁碟,在LiveCD模式中常用;

網路配置:指定網路介面的網路類型及介面屬性如MAC地址、驅動模式等;

  • -w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:將虛擬機連入宿主機的網路中,其中NETWORK可以為:
  • bridge=BRIDGE:連接至名為“BRIDEG”的橋設備;
  • network=NAME:連接至名為“NAME”的網路;
  • 其它常用的選項還有:
    • model:GuestOS中看到的網路設備型號,如e1000、rtl8139或virtio等;
    • mac:固定的MAC地址;省略此選項時將使用隨機地址,但無論何種方式,對於KVM來說,其前三段必須為52:54:00;
  • --nonetworks:虛擬機不使用網路功能;

圖形配置:定義虛擬機顯示功能相關的配置,如VNC相關配置;

  • --graphics TYPE,opt1=val1,opt2=val2:指定圖形顯示相關的配置,此選項不會配置任何顯示硬體(如顯卡),而是僅指定虛擬機啟動後對其進行訪問的介面;
    • TYPE:指定顯示類型,可以為vnc、sdl、spice或none等,預設為vnc;
    • port:TYPE為vnc或spice時其監聽的埠;
    • listen:TYPE為vnc或spice時所監聽的IP地址,預設為127.0.0.1,可以通過修改/etc/libvirt/qemu.conf定義新的預設值;
    • password:TYPE為vnc或spice時,為遠程訪問監聽的服務進指定認證密碼;
  • --noautoconsole:禁止自動連接至虛擬機的控制台;

設備選項:指定文本控制台、聲音設備、串列介面、並行介面、顯示介面等;

  • --serial=CHAROPTS:附加一個串列設備至當前虛擬機,根據設備類型的不同,可以使用不同的選項,格式為“--serial type,opt1=val1,opt2=val2,...”,例如:
  • --serial pty:創建偽終端;
  • --serial dev,path=HOSTPATH:附加主機設備至此虛擬機;
  • --video=VIDEO:指定顯卡設備模型,可用取值為cirrus、vga、qxl或vmvga;

3.3.2 bridge 網路模式啟動虛擬機

有獨立 IP 時使用這種方式

[root@LINUX ~]# chmod -R 777 /etc/libvirt
[root@LINUX ~]# chmod -R 777 /home/kvm
[root@LINUX ~]#virt-install --name=kvm_test --ram 4096 --vcpus=4 \
       -f /home/kvm/kvm_mode.img --cdrom /home/iso/sucunOs_anydisk.iso \
       --graphics vnc,listen=0.0.0.0,port=7788, --network bridge=br0 \
       --force --autostart

3.3.3 NAT 模式啟動虛擬機

沒有獨立 IP 時使用這種方式

[root@LINUX ~]# chmod -R 777 /etc/libvirt
[root@LINUX ~]# chmod -R 777 /home/kvm
[root@LINUX ~]#virt-install --name=kvm_test --ram 4096 --vcpus=4 \
       -f /home/kvm/kvm_mode.img --cdrom /home/iso/sucunOs_anydisk.iso \
       --graphics vnc,listen=0.0.0.0,port=7788 \
       --force --autostart

3.4 連接虛擬機

  • (1) 網上下載 VNC 客戶端
  • (2) 用 VNC 客戶端連接並安裝虛擬機的操作系統(VNC 連上之後,跟安裝 linux Centos 6.5 系統一樣,重新裝一次)
點擊 continue 是如果出現閃退的情況,請修改 Option->Expert->ColorLevel 的值為 full

四:管理 KVM

4.1 管理 kvm 上的虛擬機

  • virsh list #顯示本地活動虛擬機
  • virsh list --all #顯示本地所有的虛擬機(活動的 + 不活動的)
  • virsh start x #啟動名字為 x 的非活動虛擬機
  • virsh shutdown x #正常關閉虛擬機
  • virsh dominfo x #顯示虛擬機的基本信息
  • virsh autostart x #將 x 虛擬機設置為自動啟動

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • NPOI導出Excel及使用問題 因為最近公司質管部門提出了一個統計報表的需求:要求導出一個2016及2017年度深圳區域的所有供應商的費用成本計算——一個22列的Excel表,其中還包括多列的合併單元格;說實話,統計報表功能其實我還是很少涉及的,以前都是直接用DataTable+輸出流導出Exce ...
  • 回到目錄 單元測試大叔認為有幾下兩個必要的作用,也是為什麼要上單元測試的原因 目前添加了組件正確性的測試,在組件進行升級和優化之後,需要走一篇測試流程,以它的正確! 有條件的同學,可以在自己的源代碼管理上添加pipeline,在你的新項目修改遷入後,讓它自動進行測試,這樣也可以保證項目的質量! 這應 ...
  • 內插字元串($) 實際上是C# 6.0對string.Format的改進,將字元串文本標識為內插字元串($)根據微軟的例子來看: 相當於原先的string.Format這種必須使用占位符,極容易出錯: 而使用$則不容易出現錯誤,可以這樣寫: 新增語法糖:(?.) 這也是C#6.0的語法,這叫Null ...
  • <!--Ad Injection:top--> <!--Ad Injection:random--> Xmind Pro 8是一款用於思維導圖和頭腦風暴軟體的精彩軟體。這個軟體是非常有用的應用程式,提供簡單的方法來繪製您的想法在圖形和組織任務。Xmind Pro 8許可證密鑰是非常簡單的軟體,它能夠 ...
  • 最近在網上看到很多ES集群的搭建方法,本人在這人使用Elasticsearch5.0.1版本,介紹如何搭建es集群並安裝head插件和其他插件安裝方法。 一、搭建環境(2台Centos7系統伺服器) 所需軟體 基礎環境JAVA 測試環境關閉防火牆和selinux 配置主機名和hosts文件 創建用戶 ...
  • 操作系統版本:CentOS Linux release 7.2.1511 (Core) SSH版本:OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 1.打開Xshell工具,點擊“工具”,選擇“新建用戶密鑰生成嚮導”,如圖所示: 2.選擇密鑰類型為“RSA”,密鑰長度為“1 ...
  • 新建文本文檔,更改尾碼為“.bat”,寫入以下代碼: netsh interface ip set address name="本地連接" source=static 192.168.1.110 255.255.255.0 192.168.1.1 1 name是網卡的名字。 在WIN10中測試,要右 ...
  • Last login: Sun Dec 24 04:55:59 2017 1、安裝依賴 [root@node001 ~]# yum install -y perlLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...