KVM入門

KVM

KVM(Kernel-based Virtual Machine)是衆多虛擬化技術之一,它是Linux內核中的一個模塊,該模塊依賴於CPU,若是CPU支持虛擬化,那麼該模塊才能夠被加載。KVM技術是硬件層面的虛擬化,它會爲咱們虛擬各類硬件設備,這樣咱們能夠在已有操做系統上運行別的操做系統。node

檢查CPU是否支持虛擬化

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

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

  • 顯示‘/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轉發來進行數據傳輸,因此外面的機器訪問不到虛擬機。爲了能讓外面的機器訪問虛擬機,須要建立虛擬網橋,把虛擬機的虛擬網卡與外部物理網卡經過網橋橋接起來。dom

1. 啓動IP轉發

編輯/etc/sysctl.conf文件工具

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

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

2. 建立橋接設備

在宿主機上安裝bridge-utils軟件包:操作系統

sudo apt-get install bridge-utils

編輯/etc/network/interfaces,而後添加虛擬網橋網橋br0,將物理網卡enp4s0f2添加到網橋。3d

注:將物理網卡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命令清楚虛擬機的緩存記錄

相關文章
相關標籤/搜索