LagopusとVagrant
Jun 9, 2017
Masaru OKI @masaru0714
Lagopus?
https://lagopus.github.io/
DPDKを使ってマルチコア・マルチスレッドで高速動作するOpenFlowスイッチ。
OpenFlow 1.3準拠 + トンネル拡張あり。
Apache LicenseのOSS。
完全新作としてL3スイッチ開発中……
Vagrant?
https://www.vagrantup.com/
● VM環境を簡単にデプロイするツール。
● Vagrantfileの中に、動かすVMの情報をつらつら書いて、vagrant upでVM起動。
○ 構文はRuby
● VMに名前を付けておき、vagrant ssh 名前 でVMにログインできる。
● 複数のVMを一度に起動させる、それらの間をネットワークでつなぐ、なども可能。
● VMはproviderというものでどのアプリを使うか決められる。
○ virtualbox, dockerなど。
● VM上で動くOSイメージはboxといい、公式サイトから取得したり自作できる。
● 指定したディレクトリをホストとVMとで共有できる。
● VM(初回)起動時にコマンド実行やスクリプト実行ができる。
vagrantのサブコマンド
● vagrant up VM起動
● vagrant global-status VM状態の確認
● vagrant ssh VMにリモートログイン
● vagrant halt VM停止
● vagrant destroy VM削除
● vagrant box add box追加
● vagrant box list box一覧
● vagrant box update box更新
● vagrant box remove box削除
● vagrant box repackage VMイメージからboxの生成
注意: Vagrantfileのあるディレクトリで実行しないとうまく動かないコマンド多数。
Vagrantの使い方
1. Vagrantfileを用意する。(vagrant initでスケルトンが書きだされる。編集する。etc)
2. vagrant upでVM起動
3. vagrant ssh VM名(Vagrantfile内でつけた名前) でVMにログインして操作できる
4. vagrant haltでVM停止
5. vagrant global-statusでVM状態が確認できる
6. provision用スクリプトを変更した時はvagrant up --provisionで再実行できる
どういうことをやらせてみたか
● ingress, lagopus, egressと名付けた3つのVMを起動する
● それぞれUbuntu 16.04
● lagopusは2本足で、ingressとegressがぶら下がる(sshで入る足を含めると3本足)
● lagopusはprovisionの際にDPDKのソースを取得しコンパイルする
● lagopusは起動ごとにPMDの利用準備を行う
● lagopusはホスト側でビルドしたバイナリのディレクトリを共有し実行可能とする
● ingress, egressにはIPアドレスを付与する
以上が vagrant up コマンド一発で完了する
lagopusingress egress
10.1.0.0/24 10.2.0.0/24
.10 .1 .1 .10
起動後 lagopus VMでできること
● vagrant ssh lagopusでログイン。
● /vagrant/run.shでlagopus(L3版)とコンフィグ管理プロセスが起動する。
○ ホスト側でVagrantfileのあるディレクトリは /vagrantとしてVMで共有されている。
● あとはingressやegressからパケットを流してみるとテストができる。
○ 別terminalからvagrant ssh ingressなどしたあとiperfなどできます
いったんlagopusを止めて、ホスト側でソースを修正してビルドして
lagopus VMで起動すれば修正後の挙動を確認できる。
ハマったところ(Vagrant方面)
vagrantのバージョン
● apt-get installで入る1.8.5ではUbuntuのboxでうまくネットワークが組めない
● eth0,1,からsnp0s3,等へ命名規則が変わったことについて行けてなかった
● 公式サイトから1.9.5を入れて解決。
独自box
● 起動後vagrant sshで環境を整え、vagrant box repackageで書き出してみた
● 書き出したboxを指定すると、うまく起動できない(初期設定のsshに失敗する)
● 今回使ったbox “ubuntu/xenial64” がやや特殊だったせい?
○ 通常のboxはvagrant/vagrantでログインできるが、この boxではログインできず
● 今回はあきらめた。
Lagopus方面
● L3は絶賛開発中。動かせるブランチや設定や起動コマンドラインなど聞きまくった
(公開時には整理されているはずですが)
● Linux kernel moduleの追加が必要だった
○ apt-get install -y linux-image-extra-virtualをprovision時に実行して解決
● VMのせいか開発中コードのせいかVM関接続のせいか不明だが、遅かった。
○ 実環境でIXIAで10Gbps出てるという話だが、 vagrant環境ではiperfで700Mbps程度だった
● 性能テストには向かないが、機能テストはできそう。
● mininetよりは実環境に近い構成が可能。DPDK enabled.
まとめ
Vagrant、動くように作るのはちょっと手間がかかるけど、動いてしまえばあとは簡単!
DPDKアプリ(Lagopus L3スイッチ)も動きます! (実態Virtualboxなので)
ホストとディレクトリやファイルを共有できるので、転送の手間が省けて楽!
なお、Lagopus L3スイッチ(仮称。公開時名称未定)は、近日公開……?

Lagopusとvagrant