前提條件:git
支持硬件輔助虛擬化(Intel VT-x或AMD-V)的主機一臺。github
已安裝好的CentOS7,默認的最小安裝便可,配置網絡使之能夠訪問外網。vim
準備Windows 2008 R2安裝光盤鏡像windows
配置過程:bash
注:如下配置中過程當中,eno16777736爲主機外部網絡所對應的網卡,IP地址爲192.168.1.9,配置過程當中,請根據實際狀況修改網絡
環境準備dom
安裝相關軟件包socket
yum install -y vim wget net-tools bash-completion qemu-kvm libvirt virt-install systemctl start libvirtd.service建立橋接網絡ide
cat > /etc/libvirt/qemu/networks/bridge.xml << EOF <network> <name>bridge</name> <bridge name="br-ex"/> <forward mode="route" dev="eno16777736"/> <ip address="192.168.1.9" netmask="255.255.255.0"/> </network> EOF virsh net-define /etc/libvirt/qemu/networks/bridge.xml virsh net-autostart bridge配置網卡自動添加到橋接器工具
cp /etc/sysconfig/network-scripts/ifcfg-eno16777736 /etc/sysconfig/network-scripts/ifcfg-br-ex sed -i -e '/^NAME=/d' -e '/^DEVICE=/d' -e 's/^TYPE=.*/TYPE=Bridge/' -e '/^UUID=/d' -e '/^HWADDR=/d' /etc/sysconfig/network-scripts/ifcfg-br-ex echo "DEVICE=br-ex" >> /etc/sysconfig/network-scripts/ifcfg-br-ex sed -i -e '/^IPADDR/d' -e '/^NETMASK/d' -e '/^PREFIX/d' -e '/^GATEWAY/d' -e '/^DNS/d' /etc/sysconfig/network-scripts/ifcfg-eno16777736 echo "BRIDGE=br-ex" >> /etc/sysconfig/network-scripts/ifcfg-eno16777736重啓系統使配置生效
reboot確認"bridge" 網絡已啓動
virsh net-list brctl show關閉防火牆或者開放5900+N端口(要從客戶端鏈接虛擬機控制檯,默認從5900端口開始,每一個虛擬機實例佔用一個端口號,也能夠指定虛擬機實例所使用的端口)
systemctl disable firewalld.service ; systemctl stop firewalld.service建立鏡像製做目錄
mkdir /opt/p_w_picpath ; cd /opt/p_w_picpath下載virtio驅動軟盤
wget -O virtio-win-drivers.vfd https://launchpad.net/kvm-guest-drivers-windows/20120712/20120712/+download/virtio-win-drivers-20120712-1.vfd
安裝Windows 2008 R2系統
建立qcow2格式的虛擬磁盤
qemu-img create -f qcow2 win2k8.qcow2 10G將系統安裝鏡像文件上傳至/opt/p_w_picpath(此過程不在本文描述範圍,略過),並命名爲 win2k8.iso。若是使用其餘文件名,請在後續操做中自行修改鏡像文件名。
若是隻有光盤沒有鏡像,能夠將光盤放入到光驅,經過如下命令將光盤製做爲iso鏡像。
dd if=/dev/sr0 of=/opt/p_w_picpath/win2k8.iso建立虛擬機實例。如下命令建立一個Win2k8虛擬機實例,配備1G內存,單核CPU,使用virtio網卡和磁盤適配器,掛載win2k8.iso和virtio-win-dirvers.vfd,遠程控制使用spice(自動分配端口號,默認從5900開始)
virt-install --connect qemu:///system --virt-type=kvm \ --name win2k8 --ram 1024 --vcpus 1 --arch=x86_64 \ --network network=bridge,model=virtio \ --disk win2k8.qcow2,format=qcow2,device=disk,bus=virtio \ --cdrom win2k8.iso \ --disk virtio-win-drivers.vfd,device=floppy \ --graphics spice,listen=0.0.0.0 --video qxl --channel spicevmc \ --os-type windows --os-variant win2k8出現如下兩條告警能夠忽略,後續將從Windows客戶端進行鏈接,無需使用 virt-viewer
若是沒有安裝 virt-viewer,會出現警告信息 WARNING Unable to connect to graphical console: virt-viewer not installed.
若是在命令行模式下運行此命令,會出現警告信息 WARNING **: Could not open X display
在本地Windows上安裝SPICE客戶端(下載連接 https://fedorahosted.org/released/virt-viewer/),Linux系統可在GUI界面下安裝virt-viewer
安裝完成後,運行 Remote viewer
執行如下命令獲取鏈接虛擬機實例所用的端口號,默認從5900開始
virsh domdisplay win2k8在鏈接地址欄中填入 spice://host地址:5900 注意將查詢到的地址中的localhost替換爲主機實際的IP地址,而不是虛擬機的IP地址
點擊 Connect,便可打開遠程虛擬機的安裝界面
由於使用了virtio半虛擬化驅動器,2008 R2和Win7 中默認沒有該驅動,因此須要手動加載其驅動
從軟驅中加載storage驅動(這裏顯示2003R2,一樣可用於2008R2。多是軟驅容量有限,製做者沒有加入太多內容)
而後點擊下一步,稍等片刻後便可看到前面分配的磁盤空間了。
接下來的系統安裝步驟省略。安裝完成以前重啓會致使spice鏈接斷開,從新鏈接便可,安裝完成以後重啓就不會再斷開了
系統安裝完成後,安裝網卡驅動(軟驅中的驅動)。配置虛擬機網絡,使其與外部網絡連通。
下載virtio驅動和qxl顯示驅動。(網絡已經配置好,也能夠使用RDP鏈接虛擬機實例,方便複製連接和文件)
(備用連接 http://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-81.iso)
http://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-0.74.exe
http://www.spice-space.org/download/windows/qxl/qxl-0.1-21/qxl_8k2R2_x64.zip
安裝spice-guest-tools-0.74.exe,安裝qxl顯卡驅動
安裝完成以後,設備驅動以下圖
這時就虛擬機實例和主機之間就能夠共享剪切板了(基於Spice Agent),可以複製網址、截屏等文本和圖像信息,但不能複製文件。
安裝更新,刪除臨時文件。
配置系統與OpenStack整合
下載cloudbase-init工具並安裝 https://github.com/cloudbase/cloudbase-init
選擇執行Sysprep封裝
將網卡配置修改成DHCP,刪除臨時文件(包括前面下載的驅動和安裝文件),關機。
此程序安裝完畢後生成一個「Cloud Initialization Service」服務,下次啓動時,此服務會自動啓動。
它會從OpenStack接收元數據(http://169.254.169.254),而後執行一系列初始化操做,
設置主機名;
建立或更新本地用戶(安裝過程當中所指定的用戶名,默認爲Admin),添加他的本地組(多個組之間用半角逗號分隔),並注入密碼;
配置網絡(前面安裝過程當中所指定的的網卡);
在用戶目錄下建立包含SSH密鑰的authorized_keys文件(由元數據提供,也就是建立實例時所選擇的密鑰對);
執行建立實例時所指定的腳本(輸入腳本時,第一行寫入 rem cmd 爲批處理命令,第一行寫入 #ps1 爲PowerShell腳本)
詳細信息可參考此連接 http://www.cloudbase.it/cloud-init-for-windows-instances/
壓縮虛擬機磁盤
qemu-img convert -c -p -O qcow2 /opt/p_w_picpath/win2k8.qcow2 /opt/p_w_picpath/win2k8r2.qcow2其中,-c表示使用壓縮,-p表示執行過程當中顯示進度,-O指定輸出格式爲qcow2
對比先後文件大小
上傳到glance
將虛擬機磁盤文件拷貝到控制節點,執行如下命令完成鏡像上傳
glance p_w_picpath-create --name "Windows_2008_R2" --is-public true --disk-format qcow2 --container-format bare --file /opt/p_w_picpath/win2k8r2.qcow2
排錯:
故障現象:
執行virsh net-list時,出現如下錯誤提示
error: failed to connect to the hypervisor
error: no valid connection
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
問題緣由:
libvirtd服務未啓動
解決方法:
執行 systemctl start libvirtd.service 啓動該服務便可。
可經過 systemctl status libvirtd.service 檢查該服務運行狀態,確保服務處於active (running) 狀態
systemctl start libvirtd.service systemctl status libvirtd.service