簡介
OVF(Open Virtualization Format)是多家虛擬化廠商和硬件廠商共同定義的一個虛擬設備的規范,ovf格式的虛擬設備(其實就是一些文件)可以被多家虛擬化軟件設備並import到虛擬化環境,比如VMware、XenServer、VirtualBox等等。OVF一般有幾個部分組成,分別是ovf文件、mf文件、cert文件、vmdk文件和iso文件。OVF(Open Virtualization Format:開放虛擬化格式 )和OVA(Open Virtualization Appliance:開放虛擬化設備),兩者包含所有用於部署虛擬機的必要信息。現在很多軟件廠商經常將一個應用直接打包成ovf或ova格式的虛擬設備提供給用戶導入到虛擬化環境,比如VMware、Riverbed等等很多公司都有產品通過這種方式發布,這方便了用戶部署。
VMware提供ovf、ova模板的部署和導出功能,在手動部署的時候有時會出現無法部署或者部署過程中出錯的情況,尤其在大文件部署的時候突然中斷很是讓人頭疼,這里介紹一個工具:ovftool。官網提供多個版本的下載,建議在linux和mac上使用,具體下載鏈接見后面。
安裝
VMware官網下載,下載之前需要先注冊賬號,下載鏈接如下:
https://my.vmware.com/cn/web/vmware/details?downloadGroup=OVFTOOL410&productId=491
以ubantu為例:
#下載下來之后,直接sh 運行即可: root@ubuntu:~# sh VMware-ovftool-4.1.0-2459827-lin.x86_64.bundle
centos詳細安裝過程:
1、將光盤掛載到系統/mnt目錄下。 [root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt 2、將VMware Tools安裝包“VMwareTools-9.10.0-2476743.tar.gz”復制到/root目錄下 [root@localhost ~]# cp /mnt/cdrom/VMwareTools-9.10.0-2476743.tar.gz /root 3、將文件解壓,解壓后的目錄為“vmware-tools-distrib” [root@localhost ~]# tar -xzf VMwareTools-9.10.0-2476743.tar.gz 4、安裝程序,位於vmware-tools-distrib的目錄,進入到該目錄執行安裝程序 [root@localhost ~]# cd vmware-tools-distrib [root@localhost vmware-tools-distrib]# ./vmware-install.pl 如果出現錯誤“-bash: ./vmware-install.pl: /usr/bin/per: bad interpreter: No such file or directory”表明未安裝語言環境,安裝程序是perl語言,需要安裝perl環境。 [root@localhost vmware-tools-distrib]# yum -y install perl perl安裝完成之后,再執行/vmware-install.pl安裝,根據提示應答安裝(基本一路回車)。 5、其它問題:在安裝vmware tool的過程中,出現如下提示: What is the location of the "ifconfig" program on your machine? 此處回車不行,安裝程序檢測系統有沒有“ifconfig”命令工具,VMware Tools 對網絡的管理需要該工具,可以輸入“yes”跳過檢查,繼續進行安裝。 Yum安裝ifconfig(建議在安裝VMware Tools 之前安裝好): [root@localhost vmware-tools-distrib]# yum install net-tools 6、如需卸載VMware Tools,輸入/usr/bin/vmware-uninstall-tools.pl即可。
使用
OVA/OVF模板部署
ovftool安裝完即可用,其userguide文檔里提供了很多可選參數,下面是我實際使用過程中用的一個語法,基本包含了可能會用到的幾個參數:
ova文件導入到 Vcente#將ova文件導入到 Vcenter
ovftool --X:logLevel=verbose \ --X:logFile=/root/deploy.log \ --noSSLVerify --acceptAllEulas \ -dm=thin -vf=Templates \ -ds=POD01-VOL \ /data/template/centos/CentOS6.5-64bit.ova \ "vi://username:password@Vcenter/host/Host_Name/Host_import_name" 參數詳解: --X:logLevel:定義log的級別; --X:logFile:定義log文件位置,以日期的格式命名; --noSSLVerify:跳過vSphere連接的SSL認證; --acceptAllEulas:接受所有用戶的licenses; -dm(--diskMode): 磁盤類型,一般選用thin置備,如果不加此參數,默認硬盤厚置備類型; -vf(--vmFolder):模板部署的目標目錄(即文件夾),我這里假設要部署到Templates目錄下面; -ds(--datastore):模板部署的目標存儲位置 vi://:全稱”VMware Infrastructure“ 用來和數據中心通信的命令行選項,最早是ESX 3版本的一個術語。 格式:”username:password@vcenter名稱/數據中心名稱/host/指定host“;也可以只指定到cluster。 參數解釋: /data/template/centos/MyTest-CentOS6.5-64bit-V1.ova 是ova文件的位置;及需要導入的voa鏡像模板 pod01-vcenter是vcenter的名稱; POD01(TEST-POD)是數據中心的名稱; host后面接模板部署目標host位置,CLU01代表集群,pod1-clu01-h001.jx.local是集群下的一台宿主機; 需要注意的是,這里的dns要設置好,或者也可用ip地址代替, 例如: vi://username:password@192.168.1.1/?ip=192.168.100.1' 192.168.1.1是vcenter的地址,192.168.100.1是目標宿主機的ip地址 這里跟vcenter的連接也可以用http的形式,具體詳見官方文檔。 注意: 如果ova/ovf模板網卡里帶portgroup 一塊網卡用參數:-nw或者--network后跟目標網絡; 多個網卡可以用--net指定源和目標portgroup, 格式類似--net:source-portgroup=target-portgroup: 例如: --net:vlan10-pod01-Test-Private=vlan11-pod01-Test-Private 多個網卡使用多個--net指定。
Vcenter導出ova文件
#導出ova模板文件 ovftool -o \ --powerOffSource \ --acceptAllEulas \ --machineOutput \ --X:logLevel=verbose \ --X:logFile=log.log \ --noSSLVerify \ "vi://username:password@vcenter/datecenter /vm/vmName" /root/vmName.ova
參數解釋 -o(--overwrite):如果導出的文件名已存在,強制重寫; --powerOffSource:確保VM在被導出之前處於關機的狀態; --machineOutput:以機器可讀的格式輸出ovftool的信息; 注意: 另外需要注意的一點是ovftool導出的文件權限問題,默認是600,建議改成644。 #跨vcenter版本時導出需添加參數--noNvramFile
官方文檔
以下是目前的官方文檔鏈接:
https://www.vmware.com/support/developer/ovf/ovf410/ovftool-410_userguide.pdf
補充說明
批量從vcenter導出腳本
#/bin//bash for i in `cat /data/gms/bash/1.txt` do ovftool -o --powerOffSource --acceptAllEulas --machineOutput --X:logLevel=verbose --X:logFile=/data/gms/log/$i.log --noSSLVerify "vi://username:password@pod01-vcenter.vsphere.local/POD01(MyDC)/host/SystemTemplates/$i" /data/gms/$i.ova done
批量將模板導入vcenter
#!/bin/bash filename=`find /data/gms/ -name *.ova` # find all ova template for ova in $filename do /usr/bin/ovftool --X:logLevel=verbose --X:logFile=/root/ovflog-`date +%Y%m%d` --noSSLVerify --acceptAllEulas -dm=thin -vf=Templates -ds=POD1-Template `echo $ova` 'vi://username:password@MyVC/POD01(MyDC)/host/CLU01/pod1-clu01-h001.jx.local' continue done