Tech Sketch Bucket of Technical Chips by TIS Inc.

Wakame-VDCとOpenVNetでKVM仮想マシンの運用環境を構築してみた

Pocket

昨今のクラウドの利用拡大に伴い、システム運用の負荷も増加を続けている、その運用負荷軽減の為、OpenStackやなどのクラウドオーケストレーション製品やChefやPappetなどのシステム構築自動化ツールの利用が拡大している。クラウド上に集約されたネットワーク環境の運用を効率化する為にOpenDaylightなどのSDN(Software Defined Network)製品も活用されている。

今回は「データセンターの内部で増え続けるサーバーなどのITリソースを、効率よく管理する」ことを目的として開発された、Wakame-vdcOpenVNetをご紹介したい。

Wakame-vdcとOpenVNetは国内企業である株式会社あくしゅが開発を行ったLGPL v3ライセンスのOSS製品である。Wakame-vdcのvdcはVDC(Virtual Data Center:仮想データセンター)の略であり、複数のクラウド基盤やハイパーバイザ(現状はkvm/openvz/lxvに対応)に対して1つの制御画面から仮想マシンを自動的に構築し、指定したネットワークに接続する機能を提供する。パブリッククラウドでの運用を想定しており、マルチテナンシーに対応したネットワークおよびリソースの割り当てを実現している。そのマルチテナンシーに対応したネットワークを提供するのがSDN製品であるOpenVNetだ。

本記事ではCentOS 6.7(x86_64)上にハイパーバイザとしてkvmをインストールした仮想化基盤をWakame-vdcとOpenVNetで制御を行える環境の構築を行う。構築手順と実際に仮想マシンを起動させることでWakame-vdcとOpenVNetの機能も紹介したい。


 検証環境

検証環境のサーバおよびネットワーク構成は以下となる。

png

Wakame-vdcおよびOpenVNetのインストールには以下のサイトを参考させて頂いた。

【公式】Wakame-vdc Installation Guide
【公式】OpenVNet Installation Guide
Wakame-vdcを動かしてみました。
OpenVNetを動かしてみた 最小構成

Wakame-vdcとOpenVNetのインストール手順

ネットワーク設計上の注意点

OpenVNetはSDN製品としてOpenFlow 2.3.1を利用する。今回はeth0をOVSPortとして、仮想NICのbr0をOVSBrigeとして設定し、br0経由して仮想マシンから外部への接続を行う。ベースのOSからはeth0を経由して外部に接続は行えなくなる。その為、以下のプロダクトのダウンロード、インストールにはeth1にIPを付与して、接続を行える状態が必要となる。
前述の検証用ネットワークではフロントエンドとして10.255.202.0/24、バックエンドとして10.255.199.0/24のネットワークセグメントを構築し、それぞれのセグメントににデフォルトゲートウェーを設け、インターネット接続を可能な状態としている。
このような2個のネットワークセグメントを設けるのが難しく、br0/eth1に同一セグメントのIPを使用せざるを得ない場合は、eth1に小さい数字のIPを付与するか、ルーティングの設定でeth1からインターネットアクセスをできるように設定する必要が発生する。

OSインストールと初期設定

CentOS 6.7 x86_64をminimalインストールする。
インストール時の設定でeth1のみ固定IPとGWとDNSを付与しておく。
OS起動後は以下を実施する。

1.SELinuxを無効にしてOSを再起動する。
$ sudo vi /etc/selinux/config

2.epelリポジトリを追加する。

3.yum updateでインストールされたパッケージを更新する。

4.kvmおよび管理ツールをインストールし、自動起動するように設定する。

5.kvmのvirtbrを無効化する。

6.wget ntp、mysql-server、redis等の必要パッケージをインストールする。

7.問題発生時の切り分け等で利用するパッケージもインストールしておく。
起動した仮想マシンがネットワーク接続できない場合、GUIを起動しvncviewrでコンソールにアクセスできるようにしておく。さらに通信の確認を行うため、tcpdumpやtelnetなどのコマンドもあると便利である。

8.vncserverをアクセスできる状態にする。
vncserverを起動し、すぐに停止させる。

vncserverでgnome-desktopが起動するように設定を変更する。
日本語入力を使用しないのであれば、30-33行目の設定は不要 $vi ~/.vnc/xstartup

9.iptablesで必要ポートを解放する。
$ sudo vi /etc/sysconfig/iptables

$ sudo service iptables reload


OpenVNetインストール

1.openvswitch ver 2.3.1をインストールする。
OpenVNetはopenvswitch 2.3.1を推奨しており、2.3.1以降のバージョンでは動作に支障が発生する可能性がある。 インストールにはソースをダウンロードして展開後、パッチを適用してからBuildしてパッケージを作成する必要がある。その手順は煩雑であるが、有志の方が作成した以下のコマンドで上記作業を一括で行うことが可能である。

2.OpenVNetのリポジトリを登録する。

3.OpenVNetをインストールする。

4.eth0とbr0を設定する。
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0

$ sudo vi /etc/sysconfig/network-scripts/ifcfg-br0

5.openvswitchを起動し、自動起動設定後に、ネットワークを再起動する。

6.mysql-serverを起動し、自動起動に設定する。

7.OpenVNetで利用するRubyのPATHを設定する。

8.OpenVNetのDBを作成する。

再作成の場合は、createの前にdropを実行する。

9.redisを起動し、自動起動に設定する。

10.vnet-vnmgrとvnet-webapiを起動する。

11.datapathsとnetworksを設定する。

【設定上の注意点】
* datapathsのuuid名は任意だがdp-は必須である。
* datapathsのdpidはbr0に設定したdatapath-idの値に0xを付与したものを設定する。
* networksのuuid名も任意だがnw-は必須である。
* networksのipv4-network/prefixは接続するネットワークのネットワークアドレスとプレフィックスを設定する。

12.vnet-vnaを起動する。

13.br0の通信許可を設定する。

本設定はopenvswitchおよびvnet-vnaの起動/再起動の都度、実施が必要となる。

14.openvnetの起動・停止スクリプト(暫定版)を作成する。
※エラー処理等が不十分な為、本番利用時はカスタマイズが必要。

$ sudo vi /etc/init.d/openvnet

$ sudo chmod 755 /etc/init.d/openvnet
※vnet-vna起動時br0の透過設定がOpenFlowTableから消えてしまうため、追加する設定も入れている。

Wakame-vdcのインストール

1.Wakame-vdcのリポジトリを登録する。
Wakame-vdcのOpenVNet連携機能は2016/1現在、stable版には実装されいないため、develop版を使用する。

2.Wakame-vdcをインストールする。

15.rabbitmqを起動し、自動起動に設定する。

16.tremaのtmpおよびlogフォルダを作成する。

※tremaのログも/var/log/wakame-vdc以下に出力する設定としているが、logフォルダを作成する形でも動作に影響はない。

17.Wakame-vdcの初期設定スクリプトをダウンロードする。

18.Wakame-vdcの初期設定スクリプトをカスタマイズする。
ネットワーク種類とハイパーバイザの種類と物理サーバのリソース量を変更する。
$ vi ./install_guide_demo_data.sh

19.Wakame-vdcの初期設定スクリプトを実行する。

20.hva.confファイルを編集する。
$ sudo vi /etc/wakame-vdc/hva.conf

21.dcmgr.confファイルを編集する。
openvnet連携の設定を追加する
$sudo vi /etc/wakame-vdc/dcmgr.conf

22.instance_spec.ymlファイルを編集する。
kvmで運用で使用するリソース量のみの登録とする。
$sudo vi /etc/wakame-vdc/dcmgr_gui/database.yml

23.Wakame-vdcを起動する。

各コマンドの実行に少し間隔をあける。特にvdc-webuiの起動前は10秒程度開ける。

25.wakame-vdcの起動・停止スクリプトを作成する。
※エラー処理等が不十分な為、本番利用時はカスタマイズが必要。
$ sudo vi /etc/init.d/wakame-vdc

$ sudo chmod 755 /etc/init.d/wakame-vdc

※start時の処理でvdc-webuiをstop→startしているが、vdc-webuiは他のサービスの起動で同時に起動される場合があるため、明示的に停止する処理を追加している。


Wakame-vdc・OpenVNetのログローテーション

1.wakame-vdcのログローテーション設定ファイルを作成する。 $ sudo vi /etc/logrotate.d/wakame-vdc

2.openvnetのログローテーション設定ファイルを作成する
ログファイルにroot以外のユーザでも書込みを行うため、パーミッションを0666に設定


Wakame-vdcのGUIからの初期設定

1.wakame-vdcのWeb画面にログインする。
URLはhttp://eth1に付与したIPアドレス:9000を使用する。
install_guide_demo_data.shで設定したユーザID:demo/パスワード:demoでログインする。

png


2.Security Gropusを設定する。
(1)Security Gropusのリンクをクリックする。

png

(2)Create Security Groupをクリックする

png

(3)Security Group NameとDescriptionを入力し、Createをクリックする。

png

※本来はRuleも同時に登録できるはずだが、新規作成時の書式チェックで必ずエラーになってしまうため、CreateでのRuleの登録は行わない。

(4)ActionのEditをクリックする。

png

(5)ネットワークにアクセス可能なポートとIPアドレスをRuleに指定し、Updateをクリックする。

png


3.Key Pairsを設定する。
(1)Key Pairsのリンクをクリックする。

png

(2)Create Key Pairをクリックする。

png

(3)Keypair NameとDescriptionを入力してCreateをクリックする。

png

(4)pemファイルが作成されるのでダウンロードして保存する。

png

※LinuxサーバへのSSHログイン時の鍵となる。


4.サンプルの仮想マシンイメージからのサーバ構築
(1)Machine Imagesのリンクをクリックする。

png

(2)仮想マシンイメージを選択し、Launch Instanceをクリックする。

png

(3)各項目を指定し、Launchをクリックする。

png

(4)Instancesのリンクをクリックする。
Stateがrunningになれば仮想マシンの起動成功

png


仮想マシンに接続してみる。

1.VNCでコンソールにアクセス
(1)物理サーバ側でvncserverを起動する。

(2)管理用PCからvncviwerで接続する。
通常はeth1のIP:5901ポートに接続する。

png

(3)仮想マシンのvnc接続ポートを確認する。
仮想マシンのプロセスを確認し、プロセスID、モニタリングポート、telnetポート、vncポートを確認する。
$ ps -ef | grep qemu-kvm
root 5311 1 4 19:00 ? 00:00:12 /usr/libexec/qemu-kvm -m 4096 -s mp 2 -name vdc-i-mnmbjzmi -pidfile /var/lib/wakame-vdc/instances/i-mnmbjzmi/kvm. pid -daemonize -monitor telnet:127.0.0.1:30943,server,nowait -no-kvm-pit-reinjec tion -vnc 127.0.0.1:24701 -serial telnet:127.0.0.1:28988,server,nowait -drive fi le=/var/lib/wakame-vdc/instances/i-mnmbjzmi/vol-d8wpzg5o,id=vol-d8wpzg5o-drive,i f=none,serial=vol-d8wpzg5o,cache=none,aio=native -device ide-drive,id=vol-d8wpzg 5o,drive=vol-d8wpzg5o-drive,bootindex=0 -drive file=/var/lib/wakame-vdc/instance s/i-mnmbjzmi/metadata.img,id=metadata-drive,if=none,serial=metadata,cache=none,a io=native -device ide-drive,id=metadata,drive=metadata-drive -net nic,vlan=0,mac addr=52:54:00:cf:19:65,model=e1000,addr=10 -net tap,vlan=0,ifname=if-ey8qeplx,sc ript=no,downscript=no

プロセスIDから使用しているポートを確認する。
$ netstat -antp | grep 5311
tcp 0 0 127.0.0.1:30943 0.0.0.0:* LISTEN 5311/qemu-kvm
tcp 0 0 127.0.0.1:30601 0.0.0.0:* LISTEN 5311/qemu-kvm
tcp 0 0 127.0.0.1:28988 0.0.0.0:* LISTEN 5311/qemu-kvm

vnc接続のポートはpsコマンドの参照結果のモニタリングポート、telnetポートで使用されていないポートとなるため、上記の場合、30601/tcpが使用されている。

(4)仮想マシンのコンソールにtiga-vnc clientで接続する。

png

(5)仮想マシンのコンソールに接続できるので、ユーザID+パスワードでログインする。
ユーザID:ubuntu/パスワード:ubuntuでログインできる。

png

(6)サーバにログインできることを確認

png


2. SSHで接続 外部サーバからユーザID:ubuntu/パスワード:ubuntu**でSSHで接続する。

png


CentOS 6の仮想マシンイメージを追加してみる。

1.仮想マシンイメージファイルをWakame-vdcに登録する。
*(1)仮想マシンイメージの検索 Wakame-vdc用の仮想マシンイメージダウンロードサイトに接続する。
demo/vmimage/が含まれるものが仮想マシンイメージとなり、さらに圧縮ファイル名にkvm**が含まれるものがkvm用となる。

png

(2)ダウンロード、登録用スクリプトの作成
仮想マシンイメージをダウンロードし、Wakame-vdcに登録するスクリプトを作成する。
チェックサムは上記サイトのに、サイズはに記載されているが、間違っていることもあるので、仮想マシンイメージファイルをダウンロードしてみて、md5sumコマンドを利用してchecksumの値と圧縮ファイルサイズを確認しておく方が良い。

$ vi ./install_centos6.sh

(3)ダウンロード、登録用スクリプトを実行する。

Wakame-vdcのWeb画面でMacine Imagesをクリックする。
ダウンロードしたCeontos 6の仮想マシンイメージが登録されている。

png


2.仮想マシンを作成する。
(1)Wakame-vdcのWeb画面でMacine ImagesでCentos 6のイメージを選択し、Launch Instanceをクリックする。

png

(2)Launch Instanceの画面で各パラメータを設定し、Launchをクリックする。

png

(3)Instancesのリンクをクリックし、仮想マシンの起動を確認する。
Stateがrunningになっていれば起動成功

png


3.仮想マシンにSSHで接続する
初期登録で作成し、ダウンロードしたpemファイルを認証キーとして使用する。pemファイルはchmod 0400でownerのread onlyにして置く。

png


最後に

構築および基本的な利用方法は以上となる。少し構築に手間はかかるが、サーバ仮想化環境の運用ツールとしてはとても高機能で便利に感じられた。機会があれば是非、一度利用して頂きたい。ハイパーバイザをkvmで構築する場合は物理マシン上の構築が必要となるが、lxcやopenvzにも対応しており、こちらであれば仮想マシン上でも構築することが可能である。
今回はインストールと仮想マシンの構築までをまとめたが、今後、インストール時のトラブルシューティングや仮想マシンイメージの自作方法なども記事にしてみたいと考えている。

エンジニア採用中!私たちと一緒に働いてみませんか?