[Cloud, Virtualization] Ravello cloud virtualization

原文はこちら。
https://blogs.oracle.com/pshuff/entry/ravello_cloud_virtualization

昨日、データセンターのベアメタルソリューションや仮想化ソリューションからクラウドベンダーへ移動するために欠かせないものに関する話をしました。
(訳注)「昨日」とは、以下のエントリをさしています。
uploading custom boot image for compute cloud
https://blogs.oracle.com/pshuff/entry/uploading_custom_boot_image_for
その中でわかったことは、難しいだけでなく作業が発生する、ということです。VMDKコードをAMI(Amazonの場合)、VHD(Microsoftの場合)、tar.gz(Oracleの場合)へ変換するツールがあるように、これが根本的な問題なのです。変換ツールがあるということは、単純にベアメタル・インストールやVMDKコードのバックアップを取って、アップロードして実行することができません。Javaは早い時期にこの問題に遭遇しました。CやC++のコード、バイナリをそのままMacやLinux、Windowsで動作させることはできませんでした。コードを再コンパイルする必要があり、うまくいけばlibcやlibc++ライブラリがOS間で互換性がありました。単純な再コンパイルで問題が解決する場合もありますが、多くの場合、条件コンパイルや異なるOSで動作させるために別のライブラリが必要でした。基本的な問題は、ネットワーク接続やディスクの読み書きのようなものが根本的に異なることでした。Windowsではバックスラッシュを使い、LinuxやMac OSではスラッシュを使います(訳注:Forward SlashとBack Slashの説明が違っていたので修正して訳しています)。ファイル名や長さも異なり、異なる文字を使うことができたりできなかったりします。残念なことにクラウドの世界でも同じことがあてはまります。仮想ネットワーク・インターフェースは全てのベンダーで同じではありません。ネットワーク・ストレージはiSCSIマウントやNFSマウント、もしくはREST APIだけでアクセスできる可能性があります。クラウド・ベンダー間でVirtual Computeの定義が異なるため、Javaが数十年前に行ったように、プログラミングのシムに似た仮想化のためのシムが必要になっています。Ravelloはこの主要な4クラウドベンダー間のギャップに入り、その差を埋めました。
Ravello Systemsは数年前にこの問題に取り組みはじめました。
Ravello Systems
http://ravellosystems.com/
VMwareからのVMDKディスクイメージを使って、クラウドベンダーをVMwareシステムのように仮想化するための3個のコンポーネントを作成しました。この3個のコンポーネントは、Nested Virtualization、Software Defined Networking、Virtual Storage Interfacesです。
HVX: High performance nested virtualization
https://www.ravellosystems.com/technology/nested-virtualization
HVX: Software defined networking (overlay network)
https://www.ravellosystems.com/technology/software-defined-network
HVX: Storage overlay (virtual storage interfaces)
https://www.ravellosystems.com/technology/storage-overlay
そのアイデアとは、ソリューションを構成する単一のシステムだけではなく、VMwareインスタンスのグループを作り、クラウドベンダーにそのままインポートする、というものでした。ユーザは、GUIを使ってインスタンス間のネットワークの関係をマッピングし、これらの仮想イメージをクラウドベンダーにデプロイしました。ソリューションの基本は、Ravello HVXハイパーバイザー・エミュレータを各インスタンスについてクラウドベンダーのコンピュート・インスタンスにデプロイしてからHVXインスタンス上にVMWare VMDKをデプロイしよう、というものでした。
HVX: Virtual infrastructure for the cloud
https://www.ravellosystems.com/technology/hvx
この結果、ストレージやネットワーク・インターフェースをGUIで作成した接続に従ってマッピングし、VMDKコードを変更しないまま実行できました。
仮想インスタンスをそのまま実行するというのはラジカルなコンセプトでした。非常にラジカルなので、OracleがRavello Systemsをこの春に買収し、組織の営業力を拡大しました。Ravelloが直面する3つの重要な課題は、顧客のデータセンター内で実行するワークロードの50%がクラウドへの移植がうまくいかないこと、これらのアプリケーションの多くはLayer 2 IPプロトコルを活用しており、通常ほとんどのクラウド環境では利用できないこと、そして異なるハードウェアベンダー上でのVMWareの実装は異なる仮想コードや構成を生成するため、任意のクラウドベンダーにマッピングすることが非常に困難である、ということです。一つ目の課題に対するソリューションは、VMware ESXおよびESXi環境を仮想化し、複数のクラウドベンダーのソリューション上に載せました。管理者がプロセッサを割り当てた場合、それはAWSにおけるスレッドもしくはAzureやOracleの場合のコアと同様なのでしょうか?ネットワークを割り当ててNAT構成を実施している場合、クラウドインフラストラクチャで可能なのでしょうか、それともHVXでエミュレートする必要があるのでしょうか。
ネストした仮想化エンジンは、VMwareに保存されたコードを変更せず、ネイティブに実行するように設計されています。クラウド・ベンダーのデバイスは、VMWareのデバイスや仮想デバイスとしてコードに公開されています。コンセプトは、異なるクラウドソリューション間の差異を最小化し、プロセッサとハイパーバイザーを、できるだけESXやESXiのように見せるようにすることでした。HVXでは、Binary Translationと呼ばれるテクノロジーを採用して、こうした仮想化拡張機能を必要としないハイパフォーマンスな仮想化を実装しています。仮想化拡張機能が利用可能な場合、イリュージョンを実装する最も簡単な方法は、"Trap and Emulate"を使うことです。TrapとEmulateは次のように動作します。ハイパーバイザーはプロセッサを構成してイリュージョンを壊す可能性がある命令(例えばハイパーバイザー自体のメモリにアクセスする)が「トラップ」を生成し、そのトラップがゲストOSに割り込み、ハイパーバイザーに制御を伝えます。その後、ハイパーバイザーは違反命令を調べ、安全な方法で命令をエミュレートした後に、ゲストは実行を継続することができます。HVXというRavelloのハイパーバイザーはバイナリ変換と呼ばれるテクノロジーを使っています。これはTrap-and-Emulateの方法とは異なり、バイナリ変換は仮想化拡張機能が利用できない場合でも動作します。
ピュアなL2アクセスは難しく、VLAN、ポートミラーリング、ブロードキャスト/マルチキャストは通常動作しませんが、Ravelloを使うと、単一の仮想マシンだけでなく、既存の複数の仮想マシンから構成されるアプリケーションも変更せずにクラウドで実行することができます。これを実現するために、Ravelloはアプリケーションの仮想マシン間の接続を仮想化するsoftware-defined networkを提供します。仮想ネットワークは完全にユーザーが定義でき、複数のサブネット、ルータ、そしてDHCP、DNSサーバ、ファイアウォールのような補助サービスを含むことができます。仮想ネットワークをデータセンターのネットワークと全く同じようにすることができます。仮想ネットワークのデータ・プレーンはHVX内に存在する完全な分散仮想スイッチと仮想ルータソフトウェアコンポーネントで形成されます。仮想マシンから送信されるネットワーク・パケットはインターセプトされ、スイッチに注入されます。スイッチは通常のネットワーク・スイッチとほぼ同じように動作します。各仮想ネットワークデバイス毎に、仮想スイッチが仮想ポートを作成します。この仮想ポートは接続されている仮想NICデバイスから出入りするパケットを処理します。
Ravelloのストレージ・オーバーレイ・ソリューションは、性能、永続性、セキュリティに重点を置いており、オブジェクトストレージや様々な種類のブロックデバイスといったネイティブクラウドストレージプリミティブを、ゲストVMが直接利用可能なローカルブロックデバイスに抽象化します。デバイスの種類やコントローラの種類から、PCIバス上の配置場所に至る全てが、同じままなので、ゲストVMにとっては、元のデータセンター・インフラストラクチャで動作しているのと同じように見えるのです。これにより、ゲストVMはオンプレミス環境で動作しているかのように、VMのストレージ構成を使って同様に実行することができます。クラウドストレージの抽象化(およびローカルブロックデバイスとしての提示)を使うと、HVXオーバーレイ・ネットワーキングの機能と組み合わて、様々なNASアプライアンスを動作させ、iSCSI、NFS、CIFS、SMBといったネットワークベースのプロトコルで利用することができます。こうしたブロックデバイスはハイパフォーマンスなcopy-on-writeファイルシステムによって支えられており、このおかげで複数の仮想マシンの増分スナップショット機能を実装することができています。
Ravelloチームが開発したハンズオンをたどり、Oracle Compute Cloudにオンサイトに展開されているPrimaveraをインポートする方法を示すことができました。ブロック図は以下のようです。全てのVMDKファイルをインポートし、GUIベースのアプリケーション構成ツールを使って、インスタンスを接続します。

インスタンスをインポートすれば、仮想スイッチ、仮想ゲートウェイ、仮想NICを追加し、パブリックIPアドレスを割り当て、VLANを構成に追加することによって、ネットワークインターフェースを構成することができます。

Ravelloは、クラウドベンダーでサポートされていない機能を定義することを可能にします。例えば、AmazonやMicrosoftは、レイヤ2ルーティングおよびマルチキャスト・ブロードキャスティングを許可していません。VMwareの場合は両方を許可しています。HVX層でこれらの呼び出しをトラップし、ネットワーク上の全てのホストへの接続を開いてTCPでのpingやマルチキャスト・ブロードキャストのようなことをして、各ホストにパケットを送信することによって、これらの機能をエミュレートします。まとめると、Ravelloでは、VMwareの既存の仮想化エンジンを受け取ることができます。そして、実質的に任意のクラウド・コンピューティング・エンジンにデプロイします。HVX hypervisorは、シムを提供し、さらにVMwareがクラウドベンダーに提供する機能を拡大します。レイヤ2ルーティング、VLANタギング、マルチキャスト/ブロードキャストパケットのような機能は、インスタンス間のHVX層を介してサポートされています。

0 件のコメント:

コメントを投稿