1. 程式人生 > 實用技巧 >KVM虛擬化技術及案例

KVM虛擬化技術及案例

一、虛擬化技術

通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機,在一臺計算機上同時執行多個邏輯計算機,同時每個邏輯計算機可執行不同的作業系統,應用程式都可以在相互獨立的空間內執行而互相不影響,從而提高計算機的工作效率。

二、虛擬化技術發展

雛形:
1961年,IBM709機器實現了分時系統,將CPU佔用切分為多個極短的時間片(1/100sec)每一個時間片執行不同的工作,通過對這些時間片進行輪詢從而將一個CPU偽裝成多個CPU

1972年, IBM正式將system370機的分時系統命名為虛擬機器

1990年, IBM推出的system390機支援邏輯分割槽(將一個CPU分為多份,相互獨立,也就是邏輯分割)

Xen 2003年問世,是一個外部的hypervisor程式(虛擬機器管理程式),能夠控制虛擬機器和給多個客戶機分配資源

KVM:2007年問世,現已內建在kernel核心中的

三、虛擬化型別

虛擬化型別
1、全虛擬化:將物理硬體資源全部通過軟體的方式抽象化,最後進行呼叫
使用的方法:使用hypervisor(VMM)軟體,其原理是在底層硬體和伺服器之間建立一個抽象層,而基於核心的虛擬機器是面向Linux系統的開源產品hypervisor(VMM)可以捕捉CPU的指令,為指令訪問硬體控制器和外設充當中介。

2、半虛擬化:需要修改作業系統

3、直通:直接使用物理硬體資源(需要支援,還不完善)

Xen 支援的虛擬化技術:全虛擬化,半虛擬化
KVM:支援的虛擬化技術:全虛擬化

四、虛擬化的特性

優勢
① 集中化管理(遠端管理、維護)
② 提高硬體利用率(物理資源利用率低-例如峰值,虛擬化解決了“空閒”容量)
③ 動態調整機器/資源配置(虛擬化把系統的應用程式和服務硬體分離、提高了靈活性)
④ 高可靠(可部署額外的功能和方案,可提高透明負載均衡、遷移、恢復複製等應用環境)

劣勢
① 前期高額費用(初期的硬體支援)
② 降低硬體利用率(特定場景-例如極度吃資源的應用不一定適合虛擬化)
③ 更大的錯誤影響面(本地物理機down機會導致虛擬機器均不可用,同時可能虛擬機器中檔案全部損壞)
④ 實施配置複雜、管理複雜(管理人員運維、排障困難)
⑤ 一定的限制性(虛擬化技術涉及各種限制,必須與支援/相容虛擬化的伺服器、應用程式及供應商結合使用)
⑥ 安全性(虛擬化技術自身的安全隱患)

五、KVM

5.1、KVM簡介

廣義KVM:
KVM(Kernel-based Vritual Machine)–基於核心的虛擬機器
KVM 是基於虛擬化擴充套件的X86硬體的開源Linux原生的全虛擬化方案(要求cpu支援Intel-VT-x或AMD-V)
KVM內嵌於核心模組中,模擬處理器和記憶體以支援虛擬機器執行
虛擬機器被實現為常規的 Linux 程序,由標準 Linux 排程程式進行排程;
虛擬機器的每個虛擬 CPU 被實現為一個常規的 Linux 程序。這使得 KMV 能夠使用 Linux 核心的已有功能
但KVM本身不執行任何模擬。需要客戶空間程式(虛擬機器)通過/dev/kvm(此虛擬裝置需要開起硬體輔助虛擬化才能看到)介面設定一個客戶機虛擬伺服器的地址空間,
並且由Qemu模擬I/O(ioctl)進行排程資源和維護管理

Libvirt:KVM的管理工具,除了可以管理KVM這類VMM,還可以管理Xen,VirtualBox,甚至OpenStack底層

Libvirt包含3個元件:後臺daemon程式libvirtd、API庫、命令列工具virsh

5.2、KVM架構及簡介


KVM 虛擬化架構/三種模式
客戶模式:執行非I/O的客戶程式碼,虛擬機器執行在這個模式
使用者模式: 代表使用者執行I/O指令,QEMU執行在這個模式
核心模式:實現客戶模式的切換,處理因為I/O或者其他指令引起的從客戶模式推出,KVM模組工作在這個模式

5.3、KVM工作流程

使用者模式的 Qemu 利用介面 libkvm 通過 ioctl 系統呼叫進入核心模式。 KVM驅動為虛擬機器建立虛擬 CPU 和虛擬記憶體,然後執行 VMLAU·NCH 指令進入客戶模式,裝載 Guest OS 並執行。Guest OS 執行過程中如果發生異常,則暫停Guest OS的執行並儲存當前狀態同時退出到核心模式來處理這些異常。

核心模式處理這些異常時如果不需要 I/O則處理完成後重新進入客戶模式。如果需要 I/O 則進入到使用者模式, 則由 Qemu 來處理 I/O,處理完成後進入核心模式,再進入客戶模式。

六、搭建KVM虛擬機器

1、虛擬機器設定如下:

硬碟記憶體大小為300G左右

vim /etc/resolv.conf
vim /etc/hosts (優先順序高)

都指DNS 習慣第一個指DNS伺服器 遠端DNS伺服器用第二個

2、搭建實驗環境

2、搭建實驗環境

[root@localhost ~]# hostnamectl set-hostname kvm
[root@localhost ~]# bash
[root@kvm ~]# vim /etc/ssh/sshd_config  ##關閉反解DNS
UseDNS no
[root@kvm ~]# systemctl stop firewalld
[root@kvm ~]# systemctl disable firewalld
[root@kvm ~]# setenforce 0

3、安裝KVM

yum groupinstall -y "GNOME Desktop"    安裝GNOME桌面(有就可以不裝)
[root@kvm ~]# yum -y install qemu-kvm ##安裝KVM模組
[root@kvm ~]# yum -y install qemu-kvm-tools 安裝kvm除錯工具,可不安裝 [root@kvm ~]# yum -y install virt-install ##構建虛擬機器的命令列工具 [root@kvm ~]# yum -y install qemu-img ##qemu 元件,建立磁碟、啟動虛擬機器等 [root@kvm ~]# yum -y install bridge-utils ##網路支援工具(通過網橋) [root@kvm ~]# yum -y install libvirt ##虛擬機器管理工具 [root@kvm ~]# yum -y install virt-manager ##圖形介面管理虛擬機器

4、檢測CPU是否支援虛擬化

cat /proc/cpuinfo | grep vmx

lsmod | grep kvm

5、設定開啟啟動介面的顯示模式

[root@kvm ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

6、設定KVM網路

KVM網路的兩種模式:
① NAT: 預設設定,資料包由 NAT 方式通過主機的介面進行
傳送,可以訪問外網,但是無法從外部訪問虛擬機器網路(單向)
② 網橋:這種模式允許虛擬機器像一臺獨立的主機一樣擁有網路,外部的機器可以直接訪問到虛擬機器內部,但需要網絡卡支援(一般有線網絡卡都支援)(雙向1、修改ens-33網絡卡 改成用網橋網絡卡 (ens是網絡卡型別 還有eth0)

vi /etc/sysconfig/network-scripts/ifcfg-ens33

2、增加br0網橋網絡卡

vi /etc/sysconfig/network-scripts/ifcfg-br0

網橋型別

靜態

ip (可改成自己網絡卡地址 反正不用了)

systemctl restart network

7、建立KVM儲存和映象資料的目錄、上傳centos7映象

[root@kvm network-scripts]# mkdir -p /data_kvm/iso                     放映象(使用kvm圖形化介面去分配映象位置,可指這兩個目錄)
[root@kvm network-scripts]# mkdir -p /data_kvm/store                   放儲存卷

用shell 將映象放到iso裡

cat /data_kvm/iso/

8、使用虛擬系統管理器管理虛擬機器

[root@kvm iso]# virt-manager          (會彈出以下介面)雙擊開啟

9、建立儲存池(分別指向iso和store 映象儲存位置和資料的目錄位置)



建立儲存池儲存映象

1.建立儲存池

2.建立映象 (同理)

卷和映象都完成了(指向目錄位置ok)

同時給了20G的磁碟

映象ok 磁碟20Gok



11、建立虛擬機器(右擊新建或者電腦)

這裡預設用的橋接,呼應前面

最後正常安裝!!!