2人でOpenStackを開発環境に導入した話
湖山 翔平 / Shohei Koyama
@sion_cojp
自己紹介
湖山 翔平 / @sion_cojp
27歳
元FPSプロゲーマーでアジアチャンピオン
qiitaをよく書いてます
http://qiita.com/sion_cojp
インフラエンジニア
11月からWebアプリケーションエンジニア
株式会社リブセンス(2年目)
遡ると1年前
1年前のお話
開発者⇨インフラに VM構築依頼
開発者とインフラがスペック調整相談
(めちゃくちゃ持て余すスペックでの依頼がよく来て枯渇していたから)
インフラが空いてるKVMホストを確認
シェルスクリプトでVM構築 + セットアップ
引き渡し
1年前の開発環境運用
1台出来るのに1時間
当時のインフラメンバー3, 4人ほど。
(現在は6名)
多大な運用コストを割かれていた
最近のテクノロジーでなんとかしたい
!
ということで
こんなメンバーで導入しました
湖山 翔平 中西 晶大
リブセンスのインフラ
本番環境:オンプレで150台ホスト
VMで400台くらい
開発環境:オンプレで50台ホスト と Vagrant
その他パブリッククラウドも利用
OpenStackを導入して良かったこと
今までインフラチームがVMを構築してたのが、
開発者がGUI操作で自由に作ったり壊せるようになった
chef, packerを使ってセットアップ済みイメージを用意することにより、
セットアップの待ち時間がなくなった
全体的なコミュニケーションコストが減った
VMの提供スピードが上がった
イメージをopenstackからraw(sparse)にしたので、
VM自体のスピードがあがった
開発者がVMが欲しいと、インフラに連絡
開発者とインフラがスペック調整相談
(めちゃくちゃ持て余すスペックでの依頼がよく来て枯渇していた)
インフラが空いてるKVMホストを確認
シェルスクリプトでVM構築 + セットアップ
引き渡し
割り当てられたリソース内で、開発者が自由に作成
1台出来るのに1時間
1年前の運用
現在の運用
1台出来るのに8分
イメージのスピード
測定方法 http://qiita.com/sion_cojp/items/bef955bba3dbf9d603f8
runtimeは30秒に
OpenStackを導入して悪かったこと
仮想ネットワークに詳しい人が居ないと運用辛い
OpenStack の学習コストが高すぎる
障害対応の知見を持ってないので、
すぐ復旧ってことには、あまりならないので辛い
バージョンのアップデートが大変
(まだやったことはないが、大変なのが分かる)
先に総括
結果、開発環境には導入して良かった事が大きいです。
(運用コストが減ったのが大きい)
ただ本番環境の OpenStack 化 は弊社では
現状デメリットの方が大きいため、実施しないと判断
学習コストの高さ + 運用負荷の増大
障害時、スムーズに復旧出来るかどうか
OpenStack 自体のバージョンアップが難しい
OpenStackに変わってから自分たちで必要なときに
インスタンスが用意できるのでオペレーションが楽になった
OpenStack(リモート開発環境) と vagrant box(ローカル開発環境)の
両方があって開発環境の冗長化ができている
最後の setup shell の実行が面倒
(後に登場しますが、下記を実行するスクリプトを手動で叩いてもらってます)
・パーティションの拡張
・ユーザのホームディレクトリ作成
開発者からの評判
Goo
d
BAD
ここからは、導入の際に苦労したお話
使ってるコンポーネント
neutron : ネットワーク
Nova : 仮想マシンの作成、削除
KeyStone : 認証
Glance : イメージ管理
Horizon : ダッシュボード(GUIツール)
Cinder : ストレージ
イメージ作成:
1. パーティションの可変
Glanceに登録しているイメージが7Gだとして、
それを元に 20G のボリュームを作っても
rootパーティションが7Gまでしか読まなかった。
1. パーティションの可変 - 解決編
これをインスタンス作成後、
叩かせてます
cloud-init, cloud-utils, cloud-utils-growpart
パッケージを内包化し、
growpartコマンドで可変するようにしました
(ただし、コマンド打った後初回再起動必要)
2. Cinderでtargetdじゃなく、NFSを採用した理由
こんなページが誕生。
2. 何が起こったの?
Cinderのtargetがエラーになって起動出来なくなる
トリガーは不明。おそらくtarget.serviceのバグ?
ボリューム作る ⇨ インスタンス作る ⇨ 15分くらい放置 ⇨ エラー
Cinderのtargetをrestartすると、target,initiatorの情報が消える
restart後、target lsを打つと何も設定が入ってない状態になる。
手動で追加すれば接続出来る
Computeでiscsiのsessionが残った状態になる。そしてlogoutできない
Computeで、下記エラーログ多発
"Dec 12 11:58:21 dev1128 iscsid: connect to 172.16.4.145:3260 failed (No route to host)"
手動で貼ると解決されます
multiple-storageの設定じゃないとエラーを吐いて、
Cinderのtargetをrestartすると永遠にインスタンス起動出来なくなる
下記エラーを吐きまくる
Dec 16 10:53:08 localhost kernel: connection10:0: detected conn error (1020)
Dec 16 10:53:09 localhost iscsid: conn 0 login rejected: target error (03/01)
インスタンス削除で解決
2. 何が起こったの?
結局、OpenStack IRCで質問したり、
Ask OpenStackで聞いてもわからずNFSに。
3. 仮想マシンが重たい問題
OpenStack 環境と非 OpenStack 環境(一般的なKVM環境)で
同じイメージを使用して、同じリソースを割り当てているに
OpenStackのインスタンスが重い
3. 仮想マシンが重たい問題 - 解決
<domain type='kvm'> , <domain type='qemu'> の違い
kvm に変えたら早くなりました
4. ネットワーク設計が大変だった
どう現状のインフラを保持しつつ、OpenStackを食い込ませるか、
ネットワークの切り方を考えるのが大変だった
下記は議論してた時の様子
4. ネットワーク設計が大変だった
開発環境はこのようなネットワーク構成に。
アドバイス
OpenStackはインストールドキュメント通りやれば
構築出来ます
わからなかったらAsk OpenStackで尋ねると良いですよ
それでも分からなかったらOpenStack導入してる人たちにコ
ンタクト取ってみるのも良いですよ
全ノードshutdown、からの復旧テストは必ずやりましょう
各コンポーネントが死んだ時の再起動コマンド
便利
全コンポーネントが全てshutdownされても復旧出来るか
各コンポーネントの再構築
Cinderでのボリューム拡張、縮小
作成したネットワーク、サブネット、仮想ルータの操作
dhcp_agent が外部 DNS を参照し forward する設定
packstackでAll-In-One構成を構築
OpenStack API
やった検証項目
Controllerが保持してるDBの冗長化
network nodeの冗長化(DVR, L3-HA)
スナップショットの取得
rabbit mqの冗長化
残ってる検証項目
Must
Should
サーバを有り余らせてる方々!
皆さんも(まずは)開発環境にOpenStackを是非!

2人でOpenStackを開発環境に導入した話