Mirantis vmware-dvsドライバによるOpenStack + VMwareのネットワーク統合

  • 2
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

vmware-dvsとは

https://github.com/Mirantis/vmware-dvs
Mirantisが開発を行っているVMware vSphere用のML2(MoudleLayer2)のメカニズムドライバの一つだ。ご存じのとおりML2はメカニズムドライバを変更することでネットワークの実装部分を変更する事ができる。おおよその人たちは、1度はOpen vSwitchの設定をしただろう(昨今はLinuxBridge?)。それに追加してこのvmware-dvsドライバを入れることで、VMware vSphereでのネットワーク構築、またOpenvSwitchと連携してKVM等他ハイパーバイザの混在環境を作成できる。

一般的に、ESXiをハイパーバイザとした場合にはVMware NSXなどのSDN製品が必要になったりするが、高価であったり、試用ができなかったりと敷居が高い。しかしこのドライバであれば、vSphere Distributed Switchが使える環境であれば問題ない、vSphere Enterprise Plusがあれば利用が可能である。この製品はMy VMwareに登録すれば60日間試用が可能だ。

基本的な動きは、OpenStackでネットワーク作成->Distributed SwitchにPortGroupを作成、OpenStackでサブネット作成->PortGroupにVLANを設定する、という単純なフローとなる。

検証環境

20151225162809.png

(様々な検証を行っていたので、ごちゃごちゃしていてすみません。。。)

全てvSphere上のVMを用いてOpenStackを構築した。OpenStackはController1台とComputeとNetworkの兼任(Compute自身にVMを立てるわけでは無いので負荷が低いため)が1台、vSphere上にnovaを経由してVMを立てるためのマシンが1台となる。このVMを立てるマシンには、Distributed Switchを設定してある。

各OSはCentOS 7.0を使い、OpenStackのLibertyをPackStackを使ってデプロイした。その際、VMware環境がハイパーバイザであること、ネットワークとしてVLANを用いることをanswerファイル(PackStackにおける構築設定)に記入した。

vmware-dvsの導入

無事OpenStackが入れ終わったらvmware-dvsを導入する。導入方法自体はリポジトリ内のINSTALL.rstに書かれている。

Controllerへのインストール

pipとgitを用いてインストールする。(CentOS7.0ではデフォルトでは入っていないのでyumで入れておく)
# pip install git+git://github.com/Mirantis/vmware-dvs.git@liberty
行末に@libertyを追加することでLibertyブランチを指定している。
ここで依存関係等でERRORが出たりするので適切に処理する。(setuptoolsやsixが古いなどでERRORが出た)

また、ml2_conf.ini、neutron.confの設定をする。

/etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
...
type_drivers = vlan
tenant_network_types = vlan
mechanism_drivers =openvswitch, vmware_dvs

[ml2_type_vlan]
...
network_vlan_ranges = physnet1:1000:2999

[ml2_vmware]
vsphere_hostname = vcenter.openstack.local
vsphere_login = <vSphereのユーザ名>
vsphere_password = <vSphereのパスワード>
network_maps = physnet1:DSwitch-Compute

type_driversnetwork_vlan_rangesはデプロイ時に設定されているはずなので、あくまで確認。mechanism_drivers[ml2_vmware]のセクションの追記をする。network_mapsvlan_rangesが複数あればカンマ区切りで追加する。

/etc/neutron/neutron.conf
[DEFAULT]
...
nova_admin_tenant_name = <nova admin tenant name>
nova_admin_username = <nova admin user name>
nova_admin_password = <nova admin password>
nova_admin_tenant_id = <nova admin tenant_id>

notification_driver = messagingv2
notification_topics = notifications,vmware_dvs

nova_admin_*は設定されてるか確認、notification_*の行を設定する。

実はnova_admin_*の表現は古いものであり、Liberty以降で新しい設定になった模様。ただ、このままではvmware-dvsが動かない。PackStackでデプロイするとこの設定になってしまうし、リファレンスで新しい設定も見つけられず、vmware-dvsの一部ソースを変更することにして対応した。

/usr/lib/python2.7/site-packages/mech_vmware_dvs/compute_util.py
    params = dict(
         #元々のソース 42行目~
         #username=cfg.nova.username,
         #api_key=cfg.nova.password,
         #project_id=cfg.nova.tenant_name,
         #auth_url=cfg.nova.auth_url+”v2.0/”,

         #変更点ここから
         username=cfg.nova_admin_username,
         api_key=cfg.nova_admin_password,
         project_id=cfg.nova_admin_tenant_name,
         auth_url=cfg.nova_admin_auth_url,
         #変更点ここまで
         bypass_url=bypass_url,
    )

Computeへのインストール

ComputeではNovaにパッチを当てる必要がある(patchはCentOS7.0では入っていないのでyumで入れておく)。nova.patchはvmware-dvsのリポジトリにあるのでそこから入手する。

patch -p1 -d /usr/lib/python2.7/site-packages/ < nova.patch

これでドライバの導入は完了。各コンポーネントをrestartするなり、マシンごとリブートして、導入したドライバが使えるようにする。

デモ

ネットワークの作成

Horizonからネットワークの作成を行った。
20151225175124.png
OpenStack上で作成したネットワークのIDと同じ名前のポートグループがDistributed Switchに作成されている事がわかる。またVLAN IDが設定され、説明にはManaged By Neutronとなっていることも確認できる。

インスタンスを接続

インスタンスを新しく作成し、先ほど作成したネットワークに接続してみた。
20151225181028.png
インスタンスが作成したネットワークに接続されたことが確認できた。

所感

SDN製品を使ったり、OVSvAppVMware Integrated OpenStackなどを使うのに比較して、手軽にVMware vSphere込みのOpenStack環境を作ることができます。現状は開発中のため若干不安定なところはありますが、今後もFW機能等も増えてくる模様です。