KVM簡單學習

前言

KVM 全稱是 Kernel-Based Virtual Machine钻蔑,基于linux內(nèi)核的虛擬化技術(shù)晴弃,現(xiàn)大數(shù)據(jù)業(yè)務需要支持適配云公司國產(chǎn)化ctyunos苛茂,這里使用KVM本地模擬虛機交付筛谚,記錄下使用過程捻脖。

KVM架構(gòu)

image.png

一些說明
0锐峭,虛擬化是云計算的基礎(chǔ)中鼠。一種資源管理技術(shù),是將計算機的各種實體資源(CPU只祠、內(nèi)存兜蠕、磁盤空間、網(wǎng)絡適配器等)做虛擬化抛寝、將虛擬化后的整體做為一個可供分割且組合的操作系統(tǒng)熊杨。
1,KVM全稱是Kernel-Based Virtual Machine盗舰。KVM基于Linux內(nèi)核實現(xiàn)晶府,屬于半虛擬化的Hypervisor。KVM有一個內(nèi)核模塊叫 kvm.ko钻趋,只用于管理虛擬 CPU 和內(nèi)存川陆,而Qemu則協(xié)助提供IO設備半虛擬化,用于虛擬磁盤IO和網(wǎng)絡IO等蛮位。不過IO設備的虛擬化方向都是往直接透傳到宿主機的方向走较沪,比如vhost-net,直接在硬件或內(nèi)核級別支持失仁。
2尸曼,一個 KVM虛機在宿主機中其實是一個qemu-kvm進程。而每個虛機中的vCPU則為宿主機中的一個線程萄焦。
3控轿,大名鼎鼎的OpenStack底層也使用Libvirt,Libvirt是KVM的管理工具拂封,還可以管理Xen茬射,VirtualBox等Hypervisor。Libvirt包含3個東西:后臺daemon服務libvirtd冒签、API 庫和命令行工具 virsh在抛。
4,虛機的vCPU總數(shù)可以超過物理CPU數(shù)量萧恕,這個叫CPU overcommit(超配)霜定。

虛擬化原理

CPU虛擬化

image.png

一些說明
1,一個 KVM虛機在宿主機中其實是一個qemu-kvm進程廊鸥。而每個虛機中的vCPU則為宿主機中的一個線程。
2辖所, KVM 允許CPU overcommit(超配:虛機的vCPU總數(shù)可以超過物理CPU數(shù)量)惰说,適當overcommit虛機能夠充分利用宿主機的CPU,過大的負載反而會影響整體性能缘回。

內(nèi)存虛擬化

影子頁面SPT

image.png

一些說明
1吆视,影子頁表SPT由KVM維護典挑,實際上就是一個 Guest頁表到Host頁表的映射。直接將GVA轉(zhuǎn)換為HPA啦吧。
2您觉,影子頁表SPT優(yōu)點在于當需要訪問物理內(nèi)存的時候,只會經(jīng)過一層影子頁表的轉(zhuǎn)換授滓。而缺點在于需要為Guest的每個進程都維護一個影子頁表琳水,這將帶來很大的內(nèi)存開銷。同時影子頁表的建立是很耗時的般堆,如果 Guest 的進程過多在孝,將導致影子頁表頻繁切換。

EPT和NPT

image.png

一些說明
1淮摔,Intel的EPT(Extent Page Table)技術(shù)和AMD的 NPT(Nest Page Table)技術(shù)都是在硬件層面上實現(xiàn)GVA到HPA之間的轉(zhuǎn)換私沮。采用了在兩級頁表結(jié)構(gòu),Guest OS頁表維護GVA->GPA和橙,EPT頁表來維護GPA->HPA映射仔燕。
2,原來是HVA->HPA由HostOS完成的映射由EPT直接完成GPA->HPA魔招,EPTP負責指向EPT晰搀。
3,EPT/NPT地址轉(zhuǎn)化直接由硬件(MMU)查頁表完成仆百,大大提升了效率厕隧,且只需為Guest維護一份EPT頁表,減少內(nèi)存的開銷俄周。

VirtIO

QEMU主要負責虛擬設備IO吁讨,而QEMU和核心則為VirtIO,VirtIO設計目標是在虛擬化環(huán)境下提供與物理設備相近的 I/O 功能和性能峦朗,并且避免在虛擬機中安裝額外的驅(qū)動程序建丧。VirtIO是用半虛擬化,相較于最先QEMU版本的全虛擬化波势,性能有很大的提升翎朱。

模塊組成

image.png

一些說明
1,VirtIO-Block(塊設備):提供虛擬磁盤設備的接口尺铣。
2拴曲,VirtIO-Net(網(wǎng)絡設備):提供虛擬網(wǎng)絡設備的接口。
3凛忿,VirtIO-Serial(串口設備):提供虛擬串口設備的接口澈灼。
4,VirtIO-Memory(內(nèi)存設備):提供虛擬內(nèi)存設備的接口。
5叁熔,VirtIO-Input(輸入設備):提供虛擬輸入設備的接口委乌。
6,VirtIO-SCSI荣回、VirtIO-NVMe遭贸、VirtIO-GPU、VirtIO-FS心软、VirtIO-VSock 等等虛擬設備類型和協(xié)議壕吹。

技術(shù)原理

image.png

一些說明
1,VirtIO使用前后端架構(gòu)糯累,包括前端驅(qū)動(Guest OS Kernel內(nèi)部 VirtIO Driver)入问,后端設備(QEMU設備 VirtIO Device)逢慌,傳輸協(xié)議(vring)桥氏。
2匆篓,VirtIO 相當于QEMU實現(xiàn)的全虛擬化,因為直接和Hypervisor中的虛擬化設備交互胖秒,避免了CPU在VM Exit和VM Entry之間頻繁陷入陷出缎患,性能有較大的提升。且提供了一套統(tǒng)一的虛擬設備接口標準阎肝。
3挤渔,不過當前IO設備虛擬化的方向當前主要往IO透傳的方向發(fā)展了,繞開QEMU直接對接硬件的虛擬化能力风题,比如Intel VT-d和SR-IOV判导,基本能達到宿主機的吞吐能力。

塊IO虛擬化

virtio-block塊IO虛擬化同樣是virtio-x虛擬化的子模塊沛硅。

image.png

一些說明
1眼刃,virtio-block的流程需要經(jīng)過兩次IO協(xié)議棧,在Guest和Host主機中都要走完整的VFS IO協(xié)議棧摇肌。
2擂红,官方提供了vhost-blk方案,不過沒有合并到主分支围小,當前方案和vhost-user網(wǎng)絡一樣昵骤,直接走了內(nèi)核,性能能大大提高肯适,需要的可以了解下变秦,當前業(yè)內(nèi)比較成熟的。
3框舔,業(yè)內(nèi)成熟的虛擬存儲IO棧的軟件為SPDK(Storage Performance Development Kit)伴栓,提供了一整套工具和庫,以實現(xiàn)高性能、擴展性強钳垮、全用戶態(tài)的存儲應用程序,需要的可以了解下额港。

網(wǎng)絡虛擬化

網(wǎng)絡虛擬化是虛擬化技術(shù)中最復雜的部分饺窿。存在virtio-net,vhost-net移斩,vhost-user+DPDK肚医,vDPA等方案。這里只簡單說下virtio-net(半虛擬化)向瓷,vhost-net(透傳)肠套。

image.png

image.png

一些說明
1,virtio-net為半虛擬化方案猖任,相對于qemu的全虛擬化你稚,virtio-net通過在Guest OS的VirtIO Net Driver層引入了vring與qemu-kvm層VirtIO Net Device進行通信,降低了VM exit和VM entry的開銷朱躺,一定程度上改善了網(wǎng)絡IO的性能刁赖。vhost-net則為透傳方案,相對于virtio-net半虛擬化繞過了QEMU直接在Guest OS和host宿主機之間通信长搀,減少了數(shù)據(jù)的拷貝宇弛,特別是減少了用戶態(tài)到內(nèi)核態(tài)的拷貝。性能得到大大加強源请,就吞吐量來說枪芒,vhost-net基本能夠跑滿一臺物理機的帶寬。
2谁尸,生產(chǎn)環(huán)境中一般使用DPDK和vDPA結(jié)合OVS(Open vSwitch)使用舅踪。

管理工具Libvirt

libvirt軟件包提供了一個獨立于虛擬機監(jiān)控程序的虛擬化API,可與各種操作系統(tǒng)的虛擬化功能進行交互症汹。

image.png

image.png

一些說明
1硫朦,libvirt主要包括3個部分:應用程序編程接口(API)庫、一個守護進程(libvirtd)和一個默認命令行管理工具(virsh)背镇。應用程序編程接口(API)庫:為了其他虛擬機管理工具(如virsh咬展、virt-manager等)提供虛擬機管理的程序庫支持。libvirtd守護進程:負責執(zhí)行對節(jié)點上的域的管理工作瞒斩,在用各種工具對虛擬機進行管理之時破婆,這個守護進程一定要處于運行狀態(tài)中。virsh : libvirt項目中默認的對虛擬機管理的一個命令行工具胸囱。
2祷舀,一些常用的虛擬機管理工具(如virsh、virt-install、virt-manager等)和云計算框架平臺(如 OpenStack裳扯、OpenNebula抛丽、Eucalyptus 等)都在底層使用 libvirt 的應用程序接口。
創(chuàng)建CtyunOS虛機
這里使用virt-manager創(chuàng)建一個CtyunOS的虛機饰豺,用于加深學習印象亿鲜。

創(chuàng)建CtyunOS虛機

這里使用virt-manager創(chuàng)建一個CtyunOS的虛機,用于加深學習印象冤吨。

1蒿柳,安裝KVM

# qemu-kvm -為KVM管理程序提供硬件仿真的軟件。
# libvirt-daemon-system -用于將libvirt守護程序作為系統(tǒng)服務運行的配置文件漩蟆。
# libvirt-clients -用于管理虛擬化平臺的軟件垒探。
# bridge-utils -一組用于配置以太網(wǎng)橋的命令行工具。
# virtinst -一組用于創(chuàng)建虛擬機的命令行工具怠李。
# virt-manager -易于使用的GUI界面和支持命令行工具圾叼,用于通過libvirt管理虛擬機。
 
# 安裝
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager
 
# qemu-kvm創(chuàng)建軟鏈
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
 
# 查看網(wǎng)絡信息扔仓,建議用默認的net網(wǎng)絡即可
brctl show

2褐奥,開通CtyunOS實例

a)打開virt-manager

image.png

b)選擇對應的安裝介質(zhì),配置安裝的資源

image.png

image.png

c)設置安裝的系統(tǒng)信息

image.png

d)安裝系統(tǒng)

image.png

e)系統(tǒng)安裝完成

image.png

f)配置網(wǎng)絡

image.png
# 配置網(wǎng)絡
vi /etc/sysconf iq/network-scripts/ifcfg-ens3
# 修改ONBOOT=yes后重啟網(wǎng)絡
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
 
# 創(chuàng)建一個虛擬機
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
 
# 開啟和關(guān)閉虛擬機 ,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
 
# 給虛擬機添加硬盤,創(chuàng)建一塊 100G 的硬盤
qemu-img create -f qcow2 ctyunsos-100-d1.qcow2 20G
 
# 創(chuàng)建快照, 不寫 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
 
# 查看虛擬機內(nèi)存和cpu信息
virsh dommemstat  ctyunsos-100
virsh  vcpuinfo  ctyunsos-100

虛擬機技術(shù)發(fā)展

虛擬機技術(shù)的思想源頭來源于1974年7月的論文《Formal Requirements for Virtualizable Third-Generation Architectures》彻犁。經(jīng)過這么多年的發(fā)展叫胁,從最先開始的全虛擬化,半虛擬化(XEN)汞幢,硬件輔助虛擬化(Intel VT-X/AMD-V)驼鹅,KVM/VirtualBox/Hyper-V,容器化技術(shù)LXC&Docker(cgroup&namespace)森篷,到當前的microVM和functions技術(shù)(firecracker)输钩。已經(jīng)有了很大的發(fā)展。

image.png

一些說明
1仲智,全虛擬化技術(shù)买乃,比如QEMU,主要由HyperVisor將虛擬機的命令翻譯成宿主機上能執(zhí)行的命令钓辆,性能很差剪验。
2肴焊,半虛擬化技術(shù),比如Xen功戚,在內(nèi)核加一些接口娶眷,接受虛擬機傳入內(nèi)核接口命令,功能和風險較大疫铜,需要修改內(nèi)核茂浮。
3,硬件輔助虛擬化技術(shù)壳咕,最有效的有KVM/Hyper-V,使用Intel VT-X/AMD-V技術(shù)CPU直接接收虛擬機的命令顽馋,避免的解釋和翻譯命令的過程谓厘,性能大大提高。
4寸谜,容器化技術(shù)竟稳,比如Docker,在微服務的發(fā)展下熊痴,不需要像KVM一樣虛擬化出一個有操作系統(tǒng)他爸,有IO等設備的完整機器,基于Cgroups和namespace果善,隔離出一個獨立的操作系統(tǒng)和網(wǎng)絡環(huán)境诊笤,給應用提供簡約的運行環(huán)境,虛擬化成本大大減少巾陕,提供更輕量級的虛擬化方案讨跟。
5,超輕虛擬化技術(shù)鄙煤,比如firecracker晾匠,在基于KVM和VirtIO,構(gòu)建MicroVM Zone梯刚。提供毫秒級的VM創(chuàng)建速度凉馆,是一個更精簡、更安全亡资、更現(xiàn)代化的虛擬化技術(shù)方向澜共。

總結(jié)

1,虛擬化技術(shù)的發(fā)展沟于,大大推動了云技術(shù)的進步咳胃。
2,虛擬化技術(shù)從論文《Formal Requirements for Virtualizable Third-Generation Architectures》到現(xiàn)在的serverless以及firecracker代表的microVMs技術(shù)旷太,越來越往功能化展懈,小型簡單化销睁,高安全,低成本的方向發(fā)展了存崖。
3冻记,從云計算的角度來看,kvm虛擬技術(shù)屬于IaaS層的產(chǎn)品来惧,給客戶提供完整一套基礎(chǔ)設施冗栗,客戶可以用這個kvm虛機做任何事情,而代表LXC的Docker容器技術(shù)則屬于PaaS層的產(chǎn)品供搀,為特定的軟件服務提供特定的服務隅居,比如MySQL images,而這個MySQL images容器只能用于MySQL服務葛虐,而不能再這個容器里面在用于跑其他的服務胎源,比如Redis。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屿脐,一起剝皮案震驚了整個濱河市涕蚤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌的诵,老刑警劉巖万栅,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異西疤,居然都是意外死亡烦粒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門瘪阁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撒遣,“玉大人,你說我怎么就攤上這事管跺∫謇瑁” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵豁跑,是天一觀的道長廉涕。 經(jīng)常有香客問我,道長艇拍,這世上最難降的妖魔是什么狐蜕? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮卸夕,結(jié)果婚禮上层释,老公的妹妹穿的比我還像新娘。我一直安慰自己快集,他們只是感情好贡羔,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布廉白。 她就那樣靜靜地躺著,像睡著了一般乖寒。 火紅的嫁衣襯著肌膚如雪猴蹂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天楣嘁,我揣著相機與錄音磅轻,去河邊找鬼。 笑死逐虚,一個胖子當著我的面吹牛聋溜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叭爱,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼勤婚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涤伐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤缨称,失蹤者是張志新(化名)和其女友劉穎凝果,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睦尽,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡器净,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了当凡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片山害。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沿量,靈堂內(nèi)的尸體忽然破棺而出浪慌,到底是詐尸還是另有隱情,我是刑警寧澤朴则,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布权纤,位于F島的核電站,受9級特大地震影響乌妒,放射性物質(zhì)發(fā)生泄漏汹想。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一撤蚊、第九天 我趴在偏房一處隱蔽的房頂上張望古掏。 院中可真熱鬧,春花似錦侦啸、人聲如沸槽唾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夏漱。三九已至豪诲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挂绰,已是汗流浹背屎篱。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葵蒂,地道東北人交播。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像践付,于是被迫代替她去往敵國和親秦士。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 上一節(jié)內(nèi)容《重識云原生】第2.3節(jié)——主流虛擬化技術(shù)之Xen》[http://www.reibang.com/p...
    Kevin_Junbaozi閱讀 1,019評論 0 0
  • 1.虛擬化定義 虛擬化定義:虛擬化是一種資源管理技術(shù)永高,它將計算機的各種實體資源(CPU隧土、內(nèi)存、存儲命爬、網(wǎng)絡等)予以抽...
    雙子昕閱讀 1,997評論 0 0
  • 虛擬化技術(shù)概覽KVM簡介KVM的管理操作 一曹傀、虛擬化技術(shù)概覽 (一)虛擬化技術(shù)類型: 主機虛擬化:xen, kvm...
    哈嘍別樣閱讀 1,794評論 0 5
  • 本章內(nèi)容 ◆ 虛擬化基礎(chǔ)◆ 虛擬化技術(shù)之KVM◆ kvm實戰(zhàn)案例 一:虛擬化基礎(chǔ) https://www.vmwa...
    Liang_JC閱讀 646評論 0 0
  • 虛擬化技術(shù)(Virtualization) 計算機基礎(chǔ):馮諾依曼體系中計算機的五大部件:控制器、運算器饲宛、輸入設備皆愉、...
    Net夜風閱讀 2,985評論 0 1