概述
虛擬化作為雲端運算的基礎,是目前一個重要的趨勢。通過虛擬化可以提高 IT 資源和應用程式的效率和可用 性。基於核心的虛擬機器 KVM 在 2008 年被 RedHat 收購後,在 IBM 和 RedHat 的聯合推動下得到了全面的發展。最新發行 的 RHEL 版本中已經全面支援了 KVM 虛擬機器,並整合了一整套基於 libvirt 的管理工具 (virsh/virt-top/virt- install/virt-manager 等 )。虛擬化領域的主要廠商 VMware 的 vSphere 虛擬環境提供的 vSphere Client 讓使用者可通過 直觀的圖形化方式管理 vCenter/ESX server/datacenter/cluster/VM 等對象。但是當被管理對象數量龐大時,使用 virt -manager 或者 vSphere Client 的圖形化方式來處理一些日常事務就顯得費時費力了。為此使用者可以通過相應的 API 來編 寫程式管理這些日常事務。本文將介紹 libvirt API 和 vSphere SDK for Perl 在系統管理方面的應用。本文將對於開發 人員、系統管理員、系統測試人員有所協助。
使用 libvirt 管理 KVM 環境
libvirt 是一套實現 Linux 虛 擬化功能的開源 API,旨在提供一種單一的方式管理多種不同的虛擬化方案。目前 libvirt 支援如下的 hypervisor:
KVM/QEMU
Xen
LXC
OpenVZ
VirtualBox
VMware ESX, workstation, player
Microsoft Hyper-V
伴隨著 libvirt,RHEL 最新的發行版還包含了一系列基於 libvirt 的工具用於簡化虛擬機器的維護管理:
virt-install: 用於建立虛擬機器
virsh: 互動式/批處理 shell,可以用於完成虛擬環境的日 常管理工作
virt-manager: 一個圖形化的介面 , 用於 Hypervisor 及其虛擬機器的管理
virt-clone: 用於虛擬機器複製
virt-viewer: 安全連線虛擬機器的圖形控制台工具
雖然 libvirt 本身由 C 開發 , 它提供了多種主流語言的綁定。系統管理員可以自由選擇他們熟悉的語言,如 Python、Perl、 Ruby、Java、PHP 等 .
使用 virsh 管理 KVM 虛擬機器
基於 libvirt 的管理工具中最常用的是 virsh。virsh 命令的格式如下:
virsh [OPTION] COMMAND ARG
在不提供任何參數時,virsh 提供一個互動式 shell。管 理員可以通過 virsh 編寫一些簡單的 shell 指令碼完成虛擬機器/網路/儲存的配置。下面的程式碼片段顯示了 virsh 命令的使 用方法。
使用 ssh 協議串連到 KVM hypervisor:
[root@BJGSSLA]# virsh connect qemu+ssh://9.9.9.9/system
root@9.9.9.9's password:
列舉域 (guest VM):
[root@BJGSSLA]# virsh list
Id Name State
------------ --------------
32 rhkvm running
33 rhkvm01 running
34 xpkvm running
列舉域的詳細資料:
[root@BJGSSLA]# virsh dominfo rhkvm
Id: 32
Name: rhkvm
UUID: 9d37e044-b134-c923-bbe6-0db40707ff9b
OS Type: hvm
State: running
CPU(s): 1
CPU time: 92.6s
Max memory: 524288 kB
Used memory: 524288 kB
Persistent: yes
Autostart: disable
Managed save: yes
掛起,繼續,重啟域:
[root@BJGSSLA]# virsh suspend rhkvm
Domain rhkvm suspended
[root@BJGSSLA]# virsh resume rhkvm
Doamin rhkvm resumed
[root@BJGSSLA]# virsh reboot rhkvm
Domain rhkvm is being rebooted
快照管理:
[root@BJGSSLA]# virsh snapshot-create rhkvm
Domain snapshot 1336311489 created
[root@BJGSSLA]# virsh snapshot-list rhkvm
Name Create Time State
------------------------------------------------- ----
1336311489 2012-05-06 09:38:09 -0400 running
[root@BJGSSLA]# virsh snapshot-revert rhkvm 1336311489
註:在 KVM 虛擬環境中物理宿主機被稱為節點 (node),每個 guest 被稱為域 (domain) 。
基於 libvirt API 編寫 Perl 指令碼
virsh 可以勝任大部分日常 的工作,更複雜的需求可以通過 libvirt API 編程實現。本節將介紹基於如何使用 libvirt for Perl 來獲得更加精細的 虛擬機器資訊。
CPAN 上的 Sys::Virt 模組即為 libvirt 的 Perl 綁定。首先根據 KVM 環境中 libvirt 的版本下載 、編譯、安裝對應的 Sys-Virt 模組。本文的實驗環境中使用 0.9.4 版 libvirt, 因此使用 Sys-Virt-0.9.4:
http://search.cpan.org/~danberr/Sys-Virt-0.9.4/
編譯安裝 Sys::Virt 模組:
[root@BJGSSLA]# perl Makefile.PL
[root@BJGSSLA]# make
[root@BJGSSLA]# make install