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を設定する、という単純なフローとなる。
検証環境
(様々な検証を行っていたので、ごちゃごちゃしていてすみません。。。)
全て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の設定をする。
[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_drivers
やnetwork_vlan_ranges
はデプロイ時に設定されているはずなので、あくまで確認。mechanism_drivers
と[ml2_vmware]
のセクションの追記をする。network_maps
はvlan_ranges
が複数あればカンマ区切りで追加する。
[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の一部ソースを変更することにして対応した。
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からネットワークの作成を行った。
OpenStack上で作成したネットワークのIDと同じ名前のポートグループがDistributed Switchに作成されている事がわかる。またVLAN IDが設定され、説明にはManaged By Neutronとなっていることも確認できる。
インスタンスを接続
インスタンスを新しく作成し、先ほど作成したネットワークに接続してみた。
インスタンスが作成したネットワークに接続されたことが確認できた。
所感
SDN製品を使ったり、OVSvApp、VMware Integrated OpenStackなどを使うのに比較して、手軽にVMware vSphere込みのOpenStack環境を作ることができます。現状は開発中のため若干不安定なところはありますが、今後もFW機能等も増えてくる模様です。