KVM入門


KVM

KVM(Kernel-based Virtual Machine)是眾多虛擬化技術之一,它是Linux內核中的一個模塊,該模塊依賴於CPU,如果CPU支持虛擬化,那么該模塊才可以被加載。KVM技術是硬件層面的虛擬化,它會為我們虛擬各種硬件設備,這樣我們可以在已有操作系統上運行別的操作系統。

檢查CPU是否支持虛擬化

sudo apt install cpu-checker -y
sudo kvm-ok

先安裝cpu-checker工具,然后使用其帶的kvm-ok命令檢查kvm模塊是否加載

  • 顯示‘/dev/kvm does not exist’則表示kvm模塊未被加載,執行sudo modprobe kvm_intel命令進行加載
  • 當然加載kvm模塊需要開啟CPU虛擬化技術,在BIOS中設置Intel Virtualization Technology為Enable

注:lsmod | grep kvm也可以查看kvm模塊是否加載

安裝軟件包

安裝服務端軟件包

sudo apt install ubuntu-virt-server

軟件包ubuntu-virt-server依賴的兩個主要的軟件包是qemu-kvm和libvirt-bin。

  • qemu將內核中的虛擬功能暴露給用戶,提供了用戶空間的虛擬機環境
  • libvirt是一個工具庫,通過它可以方便的管理各種虛擬機軟件。Libvirt幾乎支持所有常見的虛擬技術,包括KVM,Xen,LXC,VMware,VirtualBox等
安裝客戶端軟件包
sudo apt-get install virtinst

該軟件包提供4個命令來管理虛擬機

  • virt-conver --------把一種格式的虛擬機轉為另一種格式
  • virt-clone --------克隆虛擬機
  • virt-image -------創建虛擬機鏡像
  • virt-install -------創建新的虛擬機

創建虛擬機

配置虛擬網卡

默認情況下,KVM新創建的虛擬機使用NAT網絡(虛擬機可以訪問外面,外面看不到它)。這種NAT機制不通過網卡,只通過內核內部的IP轉發來進行數據傳輸,所以外面的機器訪問不到虛擬機。為了能讓外面的機器訪問虛擬機,需要創建虛擬網橋,把虛擬機的虛擬網卡與外部物理網卡通過網橋橋接起來。

1. 啟動IP轉發

編輯/etc/sysctl.conf文件

# 去掉該行前面的#號,開啟轉發功能
net.ipv4.ip_forward = 1

執行sudo sysctl -p命令使配置生效

2. 創建橋接設備

在宿主機上安裝bridge-utils軟件包:

sudo apt-get install bridge-utils

編輯/etc/network/interfaces,然后添加虛擬網橋網橋br0,將物理網卡enp4s0f2添加到網橋。

注:將物理網卡enp4s0f2添加到br0后,物理網卡的IP地址將失去作用,所以下面的配置文件中沒有為enp4s0f2指定IP

[...]
auto enp4s0f2
iface enp4s0f2 inet manual

auto br0
iface br0 inet dhcp
	address 10.10.10.2          網橋IP地址
    netmask 255.255.255.0       掩碼
    gateway 10.10.10.1
	bridge_ports enp4s0f2           #將物理網卡添加到虛擬網橋中
	bridge_stp off
	bridge_maxwait 0
	bridge_fd 0
[...]

重啟網絡

#sudo  /etc/init.d/networking restart
或
#sudo service networking restart

重啟網絡之后,執行brctl show查看網橋是否添加成功,下面顯示我的機器已成功創建網橋,並將enp4s0f2網卡添加到網橋中

11

3. 創建虛擬機

首先准備好鏡像文件,我這里准備了ubuntu-server-adm64.iso鏡像文件,然后通過前面提到的命令來創建虛擬機

sudo virt-install \
--name=myvps1 \
--ram=512 \
--network bridge:br0 \
--disk path=/var/lib/libvirt/images/myvps1.img,bus=virtio,size=10 \
--graphics vnc,listen=0.0.0.0
--noautoconsole \
--hvm \
--cdrom ./ubuntu-server-adm64.iso

下面解釋一下各個參數的作用:

  • --name=myvps1 虛擬機名稱為myvps1
  • --ram=512 虛擬機內存大小為512MB
  • --network bridge:br0 指定網絡為網橋設備,后面具體解釋
  • --disk 指定虛擬盤的位置,虛擬盤可以是一個文件,分區或者一個邏輯卷。例子指定為myvps1.img文件,空間為10G,總線使用virtio總線
  • --graphics 指定圖形界面,例子中指定vnc遠程桌面控制,即我們可以使用vnc客戶端對虛擬機進行遠程桌面控制
  • --noautoconsole 不要自動連接到虛擬機控制台,主要因為我們安裝的服務器版虛擬機,它上面沒有圖形界面
  • --hvm 創建功能完整的虛擬機
  • --cdrom 指定安裝鏡像位置

當然關於參數的詳解使用man virt-install來查看

如果虛擬機創建成功則會顯示以下內容

11

4. 連接虛擬機

我們使用VNC軟件來連接虛擬機,VNC軟件是一款開源的Linux遠程桌面控制軟件,和Windows下的Teamviewer或者是QQ自帶的遠程桌面控制一樣。VNC分服務端和客戶端,安裝客戶端的電腦可以遠程控制安裝服務端的電腦,剛才我們在創建虛擬機的時候,指定支持vnc遠程控制,所以我們下載一個vnc客戶端就可以了。下載地址

下面是vnc軟件的連接界面,VNS Server填寫網橋的IP即可,Name可以隨意命名。

圖片服務器掛了

連接成功后就會開始裝系統的步驟,這里就不介紹了。

5. 遺留問題

創建虛擬機的時候會自動創建兩塊虛擬網卡出來,虛擬機內部有一塊(ens3),虛擬機外部也有一塊(vnet0),這個下圖有顯示。在創建虛擬機的我們指定為網橋,意思是將來把外部那塊網卡(vnet0)添加到網橋中。而物理機的網卡(enp4s0f2)已被添加的網橋中,這樣外部就可以和虛擬機進行通信了(虛擬機內部那塊網卡IP必須和網橋在一個IP段)。

外部虛擬網卡

圖片服務器掛了

網橋br0中添加了兩塊網卡(端口)

圖片服務器掛了

管理虛擬機

啟動虛擬機

使用下面的命令來啟動剛創建的虛擬機

# virsh start myvps1

讓虛擬機隨物理機一起啟動

# virsh autostart myvps1

列出正在運行的虛擬機,所有虛擬機,關閉的虛擬機

# virsh list

# virsh list --all

# virsh list --inactive

重啟,關機

重啟

# virsh reboot myvps1

關機

# virsh shutdown myvps1

保存,恢復狀態

有時我們需要把某個虛擬機暫時關閉,而又想啟動時恢復當時的狀態,這是需要用到save命令

# virsh save myvps1 myvps1-20171202.state

執行上面的命令后,虛擬機的內存會被保存到一個文件中,然后虛擬機自動關閉

# virsh restore myvps1-20171202.state

恢復虛擬機

掛起,恢復

掛起

# virsh suspend myvps1

恢復

# virsh resume myvps1

空間擴容

在虛擬機運行一段時間后可能會需要添加更多的磁盤空間。這里可以使用attach-disk命令對磁盤擴容。

1. 生成文件

我們使用dd命令來產生一個文件

# sudo dd if=/dev/zero   of=/var/lib/libvirt/images/myvps1-disk2.image bs=1M count=4096

該命令會為我們生成一個4GB大小的文件

2. 把文件添加到虛擬機

使用attach-disk命令,把剛剛創建的文件添加到myvps1虛擬機,作為其磁盤使用:

# virsh attach-disk myvps1 \
/var/lib/libvirt/images/myvps1-disk2.img vdb \
--live \
--cache none

這樣一個名為vdb的虛擬磁盤就被添加到虛擬機中了

3. 分區

將硬盤添加到虛擬機后,需要在虛擬機中對新的硬盤進行格式化才能使用。下面的操作都是在虛擬機myvps1中進行的

查看硬盤是否添加成功

# sudo fdisk -l

圖片服務器掛了

上圖可以看到已經有磁盤/dev/vdb,但是未分區和格式化,關於Linux下如何對分區進行格式化請自行百度

增加CPU核數

查看主機cpu核數

# virsh nodeinf0

我的機器顯示兩個核,也就是每個虛擬機最多能有兩個CPU核

圖片服務器掛了

查看當前虛擬機(myvps1)虛擬機核數,顯示只有一個核,vcpu 0表示第0個核,而不是核數為0

# virsh vcpuinfo myvps1

圖片服務器掛了

關閉虛擬機
# virsh shutdown myvps1
修改最大核數為2核,並設置到配置文件(/etc/libvirt/qemu下)
# virsh setvcpus myvps1 2 --maximum --config
設置核數為2到配置文件(/etc/libvirt/qemu下)
# virsh setvcpu2 myvps1 2 --config
重啟虛擬機
# virsh start myvps1

圖片服務器掛了

上圖顯示出兩個cpu核表示我們設置成功

增加內存

增加內存核增加CPU核數一樣,先設置最大內存,在設置當前內存

查看當前虛擬機信息,可以看到當前的內存設置
# virsh dominfo myvps1
設置最大內存為2G
# virsh setmaxmem myvps1 2097152 --config
設置當前內存為1G
# virsh setmem myvps1 1048576 --config
重啟虛擬機
# virsh shutdown myvps1
# virsh start myvps1

克隆虛擬機

有時我們需要幾台環境相同的虛擬機,這時,我們不需要從頭創建,只需要克隆即可

先關閉虛擬機
# virsh shutdown myvps1
克隆虛擬機
# sudo virsh-clone \
--original myvps1 \
--name myvps3 \
--file /var/lib/libvirt/images/myvps3.img
啟動克隆的虛擬機
# virsh start myvps3

虛擬機鏡像管理

虛擬機鏡像做好后,我們可能需要修改虛擬機的IP地址,虛擬機內部的文件等。當然可以先啟動虛擬機,然后通過VNC或者SSH進去修改。不過,方便的方法時使用virt-edit命令來直接編輯虛擬機鏡像文件即可。virt-edit是libguestfs-tools包提供的命令。

# sudo apt install libguestfs-tools

這個軟件包專門管理虛擬機的虛擬磁盤文件,提供的工具有:

  • virt-cat 顯示虛擬機中文件的內容(相當於cat命令)
  • virt-edit 編輯虛擬機中的文件(相當於vi命令)
  • virt-inspector 顯示虛擬機的操作系統等詳細信息
  • virt-tar 在虛擬機和主機之間傳遞文件

當然還有很多命令,這里就不一一列出了

刪除虛擬機

# virsh undefine myvps1
# virsh pool-refresh default

在執行virsh undefine myvps1時,虛擬機的虛擬磁盤文件/var/lib/libvirt/images/myvps1.img文件不會被刪除,需要手動刪除。刪除完畢后需要執行virsh pool-refresh default命令清楚虛擬機的緩存記錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM