MesosとCephのクラスタをAWSに構築するTerraformのmoduleを書いた
冬休みの宿題として、Mesos+Docker でアプリちゃんと動かしたい!→Shared Filesystem が欲しい →Ceph やりたい!→AWS の orchestration が必要 →Terraform 面白い!という yak shaving を経て、なぜかずっと Terraform をいじってました。とりあえずちゃんと動くのができたので公開。
- riywo/mesos-ceph
- Terraform module for Mesos + Ceph cluster and Packer template – As a SW/Ops/DB Engineer
細かい話は 1 年ぶりの英語で適当に書きなぐったつもりなので、こちらにはポエムでも。
Terraform 面白い
このブログとかを移行しようと考えてて、AWS を遊びじゃなくて運用しようとしたら、VPC とかサーバ以外に管理しなきゃいけないのが多すぎて( ゚ д ゚)ポカーンってなってました。CloudFormation でもよかったんですが、せっかくなので Hashicorp products 遊んでおこうと思って Terraform を選びました。
作るべき resource を定義していけばある程度自動で dependency graph を作ってくれるのはいいですね。Atlas も試用してたんですがまだ作りかけな感じだったので普通の使い方しかしてません。destroy ってすれば作ってた環境を全消しできるので、マニュアルでやってていろんなゴミが残るのとかを気にせずに作っては壊すことができました。DSL はかなり strict になっているので、できることが限られますが、逆に削ぎ落とすことができるので良かったですね。template 的なものとか variable に list を設定できるようになればもっと表現力が上がりそうで今後に期待。
ちなみに、document とかにはよく AWS の access key とかをベタ書きしてありますが、コード読むと環境変数から読む機能が既に入ってるので、実は書かなくていいんですよね。
Packer も面白い
リリース以来久々にさわりましたが、こちらもよくできてる。ある AMI を元に新しい AMI を作るのが凄まじく簡単でした、まるで Dockerfile の様。そして実は Docker image も作れるという。
ただ、VPC をあんまり考えた作りにはなってない様で、その辺が組み込みになると良さそうだなーと思いました。今回は Packer 用に適当な VPC+subnet を作っておいて環境変数経由で渡してます。Terraform よろしく key pair みたいに temporary のをその場で作ってくれるとうれしいですね。t2 な instance は VPC 必須なのでこの辺対応は必要そうだから PR しようかしら。
Ceph 構築めんどい
これが一番苦労した。なによりも手順が多い。最初は provisioning 自作しようかなと思ったけど、結局 ceph-deploy に落ち着いた。認証とか別にいらないんじゃないかなーとか思わないこともなかったけど、一応セオリー通り作ってみました。
ちなみに作ってみたら見事に動作してて感動しました。mon の instance を terminate して、Terraform で apply しなおすとちゃんと provision しなおして cluster に rejoin できた時はやった!って声がでました。osd も admin も同様にいつ死んでも復活できます。どの instance もゼロから作りなおせるのに、一度作った cluster は情報の海の中でずっと生き続けているというのがなんともスピリチュアルだなぁと思いましたまる
で、Ceph(CephFS)を入れた理由は Mesos/Marathon/Docker なプロセス間でどうしてもファイルの共有ないと辛いよなーと思った次第。例えば WordPress 動かすと、アップロードされる画像とか DB に入らない情報を store しないといけないわけで。今回 CephFS を作れたので、あとはこれを Docker に mount してあげればいいはず。
Mesos だと HDFS が標準的っぽいけど、そもそもあれは Filesystem として使うにはアレだし、このために Hadoop 構築するのもダルいし、というわけで CephFS を試しました。Mesos がなにか distributed shared filesystem を標準で取り込んでくれるといいんだけどなぁ。CephFS はまだ production ready じゃないのがあと一歩だけど、S3/Swift 互換の Object store にもなるし、そもそも block device としても使えるので、あると便利だと思うんだよなー。
Mesos 何もはじまってない!
本当は Mesos つかってアプリ動かすはずだったのに、なぜかずっと Ceph や Terraform の勉強してて一向に進んでなかった。やっと構築方法が確立したのでこれから本来やりたかったことが始められるはず、、、ちょっと力尽きたけど。。。
1 年間スルーしてる間に Mesos に Docker 対応もとりこまれてたし、Mesosphere は DCOS を来年出すみたいだし、本格的に面白くなる 1 年なのかもなー。