kvm 使用入門詳解


kvm 是虛擬化技術的一個典型實現,功能非常強大,使用很方便。kvm 本身主要實現對 CPU 的虛擬化,內存和IO的虛擬化使用了開源軟件 qemu,qemu 是純軟件層面的虛擬化,其實就是個模擬器。kvm 要求 cpu 必須支持硬件虛擬化,可以通過 Linux 命令查看。

說到 kvm 必須提及 libvirt 程序集,它是用來管理 kvm 虛擬機的,當然其實也可以管理 xen 等其它虛擬化的虛擬機。libvirt 包括三部分:(1). libvirtd是后台服務程序;(2). libvirt 是管理虛擬機的 API 接口,可以通過 python c java 等語言來編寫程序管理虛擬機,比較典型的 virt-manager 就是使用 python 寫的可視化工具;(3). virsh 等命令行管理工具。

一、准備工作

1. 實驗環境

操作系統:CentOS 6.4 x86_64 mini
宿主機:vmware workstation 虛擬機

2. 檢查宿主機處理器是否支持虛擬化

[root@kvm ~]# egrep -o 'vmx | svm' /proc/cpuinfo | wc -l

如果顯示數值是 0,則表示該 CPU 不支持虛擬化。

3. 配置或設置宿主機

CPU:2-4 core  開啟 cpu 虛擬化(bios 設置 或 vmware 設置)
內存:4-8 GB
硬盤:100 GB

4. 關閉 iptables 和 selinux

關閉 iptables 服務:

[root@kvm ~]# service iptables stop [root@kvm ~]# chkconfig iptables off

關閉 selinux:

[root@kvm ~]# setenforce 0 [root@kvm ~]# vi /etc/selinux/config SELINUX=disabled

 

二、安裝和配置 kvm 環境

1. 安裝 kvm 虛擬化相關軟件包

[root@kvm ~]# yum install -y kvm virt-* libvirt bridge-utils qemu-img

2. 查看 kvm 模塊是否加載到內核

[root@kvm ~]# lsmod | grep kvm_intel kvm_intel 53484  0 kvm 316506  1 kvm_intel

如果沒有加載,可以嘗試執行命令:modprobe kvm_intel ,不行的話,試試重啟宿主機。

3. 設置相關網絡

設置方式一:網橋模式

[root@kvm ~]# cd /etc/sysconfig/network-scripts/ [root@kvm ~]# cp ifcfg-eth0 ifcfg-br0 [root@kvm ~]# vi ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=none BRIDGE=br0 [root@kvm ~]# vi ifcfg-br0 DEVICE=br0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPADDR=172.16.1.8 PREFIX=24 GATEWAY=172.16.1.1 DNS1=114.114.114.114 NAME=br0 # 重啟網絡 [root@kvm ~]# service network restart

設置方式二:NAT 模式

暫 略。

4. 啟動 libvirtd 相關服務

[root@kvm ~]# /etc/init.d/libvirtd start [root@kvm ~]# /etc/init.d/messagebus restart

遇到錯誤:

[root@vip ~]# /etc/init.d/libvirtd start libvirtd: relocation error: libvirtd: ... version ... libdevmapper.so.1.02     [失敗]

解決:

[root@kvm ~]# yum upgrade device-mapper-libs

結果:

[root@kvm ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29181c75 no eth0 virbr0 8000.525400c207c7   yes         virbr0-nic

 

三、安裝虛擬機

1. 創建虛擬機鏡像

關於虛擬機鏡像,有很多種類型:raw、qcow2、vmdk等,我們推薦使用 qcow2 格式的鏡像,因為 qcow2 格式的鏡像支持快照,使用的比較廣泛。在創建虛擬機之前需要手動去創建 qcow2 格式的鏡像磁盤文件,以供安裝虛擬機時使用。按照如下命令進行創建:

qemu-img create -f qcow2 -o preallocation=metadata /data/kvm/liwei01.qcow2 50G

2. 執行虛擬機的安裝

安裝方式一:通過網絡鏡像安裝,文本控制台,無vnc支持。

virt-install --name liwei01 --ram 1024 --vcpus 1 \ -f /data/kvm/liwei01.qcow2  --os-type linux \ --os-variant rhel6 --network bridge=br0 \ --graphics none --console pty,target_type=serial \ --location 'http://mirrors.163.com/centos/6.8/os/i386/' \ --extra-args 'console=ttyS0,115200n8 serial'

安裝方式二:通過網絡鏡像安裝,支持 vnc ,默認無文本控制台。

virt-install --name liwei01 --ram 1024 --vcpus 1 \ -f /data/kvm/liwei01.qcow2  --os-type linux \ --os-variant rhel6 --network bridge=br0 \ --graphics vnc,listen=0.0.0.0,port=5920 \ --location 'http://mirrors.163.com/centos/6.8/os/i386/'

安裝方式三:通過 iso 鏡像實現本地安裝,支持 vnc ,無文本控制台。

virt-install --name liwei01 --ram 1024 --vcpus 1 \ -f /data/kvm/liwei01.qcow2  --os-type linux \ --os-variant rhel6 --network bridge=br0 \ --cdrom CentOS-6.8-i386-minimal.iso \ --graphics vnc,listen=0.0.0.0,port=5920

安裝方式四:通過基礎鏡像模板快速安裝(拷貝)

創建鏡像文件:

[root@kvm ~]# qemu-img create -f qcow2 /data/kvm/liwei.qcow2 50G
# 通過 liwei.qcow2 安裝虛擬機 ... 安裝完畢.
[root@kvm ~]# cp /data/kvm/liwei.qcow2 /data/kvm/liwei01.qcow2

安裝命令:

# 以拷貝的 liwei01.qcow2 為模板進行安裝,安裝方式是從 liwei01.qcow2 鏡像啟動
[root@kvm ~]# virt-install --name liwei01 --ram 1024 --vcpus=1 \ --disk /data/kvm/liwei01.qcow2,format=qcow2,bus=virtio \ --network bridge=br0 --graphics vnc,listen=0.0.0.0,port=5904 \ --boot hd

說明:

本方式創建 img 鏡像的時候沒有指定 preallocation=metadata 選項,這樣存儲文件空間顯示比較小,方便拷貝,不加這個選項時,在 virt-install 時候需要在 --disk 選項后邊加上 bus=virtio,如果不加在安裝操作系統的時候似乎是識別不出來磁盤空間,會提示磁盤空間不足。采用這種方式安裝的速度非常快,其實就是從已經存在的操作系統鏡像啟動虛擬機並 define 一個新的虛擬機 liwei01,可以通過腳本快速創建出多個相同配置的虛擬機。當然可以在基礎鏡像中安裝公共的軟件包和設置相同的配置,這樣后續基於這個 img 安裝的虛擬機都有類似的配置,省去重復安裝軟件包的麻煩。

安裝方式五:通過基礎鏡像模板快速安裝(共享)

創建鏡像:

[root@kvm ~]# qemu-img create -f qcow2 -o preallocation=metadata /data/kvm/liwei.qcow2 50G
# 通過 liwei.qcow2 安裝虛擬機 ... 安裝完畢.
# 以 liwei.qcow2 鏡像為模板創建 liwei01.qcow2 鏡像
[root@kvm ~]# qemu-img create -f qcow2 -o backing_file=liwei.qcow2 liwei01.qcow2 10G

安裝命令:

[root@kvm ~]# virt-install --name liwei01 --ram 1024 --vcpus=1 \ --disk /data/kvm/liwei01.qcow2,format=qcow2,bus=virtio \ --network bridge=br0 --graphics vnc,listen=0.0.0.0,port=5904 \ --boot hd

說明:

在創建鏡像 liwei01.qcow2 指定了 backing_file=liwei.qcow2 選項,表示以 liwei.qcow2 為后端鏡像,以后對虛機 liwei01 的所有的寫操作都會記錄到 liwei01 鏡像,實際操作系統是在 liwei.qcow2 鏡像中,liwei.qcow2 鏡像是只讀的。也就是說后續以 liwei.qcow2 鏡像為后端的虛機都共享這個鏡像,而具體某個虛機的寫操作內容都要記錄到對應自己的鏡像文件中去。注意和方式4的區別。

3. 通過 vnc 或 文本控制台進行系統安裝

方式一:通過文本控制台進行管理安裝  virsh console liwei01 后續也能用此方式進行登陸管理虛擬機。
方式二:通過 vnc 客戶端進行連接,    virsh vncdisplay liwei01 :20 客戶端通過url: 172.16.1.8:20 進行連接。
方式三:同方式二一樣,具體安裝過程與普通操作系統安裝過程一樣,過程略。

 

四、kvm 虛擬機常見的基礎操作命令

開機:virsh start vm
關機:virsh shutdown vm 如果不生效,需要在 vm 中執行:yum install -y acpid
強關:virsh destroy vm
刪除:virsh undefine vm
定義:virsh define vm
掛起:virsh suspend vm
恢復:virsh resume vm

虛擬機列表:virsh list
包含關機的虛機:virsh list --all
設置自動啟動:virsh autostart vm
關閉自動啟動:virsh autostart --disable vm
登陸虛機控制台:virsh console vm  # 只對指定了console的虛機才管用,方式一
退出虛機控制台:ctrl + ]

五、虛擬機的克隆

將虛擬機 liwei01 克隆為虛擬機 liwei02

[root@kvm ~]# virt-clone --original liwei01 --name liwei02 --file /data/kvm/liwei02.qcow2

注意:克隆前需要先關閉虛擬機;克隆完畢,一般需要設置虛擬機的網絡。

 

六、創建虛擬機的快照

1. 創建快照的條件

  • 虛擬機是關機狀態。
  • 虛擬機鏡像格式是 qcow2。

2. 創建快照

[root@kvm ~]# virsh snapshot-create liwei

3. 查看快照列表

[root@kvm ~]# virsh snapshot-list liwei # 可以通過 qemu-img 查看鏡像的快照信息 [root@kvm ~]# qemu-img info /data/kvm/liwei.img

4. 切換快照

[root@kvm ~]# virsh snapshot-revert liwei 1477285698

5. 查看當前快照

[root@kvm ~]# virsh snapshot-current liwei

6. 刪除快照

[root@kvm ~]# virsh snapshot-delete liwei 1477285698

7. 快照文件存儲位置

/var/lib/libvirt/qemu/snapshot

 

七、虛擬機磁盤擴容和添加磁盤

1. 虛擬機擴容磁盤,給現有磁盤增加容量

[root@kvm ~]# qemu-img resize /data/kvm/liwei.qcow2 +5G # 重啟虛擬機 reboot虛機不生效 [root@kvm ~]# virsh destroy liwei [root@kvm ~]# virsh start   liwei

在虛擬機中使用 fdisk -l 查看,通過觀察block 塊 id 可以發現存儲空間多了,還必須將多余部分分區、格式化使用,默認使用 lvm 。

2. 給虛擬機添加磁盤

按照如下步驟:

  • 關閉虛擬機
  • 使用 qemu-img 創建磁盤鏡像
  • 使用 virsh edit liwei 編輯虛機配置文件,添加一條磁盤記錄,適當修改信息
  • 虛擬機開機 -> fdisk -> 格式化 -> ok.

注:可以嘗試不分區直接格式化,也可以嘗試使用 lvm 。

 

八、使用虛擬磁盤恢復虛擬機

思路:首先得有鏡像文件(已有) + xml 配置文件

[root@kvm ~]#  virsh dumpxml liwei > /etc/libvirt/qemu/liwei01.xml # 編輯配置文件,修改為適當的值 # 添加定義 virsh define /etc/libvirt/qemu/liwei01.xml virsh list --all   #即可查到該虛擬機

 

九、調整CPU、內存規格

如果要調整的 cpu 核數和內存超過安裝虛機時指定的最大值,則需要關閉虛機來修改最大值,動態調整的值不能超過設置最大值,擦,一般使用值和最大值都是保持一致,一起修改。所以在線動態修改沒什么意義,推薦直接修改配置文件就 OK。

[root@kvm ~]# virsh edit liwei01 <memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>

重啟虛機 liwei01 就ok.

 

十、調整虛擬機網卡

1. 添加虛擬機網卡

# 臨時命令生效 [root@kvm ~]# virsh attach-interface liwei --type bridge --source br0 # 修改虛機配置文件 [root@kvm ~]# virsh dumpxml liwei > /etc/libvirt/qemu/liwei.xml [root@kvm ~]# virsh define /etc/libvirt/qemu/liwei.xml 

2. 刪除虛擬機網卡

[root@kvm ~]# virsh detach-interface liwei --type bridge --mac 52:54:00:14:86:cf

3. 指定網卡類型

網卡默認類型是 rtl 品牌的網卡,這里設置為 intel 網卡 e1000 系列。修改如下配置文件即可。

<interface type='bridge'>
  <mac address='52:54:00:b5:68:a4'/>
  <source bridge='br0'/>
  <model type='e1000'/> # 添加設置字段
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

使用 virsh 重啟虛擬機,在虛擬機中查看:

[root@localhost ~]# lspci | grep "Ethernet"
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03)

 

十一、虛擬機的遷移

幾個步驟:

1.關閉虛擬機
2.拷貝鏡像文件
3.拷貝配置文件
4.virsh define vm

 

待更新......

 


免責聲明!

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



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