Immutable Infrastructure Conference #1 に参加してきた #immutableinfra
- Immutable Infrastructure Conference #1 : ATND
- 2014/03/25 Immutable Infrastructure Conference #1 #immutableinfra - Togetterまとめ
最近は最早バズワード化した感も充分ある『Immutable Infrastructure』。この長〜いフレーズを発音する際に途中発音を噛む人が後を絶たない今日この頃、皆様いかがお過ごしでしょうか。(発音に悩んでいる、何とか噛まないようにしたい!という方は以下のエントリを参考にしてみる事をお勧めします)
さて、本題です。こちらの『Immutable Infrastructure Conference #1』、発表と同時に参加応募者が殺到し、最終的には150人の参加定員に450人近くが応募、約300人が溢れてしまうという何とも物凄い事態に。同じ様な系統・同時期開催(こちらは4/11)の勉強会に以下『Docker Meetup Tokyo #2』がありますが、こちらは現在100人の定員になんと400人の参加申込み!この辺りのインフラ界隈のテーマに関する注目度の高さを物語ってますね。
そんな注目度抜群な当イベントについて、タイミング良く募集開始の報せを知る事が出来参加申込みズサーc⌒っ゚Д゚)っする事が出来たので参加して来ました。ざっくりではありますが当エントリではその内容についてメモを書き連ねて行こうと思います。
開催会場はDeNA@渋谷ヒカリエ。
目次
- 講演
- LT
講演
Immutable Infrastructureが開発プロセスに与える影響(仮)
- 登壇・発表:Naoya Ito (TwitterID:@naoya_ito)さん
スライド資料
講演内容メモ:
- 苦節数年、私もついにDeNAオフィスで話す事ができて感慨深い…!w
- JAWS DAYS参加された方がいるがそこと被る話もありつつ、Immutable Infrastructureの概要やテーマについて。アプリよりの視点からImmutable Infrastructureについて見てみよう、というのが趣旨。
- Disposable components...だとバズワード感が足りない?450人集まらない?w
- 不変な、状態を持たない、廃棄可能な、と言ったほうがより現実を表している?
- サーバの状態、半年ぶりに行うRailsアプリのデプロイ。それ動くのか・果たしてデプロイは正しく終わるのか?
- 管理する手段:手順書/自動化/サーバー管理DB/Chef/Puppet...?
- サーバー状態をコードで管理出来るようになった。
- でも、状態管理が面倒ならしなくてもよい?→Immutable Infrastructureの始まり。
- チャドファウラーの(有名なプログラマーの、って事しか知らないw)Blue Green Deploymentがこのテーマを語る上でわかりやすい。(詳細:「Blue-Green Deployment」とは何か、マーチン・ファウラー氏の解説 - Publickey)
- 新しくLBを切り替える事で、トラフィックが切り替わる。ちなみにこれは仮想化環境が前提。オンデマンドで環境を作成し、プログラムを動かせる状態にしておく必要がある。なので自動化も必須。
- まぁ、いわゆるアレですね...(と前置きし、数日前に盛り上がったという以下フレーズ画像を表示)
- Herokuではgit pushする際、新しい環境(コンテナ)を作り、古い環境を棄てている。また、Travis CIもテストを実行する度、コンテナを作り終わったら棄てている。こういうのを採用すると、1時間に1000回デプロイする(AWS)ってのも出来るようになる。
Immutableになる影響について
- 1.アーキテクチャの影響
- ある意味不自由になる。アプリ開発者からすると今までのやり方が通用しなくなる。
- 制約:制約は必ずしも悪いものではない。(例...REST, ステートレスなHTTPとWWWなど) 制約を受け入れる事でよい側面もある。
- Immutableな制約がもたらす影響:アプリの設計にも良い影響を及ぼす。
- 2.再現可能なアプリケーション
- どこでも再現できる、というのは重要。**** as a serviceに放り込む事が出来る。
- 開発環境とプロダクションを同一視出来、横展開のスケールが容易に。
- テストを通ったらherokuとかにあげちゃえ、というサービスも出て来ている。
- 3.テスト容易性
- 再現可能かつステートレスかつシェアードナッシング。。。いかにもテストしやすい形に。
- 4.上書きデプロイからコンテナベースのデプロイへ
- 既存環境を上書きするのではなく、オンデマンドで新しい環境を作り出す。
- Quipper社の事例:
- まとめ:Immutable Infrastructureの現在
- 開発者が試行錯誤を繰り返している状態。いろいろ必要な部分が作られている。
- privateなpaaasが欲しい、ではなく、既存インフラの一部を動的にしたい、というユーザーが注目
- ユーザーはコンテナベースのデプロイの利益を体感し始めている
- これから:
- Immutable Infrastructureによって、今まで固定的だと考えていたコンポーネントが動的・オンザフライに。
- 昨今のサーバ/インフラパラダイムとしての集大成として、色々な概念や実装がImmutable Infrastructureに集約されていくのでは。結果的にアプリ設計や実装も影響を受けて行くと思う。
Immutable InfrastructureとProvisioning Testing
- 自己紹介
- mizzyとかの方がわかりやすいかも知れません。
- serverspecを作ってます。
- 今回はImInとServerのテストについて話します。というよりもコンテナと、Provisioning Testingについて話を。
- Provisioning Testing、あまり聞いたことがない?耳慣れない言葉。→ソートワークス:テクノロジーレーダーの技術動向をまとめたホワイトペーパー。2014年1月版に項目が出て来ている。言葉の意味としては、アプリ開発に於けるTDDのようなものを応用したもの、の意。テクノロジーレーダー2012年02月版で、既にImmutable Serversという言葉が出て来ている。
- コンテナとProvisioning Testingの関係
- コンテナをテストに利用:既にやっている人も居るし、ブログエントリもある。
- コンテナといえば、docker。これとセットで語られる事が多い。宮下氏自身、dockerがOSSになる頃にpuppetで同じ様な機能を作っていた。そしたらdocker2〜3日後に出て来て何だよ!となったw
- ちなみにdockerもテクノロジーレイヤーに乗っている。
- コンテナをテストに使うメリット=軽量で起動が早く、リソースも少なく済む。結果テストサイクルが速くなる。
- コンテナをテストに使う際のデメリット
- マシンの仮想化ではない。OSの領域を区切る形。hypervisor的なものとは仕組みが異なる。
- コンテナにも2通りの起動方法があり、システムコンテナとして起動すると普通のVMのように見えるが、微妙に違う部分があってはまる。
- iptablesの制御ができない/ntpdが動かない等。
- プロビジョニングで別if in_container みたいな処理が必要に。
- ホストがubuntuでゲストがcentosという構成でハマったり。upstartやinit周りの挙動とか。
- プロダクションがベアメタルやハイパーバイザー型マシンでテスト用リソースが豊富にあるなら、コンテナは無理にはお勧めしないが、止めもしません(笑)
- コンテナをプロダクションで使う場合のProvisioning Testing
- 1コンテナ、1サービスを。apache用コンテナ、nginxコンテナ….etcなど。システムコンテナに対してアプリケーションコンテナと呼ぶらしい。単機能・疎結合なコンテナを組み合わせてシステムを作る形。
- ホストOSとコンテナの機能分離が実現可能に。先程出て来た不具合周り、コンテナの吐いたログを任すのはOSでも良くなる。
- テストの分離:テスタビリティ向上にも貢献。コンテナがわはむしろテストが要らなくなる?状態のテストよりも振る舞いのテストが重要に。とはいえ振る舞いテストは要件ばらばらで、まだ決定的なルールはない状況。serverspec/specinfraをベースに作るかも?
- まとめ
- Provisioning Testingでのコンテナの利用:プロダクションがコンテナじゃないなら無理におすすめはしないが止めもしません。
- プロダクションでコンテナを使う場合のProvisioning Testingはテスタビリティが向上、状態のテストよりも振る舞いのテストが重要だし、今後の課題でもある。
SerfというOrchestrationツール
スライド資料
講演内容メモ:
- 自己紹介
- focuslightのメンテナしてます/http postするだけでグラフが見れる。
- Yohoushi:分散focuslightグラフツールも。
- fluentdのコミッタもやってます。
- Serfというツールについて
- Serf:オーケストレーションツールの一種。
- サーバー群のクラスタリング、ロードバランサに追加したり、監視を入れたり、サーバ管理ツールに登録したり、という他のツールと連携するための作業を行う。手でコマンド叩いたり。serfもここをカバー。
- Blue-Green Deploymentの切替時に用いる。
- インフラ作業あるある:諸々のオーケストレーション作業も、欠かせないタスク。
- オーケストレーション作業、1台でも面倒なのに100台一気に入れ替えるとか、1日10台BGdeploymentするとかなると…もう\(^o^)/オワタ状態に。→serfで自動化!
- 設定・実行例:Serf agentの起動/serf join/イベントハンドラ/Serfで/etc/hostsの更新
- サーバが起動したら自動で監視設定、自動でサービスイン出来るように
- その他思ったことやまとめなど
- 実際、どの位の時間で伝播されるのか?→30ノードで1.25s、100ノードでも2s程。
- イベントをどのノードに発火すべきか
- ImmutableインフラにはAgent型が適している
- Serfで中央集権型の仕組みをAgent型に変えると諸々捗る。
Mesosを使ったImmutable Infra管理システムを作ってみた
- 登壇・発表:tatsuru (TwitterID:@tatsuru)さん
スライド資料
講演内容メモ:
- 自己紹介
- はてなの人です。
- 先日のJAWS DAYS 2014で発表しました。(任天堂セッションにて)
- ImInを構築してみたのでその中身について語ります。
- Immutable Infrastructure、流行ってますね。でも今実際、どこまで出来るんだろう?→で、作ってみた。開発合宿ネタとしても良さそうだったので。
- git push/docket build/test/deploy-ready/deployの流れに。
- 仮想化についてはdockerを前提に。テストやデプロイについてもjenkins/差分ビルド、serverspecを採用
- クラスタ管理の話
- 規模が小さければまだ手作業で管理出来るが、多くなると何らかの管理が必要に。
- 自前であれば自前:1 active vmやhost、Serf等
- 全部入りであればopsnstackやcloudfoundryなども視野に。
- 今回はリソース管理システムとしてApache mesosを使ってみた。
- mesosの話
- Log収集の話
- fluentdを用いる。(コンテナ内supervisor経由で)
- 最近、docker log に関する興味深い内容があった。→collection inside container
- Metrics
- サーバメトリクス:サーバが頻繁に入れ替わるので、サーバ単位ではダメ
- ホストからcgroup,netstatを使う。
- サービスのログについては従来通りの対応で。
- まとめ:ホスト単位だと運用が難しい。agent型もありなのでは。台数課金なサービスはつらい。newrelicなど aggregationが課題
- 皆大好き監視の話
- sensuのスーパーバイザーをエージェント型で起動。
- モニタリングのビジュアル化:sensuのエージェント型。ログと同じパターンで運用出来そう。helper containers
- 全体の構成:オーケストレーション。まとめ約が必要。
- ダッシュボード、マスタデータなど
- アプリのリポジトリ
- クラスタに持たせる - serf
- 中央で管理する何か...aws elastic beanstalk/Newrelicで頑張る/自作 等
- まとめ:
- Immutable Infrastructure環境を作ってみた。
- 課題もいろいろ。クラスタ管理/ログ集約/メトリクスモニタリング
- この分野はこれだ! というツールがまだない印象。ドンドン作ってみましょう!そして色々教えてください。
Docker + HAProxy + Synapse
来るべき時に備えて Immutable Water 買ってきたのにみんなまじめだ #immutableinfra
— Issei Naruta (@mirakui) 2014, 3月 25
mirakui氏:
『immutable waterを買って来たのですが、若干圧力を感じてます...w』
Immutable Water だww #immutableinfra
— con_mame (@con_mame) 2014, 3月 25
immutableウォータをカシャプシュッとw #immutableinfra
— なおと@ (@tnaoto) 2014, 3月 25
mirakuiさん: Immutable Waterで乾杯。これ中央集権型です。決してパワハラではありませんwww #immutableinfra
— Kaoru Maeda 前田 薫 (@mad_p) 2014, 3月 25
- Synapse
- airbnb/synapse
- airbnbが作った、任意のサービスディスカバリをhaproxyに反映させるもの。
- なぜSynapseか?
- クックパッドでも同様にサービスディスカバリによってhaproxyを自動更新するという実装をしているので興味を持った。
- Pure Rubyである事はありがたい!Rubyだから読めるし。Not Javaってところも(ry
- クックパッドで行ってる事
- 同じロールタグをもっているものにstatus:workingを付与し、working状態の内容によってサービスインを実行
- Synapseの動作も同様にステータスで管理。起動もインストールも簡単。
- ディスカバリの種類を設定ファイルで指定。
- 対応しているディスカバリ:DNS/Docker/EC2 tag/Zookeeper
- EC2、Tag対応してる?と思ったら動かない...良く見たら...コードがコメントアウトされたままにww (結局対応してませんでした!)
↓
そして実演デモへ。
mirakui「すみませんね、ちょっと、Immutableな感じになって…」 #immutableinfra
— Gosuke Miyashita (@gosukenator) 2014, 3月 25
酔っぱらいだ #immutableinfra
— あそなす (@asonas) 2014, 3月 25
何でもかんでもイミュータブルと付ければ許されるのは今晩までですぞ #immutableinfra
— ブラッド・ピット (@kenjiskywalker) 2014, 3月 25
そして、
マウスポインタの位置を示してくれるやつなんだろう。あれいいな #immutableinfra
— なおと@ (@tnaoto) 2014, 3月 25
どうやらこれの模様。
- まとめ・雑感
- 動く。
- ディスカバリと連携してhaproxyの設定を書き換えたりリロードしたりするという実装はオモシロイと思った
- airhubやzookeeperを駆使しているなので、Zookeeperのwather以外の実装には興味ない?
Immutable Infrastructure時代のサーバー管理
スライド資料
講演内容メモ:
- 自己紹介
- はてなCTO
- 『引き続いてイミュータブルな感じで行きたいと思います。』
- サーバ管理といえば…
- zabix/nagios+munin/sensu/aws cloudwatch… いろいろあります
- サーバ管理の基本
- ホスト1台1台を認識、そのうえで用途やミドルウェアを認識
- Blue Green Deployment: ホストが使い捨てられてしまう状態
- Auto-scaling: ホストが勝手に増減してしまう
- ※『ホスト』の流動性が高まってくる状態に。
- Role Based Management
- 役割でホスト集合を管理。ホスト名に意味を持たせない構成に。
- サーバに名前を付けるという行為はもはや古い慣習、クラウドネイティブな試行を妨げる足かせになる。
- 実装案
- EC2のタグや、独自DBを整備。これで、ホスト群を集合的に扱えるようにする。
- role="web","db"
- Autoscalingでもタグが付与される
- これで出来る事
- デプロイ時のホスト一覧を取得
- ホストへの一括sshログイン
- 役割(=ホスト集合)単位でのメトリクス情報可視化
- EC2のタグや、独自DBを整備。これで、ホスト群を集合的に扱えるようにする。
- ホスト集合と"世代"
- デプロイプロセスとサーバ管理の融合
次いでLT。飛び入り参加者+1名の計4名によるLTとなりました。
LT
LT: chefからdockerへの鞍替え / BRS (TwitterID:@xga)さん
味わいある #immutableinfra
— そらは (@sora_h) 2014, 3月 25
LT: Docker使ってたらロードアベレージが80超えた話 / ゆううき (TwitterID:@y_uuk1)さん
y_uuk1さん: Docker使ってたらサーバーがゴミすて場みたいになってた #immutableinfra
— Kaoru Maeda 前田 薫 (@mad_p) 2014, 3月 25
#immutableinfra このやっつけ感たまんないwwwwwww
— nntsugu (@nntsugu) 2014, 3月 25
「株式会社はてなではこういうキレイ好きな人を募集しています」 #immutableinfra
— Hiroyuki Morita (@chiastolite) 2014, 3月 25
LT: 実際にやってみた / ✌ʕ ◔౪◔ ʔ✌ (TwitterID:@katzchang)さん
Immutable Infrastructure周りのツールを現場で使ってみた際の『つらい』ポイントを列挙し発表。
知らなかった!!!!なにこれ!!!! #immutableinfra / “AWS & New Relic Server & User Monitoring, Website Optimizer, : New Relic” http://t.co/hsPi6pvx8h
— kenjiskywalker (@kenjiskywalker) 2014, 3月 25
LT: AWSを使った事例紹介 / ikikko@リアルJenkins (TwitterID:@ikikko)さん
飛び入り参戦。Immutable Infrastructure環境構築で取り組んだ内容についての解説。
まとめ
という訳で、記念すべき第1回目の勉強会の模様を振り返ってみました。この分野(フレーズ?)は最近一気に注目されている一方で、(登壇者の方々もコメントされてましたが)まだまだ試行錯誤や情報の共有や展開でより良い環境への改善へと繋げて行く取り組みも必要となっている状況です。私自身今回のキーワードもほぼ初見(見てはいたけど触ってはいなかった、という方が正しいか)な状況で臨んだので、その点では全ての内容がとても勉強になりました。会場ご提供頂いたDeNA関係者の皆様、登壇者の皆様ありがとうございました!