1、KVM環境的搭建node
1.安裝VMware(略)python
2.在VMware中安裝Linux系統(略,Ubuntu16.04)linux
打開支持虛擬化編程
網絡選擇橋接模式ubuntu
3.安裝qemu網絡
apt-get install qemuapp
4.下載內層虛擬機須要用到的鏡像(Ubuntu14.04)dom
鏡像下載地址:https://www.ubuntu.com/download/alternative-downloadsssh
5.安裝ssh工具
apt-get install ssh
6.修改/etc/ssh/sshd_config文件
PermitRootLogin yes
--------------------------(將如下部分添加至文件末尾)
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour256,arcfour,blowfish-cbc,cast128-cbc
MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,curve25519-sha256@libssh.org
-------------------------------------------
7.新建kvmtest文件夾
mkdir kvmtest
8.將鏡像使用ssh傳輸工具傳送到kvmtest
9.安裝libvirt
apt-get update
apt-get install libvirt-dev libvirt-bin
10.安裝virt-manager
apt-get install virt-manager
2、建立一臺虛擬機
1.建立安裝盤
①切換到kvmtest文件夾下建立安裝盤
②執行命令:qemu-img create -f qcow2 ubuntu14.qcow2 10G
2.建立虛擬機
virt-install --virt-type kvm --name ubuntu01 --ram 1024 \
--vcpus 1 \
--cdrom=你的虛擬機鏡像所在的位置 \
--disk 建立的磁盤所在的位置,format=qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel6
(此方法安裝事後須要使用VNC或virt-manager工具進入圖形界面進行安裝)
3.查看虛擬機
①執行命令 virsh list –all
(因爲以前我建立過,因此存在四臺虛擬機)
4.virt-manager的使用
執行命令:virt-manager
5.第一臺虛擬機建立成功
3、根據xml文件來建立虛擬機
1.找到xml文件
進入到/etc/libvirt/qemu目錄下。咱們能夠看到有xml文件。
在這個xml文件能夠看到裏面有虛擬機名字配置,磁盤大小配置等。
2.拷貝修改xml文件
①經過複製一份xml文件咱們就能夠建立另一臺虛擬機
②執行命令:cp ubuntu.xml ubuntu01.xml
③修改內容:使用超級用戶對xml文件進行修改(name部分和uuid)
④定義一臺虛擬機:使用virsh define + xml文件的絕對路徑
如此咱們便定義了另一臺虛擬機,可使用 list –all命令查看
⑤開啓虛擬機:virsh start +虛擬機名稱
⑥關閉虛擬機:virsh shutdown +虛擬機名稱
⑦移除虛擬機:移除虛擬機經過virsh undefined +虛擬機名稱(刪除了xml文件)
4、經過python控制kvm
1.配置python環境
①linux系統中帶有python2,而我所使用的是python3,因此要另外安裝python3,
能夠去官網下載壓縮包,解壓,編譯執行的方式進行安裝。
2.安裝IDE(可選)
我安裝了pycharm(社區版,免費),方便編程使用
3.安裝libvirt-python
須要安裝在python3上安裝python3-libvirt實現python語言與libvirt的鏈接
①安裝
②測試:輸入python3,輸入import libvirt 不報錯則說明安裝成功
4.下載python-libvirt API文檔
參照文檔編寫程序
①libirt API:https://libvirt.org/
5.編寫程序
......
5、導入tkinter庫進行圖形化界面的設計
tkinter的使用再也不描述......
代碼:(因爲初版採用控制檯輸出沒有界面,改進時沒有對代碼進行完全的改進,因此此代碼中有不少多餘部分,且功能不太完善,僅供參考)
#encoding=utf-8 import libvirt import tkinter as tk def close_connection():#關閉鏈接 try: conn.close() except: print("--關閉鏈接失敗--") return 1 print('--成功關閉鏈接--') def list_connection():#主機信息 print("---------主機信息---------") nodeinfo = conn.getInfo() # 獲取虛擬化主機信息 print('模型: ' + str(nodeinfo[0])) # cpu模型 print('內存大小: ' + str(nodeinfo[1]) + 'MB') # 內存 print('CPU數量: ' + str(nodeinfo[2])) # cpu數量 print('虛擬類型: ' + conn.getType()) # 虛擬化類型 uri = conn.getURI() # 目前連接的uri print('鏈接URI: : ' + uri) mem = conn.getFreeMemory() print("空閒內存: " + str(mem) + " bytes.") print("-------------------------") lableInit.config(text="--------主機信息--------\n" "模型:{}\n" "內存大小:{}MB\n" "CPU數量:{}個\n" "虛擬類型:{}\n" "鏈接URI:{}\n" "內存空間:{}bytes\n" .format(str(nodeinfo[0]),str(nodeinfo[1]),str(nodeinfo[2]),conn.getType(),uri,str(mem))) def show_machine():#顯示虛擬機狀態 #開啓的域 vms_dict={} domain_list=conn.listDomainsID() for vm in domain_list: vms_dict[str(vm)]=conn.lookupByID(vm).name() print(""" 處於開啓狀態的虛擬機 ---------------- ID\tName ----------------""") if vms_dict: for id_part,name_part in vms_dict.items(): print("{}\t{}".format(id_part,name_part)) #lableInit.config(text="開啓狀態:".format(vms_dict)) else: print("None") print("----------------") #關閉的域 global vmd_list vmd_list=[] for i in conn.listDefinedDomains(): vmd_list.append(i) print(""" 處於關閉狀態的虛擬機 ---------------- Name ----------------""") if vmd_list: for name_part in vmd_list: print("{}".format(name_part)) lableInit.config(text="開啓狀態:{}\n" "關機狀態:{}\n".format(vms_dict,vmd_list)) else: print("None") print("----------------") #lableInit.config(text="虛擬機信息已在終端顯示") #--------對虛擬機域進行操做--------- def temp(): name = entryName.get() f = open('/etc/libvirt/qemu/{}.xml'.format(name)) # xml文件須要事先準備好 xml = f.read() conn.createXML(xml) f.close() lableInit.config(text="臨時虛擬機 {} 建立完成".format(name)) def define(): name=entryName.get() f=open('/etc/libvirt/qemu/{}.xml'.format(name))#xml文件須要事先準備好 xml=f.read() dom = conn.defineXML(xml) f.close() lableInit.config(text="虛擬機 {} 建立成功".format(name)) def undefine(): dom = conn.lookupByName(entryName.get()) dom.undefine() print("虛擬機 {} 已取消定義".format(entryName.get())) lableInit.config(text="虛擬機 {} 已取消定義".format(entryName.get())) def suspand(): dom = conn.lookupByName(entryName.get()) dom.suspend() print("虛擬機 {} 暫停成功".format(entryName.get())) lableInit.config(text="虛擬機 {} 已暫停".format(entryName.get())) def resume(): dom = conn.lookupByName(entryName.get()) dom.resume() print("虛擬機 {} 運行成功".format(entryName.get())) lableInit.config(text="虛擬機 {} 繼續運行".format(entryName.get())) def destroy(): dom = conn.lookupByName(entryName.get()) dom.destroy() print("虛擬機 {} 銷燬成功".format(entryName.get())) lableInit.config(text="虛擬機 {} 已銷燬".format(entryName.get())) def start(): dom = conn.lookupByName(entryName.get()) dom.create() print("虛擬機 {} 啓動成功".format(entryName.get())) lableInit.config(text="虛擬機 {} 已啓動".format(entryName.get())) def shutdown(): dom = conn.lookupByName(entryName.get()) dom.shutdown() print("虛擬機 {} 關閉成功".format(entryName.get())) lableInit.config(text="虛擬機 {} 已關閉".format(entryName.get())) #------------菜單控制------------- def test(): name=str(entryName.get()) print(name) #-------------------------------- conn = libvirt.open("qemu:///system")#連接 top=tk.Tk() top.title("虛擬機管理平臺") #top.geometry('602x')#窗體大小 lableTitle = tk.Label(top,bg='#00BFFF',fg="#EEE8AA",font = 'Helvetica -24 bold',text="虛 擬 機 管 理 平 臺",width=46) lableTitle.grid(row=0,column=0,columnspan=2,ipady=10) #------------------------------- labelHello = tk.Label(top,fg='#c71585',font = 'Helvetica -18 bold', text = "請輸入虛擬機的名稱:") labelHello.grid(row=1,column=0,padx=2,pady=6,sticky='E') entryName=tk.Entry(top,width=24) entryName.grid(row=1,column=1,padx=2,sticky='W') #-------操做------ showHost =tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="顯示主機信息",command=list_connection) showHost.grid(row=2,column=0,padx=4,pady=4,sticky='E') showVM =tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="顯示虛擬機狀態",command=show_machine) showVM.grid(row=2,column=1,padx=4,pady=4,sticky='W') tempVM =tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold',text="建立虛擬機",command=temp) tempVM.grid(row=3,column=0,padx=4,pady=4,sticky='E') destroyVM = tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="銷燬虛擬機", command=destroy) destroyVM.grid(row=3,column=1,padx=4,pady=4,sticky='W') suspandVM =tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold',text="暫停虛擬機",command=suspand) suspandVM.grid(row=4,column=0,padx=4,pady=4,sticky='E') resumeVM = tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="運行虛擬機", command=resume) resumeVM.grid(row=4,column=1,padx=4,pady=4,sticky='W') startVM = tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="開啓虛擬機", command=start) startVM.grid(row=5,column=0,padx=4,pady=4,sticky='E') shutdownVM = tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="關閉虛擬機", command=shutdown) shutdownVM.grid(row=5,column=1,padx=4,pady=4,sticky='W') defineVM =tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold',text="建立虛擬機" "(永久建立)",command=define) defineVM.grid(row=6,column=0,padx=4,pady=4,sticky='E') undefineVM =tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold',text="刪除虛擬機" "(取消定義)",command=undefine) undefineVM.grid(row=6,column=1,padx=4,pady=4,sticky='W') lableInitTitle = tk.Label(top,bg='black',font = 'Helvetica -13 bold',text="* * * 系 統 反 饋 信 息 * * *",width=85,fg="blue") lableInitTitle.grid(row=7,column=0,columnspan=2,ipady=10) lableInit = tk.Label(top,bg='black',font = 'Helvetica -13 bold',text="NULL",width=85,fg="white") lableInit.grid(row=8,column=0,columnspan=2,ipady=10) photo=tk.PhotoImage(file="/home/ldw/kvmtest/copyright.png") labelphoto=tk.Label(image=photo) labelphoto.image=photo labelphoto.grid(row=9,column=0,columnspan=2) #quitVM = tk.Button(top,text="退出管理系統",command=close_connection()) #quitVM.pack() top.mainloop()
界面展現: