libvirt php,libvirt虚拟化开发简介
libvirt是一個虛擬化開發的工具庫,提供了底層的kvm,xen,vmware esx等虛擬化的統一封裝。可以通過libvirt提供的api對不同的底層實現進行同一的管理。除了原生的c api,還有c#, go, java, ocaml. perl, python, php, ruby的api,用戶可自主選擇自己熟悉的語言。
要使用libvirt首先要安裝libvirtd,這是一個后臺守護進程,負責管理虛擬機系統以及和客戶端交互。libvirt還包含了virsh命令行工具,供用戶通過shell手動管理。另外,還可以通過圖形界面方式進行管理,該工具是virt-manager,如果您想要通過python的api進行開發,需要安裝python3-libvirt或python-libvirt。在debian下,可通過下列指令安裝這些包:
apt-get install libvirt-daemon libvirt-daemon-system libvirt-clients python3-libvirt virt-manager
啟動libvirtd:
systemctl start libvirtd
接下來我們就可以通過virt-manager創建一個虛擬機。熟悉vmware或者virtualbox的同學,可以看到virt-manager和這些軟件很類似,安裝系統就不再介紹了。
系統安裝完成之后,我們就可以通過virsh工具進行基本的操作了。運行virsh,回車,進入virsh的命令行,可通過help查看virsh支持的操作。
virsh # help
Grouped commands:
Domain Management (help keyword 'domain'):
attach-device attach device from an XML file
attach-disk attach disk device
attach-interface attach network interface
autostart autostart a domain
blkdeviotune Set or query a block device I/O tuning parameters.
blkiotune Get or set blkio parameters
blockcommit Start a block commit operation.
......
通過查看這些命令,我們了解到libvirt提供了客戶機的管理,客戶機監控,主機監控,設備管理,網絡管理,快照管理和存儲管理等功能。由于有virt-manager工具,很多功能我們都可以通過圖形化界面方式完成,但是我們可以通過virsh快速獲取某個主機某項信息,方便開發時對比測試我們的代碼是否正確。
libvirt中的一些基本概念:
主機連接 主機連接是客戶端和libvirtd之間的通道,該連接既可以訪問運行在本地的libvirtd程序,也可以訪問運行在網絡上其他主機上的libvirtd。
客戶域 是一個運行著的虛擬機或者是可以生成一個虛擬機的配置文件。每個客戶域都有一個唯一的ID,name和UUID
虛擬網絡 為客戶機提供網絡訪問
存儲池 存儲池用來組織和管理存儲卷
存儲卷 用來為客戶機提供存儲設備(磁盤)
主機設備 可以給虛擬機分配客戶機上設備
libvirt-common:通用的宏和枚舉定義
libvirt-domain-snapshot:客戶機快照管理
libvirt-domain:客戶域管理
libvirt-event:事件管理
libvirt-host:宿主機信息查看
libvirt-interface:網絡接口管理(網卡)
libvirt-network:網絡管理
libvirt-nodedev:設備管理
libvirt-nwfilter:網絡過濾
libvirt-secret:密鑰管理
libvirt-storage:存儲管理
libvirt-stream:數據流
virterror:錯誤處理
python api簡要功能示例:
獲取所有的客戶機列表,詳細參考:
from __future__ import print_function
import sys
import libvirt
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
domainIDs = conn.listDomainsID()
if domainIDs == None:
print('Failed to get a list of domain IDs', file=sys.stderr)
print("Active domain IDs:")
if len(domainIDs) == 0:
print(' None')
else:
for domainID in domainIDs:
print(' '+str(domainID))
conn.close()
exit(0)
客戶機內存信息統計,詳細參考:
from __future__ import print_function
import sys
import libvirt
domName = 'Fedora22-x86_64-1'
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
dom = conn.lookupByID(5)
if dom == None:
print('Failed to find the domain '+domName, file=sys.stderr)
exit(1)
stats = dom.memoryStats()
print('memory used:')
for name in stats:
print(' '+str(stats[name])+' ('+name+')')
conn.close()
exit(0)
官方有更多參考示例,這里不再過多介紹。我個人接觸libvirt是因為要監控虛擬機的運行狀態,性能統計,網絡信息等的監控,所以對于快照,網絡管理,存儲管理等沒有通過python接口進行過實踐,對其了解的也不適特別多。下面是我認為一些有用的鏈接,可供參考:
virsh命令參考 詳細講解virsh的使用,如果對于xml的定義描述不確定時,可參考virsh的代碼
XML格式 libvirt api使用的交互方式
API參考 libvirt提供的C接口,如果你需要的功能在這里找不到,那就是沒有了
希望通過本片文章能讓你對libvirt的開發有一個簡單的認識。
總結
以上是生活随笔為你收集整理的libvirt php,libvirt虚拟化开发简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为H3CNE认证题库、教材-热门下载帖
- 下一篇: 动态规划算法php,php算法学习之动态