Upload
takeshi-komiya
View
9.684
Download
4
Embed Size (px)
Citation preview
Chef の気まぐれ環境構築〜季節の Capistrano を添えて〜
( 株 ) タイムインタメーディア小宮健 (@tk0miya)
http://www.flickr.com/photos/chiotsrun/4464944256/
自己紹介:小宮 健
仕事( 株 ) タイムインターメディア所属
参加コミュニティSphinx-users.jpPython mini hack-a-thon
Author of blockdiagChef 歴 1.5 年ぐらい
Community cookbook 推進派ですこつこつ Pull Req. 投げてます
Twitter: @tk0miya
chef を使って環境構築しよう
OS の設定Yum/Apt, NTP, Firewall, etc…
ミドルウェアのインストールJDK/JRE, Ruby, Python, PHP, etc…Nginx/Apache, MySQL, memcached,
etc…アプリのデプロイ
あれ、どうやってやるんだろう ?
chef でアプリをデプロイする
application cookbook を使うOpsCode 公式 cookbook
Java, PHP, Python, Rails に対応
利用事例が少ない ( ググりづらい… )運用方法がよく分からない
バージョンアップの仕方切り戻しの方法実験的に一部のサーバにだけ入れたい
デプロイ時にやること
アプリ ( ソースコード / バイナリ ) の配布リリース前の準備
asset precompileJavaScript Compile/minify
トラブル発生時のバージョンダウン ( 切り戻し )
DB Migrationデータ修正一部の操作は『冪等性』と相性が悪く、 chef に任せづらい
Capistrano
手元の端末からデプロイを行うツールデプロイ以外のメンテナンス用途にも使
える切り戻しが考慮されている情報がたくさんある
デプロイは専用ツールの方がやりやすい
Capistrano/Chef を組み合わせる
環境構築 / 更新は chef-soloアプリのデプロイは capistrano
それぞれの長所を組み合わせる
+
なぜ chef-solo なの ?
扱うサーバの台数が少ない ( 〜 10 台 )chef-server を使うのは大げさchef-server を入れるリソースがもったいな
い
ほとんど構成が変化しない運用・保守に入ると変化が少なくなる定期的にセキュリティアップデートをするぐ
らいChef-client 分のメモリが惜しい
Let's cooking!
まずは chef-solo で環境を作ろうChef-solo といえば knife-solo ですよ
ねid:naoya 本は必読ですよ
えっ?ホスト名を並べなくちゃいけないの !?
$ echo [email protected] ... | \ xargs -n 1 knife solo cook -i your.pem
knife-solo の残念なところ
ホストを列挙しないといけないそれ AWS SDK でできるよ
並列実行できないそれ xargs -P でできるよ
自動化用にスクリプトを書かなくちゃ…それ capistrano でできるよ
それ capistrano でできるよ
ホストを列挙しないといけないAWS SDK で対象ホストを自動抽出Web にはサンプルが大量にいくつか gem もあるよELB 配下のホスト、タグ検索、特定の名前…
並列実行できない基本的にすべての処理が並列に行われるmax_hosts 指定で制限も掛けられる
capistrano 経由で chef-solo を実行する
AWS SDK で対象ホストを抽出するcookbook などのファイルを転送するchef-solo を実行する
capistrano 経由で chef-solo を実行する
たくさんブログ記事があるgem もいくつもある
capistrano_chef_solocapistrano-chefcapistrano-chef-soloyyuu-capistrano-chef-solochefistranoroundsman
capistrano 経由で chef-solo を実行する
gem はいくつもあるが…試しに作ってみた系の実装が多い
data_bags, roles に対応していないdata_bags の暗号鍵も対応してないなぜか /tmp 以下で作業している…Attributes を deploy.rb に書くことになっ
ているホストごとに設定を切り替えられない
というわけで、新たに作ってみましたparatrooper-chef
http://www.flickr.com/photos/thenationalguard/8029811025/
http://www.flickr.com/photos/thenationalguard/8029811025/
【 Paratrooper 】落下傘兵 《 paratroops の一員》 .
http://www.flickr.com/photos/thenationalguard/8029811025/
http://www.flickr.com/photos/thenationalguard/8029811025/
【 Chef 】コック ; ( 特に )( レストランなどの ) コック長 .
This is paratrooper-chef
既存の gems との違い
roles や data_bags に対応data_bags の暗号鍵も扱えるlibrarian に対応
berkshelf は次バージョンで対応予定ホスト毎に設定が変えられるWindows でも動く (rsync を使ってい
ない )
使い方
deploy.rb の中で require する
config/cookbooks に cookbooks を配置
config/solo.json を作るcapistrano を実行する
require 'capistrano-paratrooper-chef’
$ cap paratrooper:chef
paratrooper-chef デモ
デモやります。
今回は paratrooper-chef を使っていますが、もちろん capistrano も同様のことができます
Q. chef のインストールもやってほしい
対応してます。omnibus installer 経由 / gem 経由deploy:setup でインストールされるよ
うにsee README.md
Q. ホスト毎に設定を変えたい
knife-solo っぽい仕組みを用意
ホスト毎の定義ファイルを用意しておくconfig/nodes/[hostname].json
接続先のホストによって自動的に切り替え見つからない場合は config/solo.json を使
う
Q. cookbook マネージャを使いたい
librarian に対応Cookbook 転送時に自動的に librarian 実
行ユーザは Cheffile を書いておくだけ
次バージョンで berkshelf に対応予定
Q. capistrano 使ったことないんだけど
knife paratrooper init コマンドを用意knife solo init っぽいもの必要な構成ファイルを生成してくれる
近日リリース予定knife-paratrooper パッケージとなる予定
Q. Capistrano のロールをうまく使いたい
capistrano では、対象ホストにロールを設定
role :web, "210.xx.xx.xx”role :app, "210.xx.xx.xx”role :db, "210.xx.xx.xx"
chef でもこのロールを使えないだろうか ?chef_roles_auto_discovery 機能
chef_roles_auto_discovery
Capistrano と Chef のロールを対応付ける
対応する Chef のロールがあれば自動適用
例 :role :app, “210.xx.xx.xx”# => config/roles/app.json が ( あれば )適用される
chef_roles_auto_discovery + AWS SDK
AWS SDK と組み合わせると…インスタンス名 (Name) でロールを決め
るweb01 → web ロールapp01 → app ロール
タグによってロールを決めるrole=web,app → web ロールと app ロー
ルを適用
Capistrano + chef-solo の弱点
規模が大きい場合はやっぱり chef-serverデプロイ方法も変化するかも ?
AutoScaling には別の仕組みが必要CloudInit など運用中は capistrano も組み合わせるこの部分はまだ模索中
まとめ
アプリのデプロイは capistrano が便利小規模環境なら chef-solo を使いたくな
るCapistrano + chef-solo の組合せは使
えるそれ paratrooper-chef なら簡単にでき
るよ
http://www.flickr.com/photos/thenationalguard/8029811025/
Enjoy cooking!