vSphere と OVF フォーマット

仮想マシンをハイパーバイザー間で移行させるとき、最近はそれぞれのハイパーバイザーのベンダーから仮想マシンを返還するための仕組みやツールが用意されているのであまり使うことがなくなった OVF ですが、ニフクラではまだまだ　OVF が現役なのでそれについて少し書きます。
# OVF とは
OVF とは [Distributed Management Task Force, Inc. (DMTF)](https://www.dmtf.org/jp) の [Open Virtualization Format Working Group (OVFWG)](https://www.dmtf.org/standards/ovfwg) により策定された標準で、国際標準化機構（ISO）によって[ISO 17203](https://www.iso.org/obp/ui/#iso:std:iso-iec:17203:ed-2:v1:en)として採用および公開されているものです。OVF の規格ができたことで、ハイパーバイザーを含めたコンピューティングのプラットホームに依存しない形で仮想マシンのモビリティを促進し、利用者にはプラットフォームの独立性のメリットを提供するとともに OVF にすればラットフォームに依存せずオープンで拡張が可能、そして効率的なパッケージ化と配布が可能になるはずでした。しかし、実際には OVF 形式を使用して仮想マシンを配布しているのは VMware vSphere 向けが主になっており、他のハイパーバイザーではそれぞれのハイパーバイザーの仮想マシン形式での提供になっているように思います。

# vSphere から見た OVF の構成
OVF は [ISO 17203](https://www.iso.org/obp/ui/#iso:std:iso-iec:17203:ed-2:v1:en) として規格になっているため多くの情報を得ることができます。詳細は [ISO 17203](https://www.iso.org/obp/ui/#iso:std:iso-iec:17203:ed-2:v1:en) を参照してもらうのが良いので、ここでは簡単に vSphere 側の視点でどういうものなのかを書いてみます。

## OVF 1.0
VMware では OVF フォーマットについて Xen Source、IBM、HP、Dell、Microsoft とともに標準化を推進していて、2007年頃にようやく OVF 1.0 の直前の Version 0.9 の規格ができて、[ホワイトペーパー](https://www.vmware.com/techpapers/2007/the-open-virtual-machine-format-whitepaper-for-ovf-1003.html)として公開をしています。これがその後 OVF 1.0 となります。
OVF 1.0 では、主に以下の 7つが策定されました。

+ Portable VM packaging
+ Optimized for secure distribution
+ Simplified installation and deployment
+ Supports both VM and multi-VM configurations
+ Vendor and platform independent
+ Extensible
+ Localizable

OVF 1.0 フォーマットの vSphere アプライアンスは、これらの機能を利用して作られています。
この OVF 1.0 は VMware infrastructure 3.5 登場時に策定されていますが、世の中に公開されたのが 2009 年なので、実際には vSphere 4 以降が OVF 1.0 対応です。この時に策定された OVF 1.0 での範囲は以下の図の通りになります。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/49d5db55-5c8d-2c87-376e-099ed137e32b.png)
※OVF 1.0 は一部拡張されて 2010年に OVF 1.1 に代わっています。

## OVF 2.0
OVF 1.0 で策定された規格も仮想化技術の進展や運用するにあたりいくつかの機能が足りないことがわかってきます。そこで新しい機能を追加することになりました。これが OVF 2.0 として 2013年に策定されます。ここでは新しく主に8つの機能が追加されました。

+ Improved support for network configuration 
+ Package encryption for safe delivery
+ Scaling and deployment options
+ Support for basic placement policies, including affinity and availability placement 
+ Shared disks
+ Advanced device boot order
+ Advanced mechanisms for passing data to guest
+ Updated CIM schemas

And OVF was able to include more setting, too.

ここで追加された機能により、OVF はとても使いやすいものに変わったといえます。特に VMware vSphere においては、6.0 から OVF 2.0 に対応し、以下の 3つが VMware vSphere 用の OVF 機能として追加されています。

+ ポリシーベースの管理情報
+ OVF デプロイ時のウイザード機能の強化
+ ネットワーク情報の改善、デバイスの起動順序の指定

これにより、vSphere ベースのクラウドで OVF を展開する際も、展開後の細かい設定が不要または自動でできるなど便利になりました。

## OVF パッケージの構成
OVF パッケージは 4つのコンポーネントで構成されます。OVF パッケージの詳細を記述した XMLファイル、マニフェストファイル、証明書ファイル、ディスクイメージですが、ディスクイメージはそれぞれのハイパーバイザー形式を使うことができます。vSphere アプライアンスの場合は vmdk で提供されています。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/48be3e33-a873-fa04-d4ef-a036080a9964.png)

## OVF と OVA
最近の vSphere で仮想マシンのエクスポートをすると OVA 形式にならずすべて別々のファイルとしてエクスポートされてきます。つまり素の OVF 形式として上記4つのコンポーネントのファイルがエクスポートされるのですが、少し前の vSphere や古いアプライアンスでは OVA 形式のものがありました。
現在は OVA は仮想アプライアンスとして出力するときにしかできないのですが、OVF と OVA の違いはそのファイルの提供形式であって、その中身は同じものになります。つまり、OVF コンポーネントをアーカイブして一つのファイルにしたものが OVA 形式になります。


![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/7f9852ff-2ec5-d0e1-0bc8-6be923af968b.png)

## VMware での OVF 情報
以下のリンクにいくつか情報がありますので、必要に応じて参照ください。

[CD/DVDデバイスが原因でESXiへのデプロイに失敗するOVA/OVFファイルの修正方法](https://qiita.com/orangain/items/59202b48809468004bea)
[OVF テンプレートのデプロイ](https://docs.vmware.com/jp/VMware-vSphere/6.7/com.vmware.vsphere.vm_admin.doc/GUID-AFEDC48B-C96F-4088-9C1F-4F0A30E965DE.html)
[OVF および OVA ファイル形式とテンプレート](https://docs.vmware.com/jp/VMware-vSphere/6.7/com.vmware.vsphere.vm_admin.doc/GUID-AE61948B-C2EE-436E-BAFB-3C7209088552.html)
[VMware Host Client の、OVF および OVA の制限事項](https://docs.vmware.com/jp/VMware-vSphere/6.7/com.vmware.vsphere.html.hostclient.doc/GUID-96CFEA28-DBDB-43C9-8C28-DAC6E6451C1C.html)

文責：imaisato