Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

明日から始める Chef 入門 #bpstudy

10,196 views

Published on

Published in: Technology
  • Be the first to comment

明日から始める Chef 入門 #bpstudy

  1. 1. (株)タイムインタメーディア小宮健http://www.flickr.com/photos/yelpar/6678239091/
  2. 2. 自己紹介:小宮 健 仕事 (株)タイムインターメディア所属 テクニカルオフィサ(技術責任者)として活動 参加コミュニティ Sphinx-users.jp Python mini hack-a-thon Chef 歴 1年ぐらいTwitter: @tk0miya
  3. 3. サーバ構築、どうやっていますか 手順書ベース サーバ設定シート (から推測) Wiki に集約 職人芸 (担当者しかしらない) 構築依頼 / アップデート依頼(申請制)
  4. 4. よくある話 記述通りに構築しても動かない そもそも記述通りに進まない そもそも手順がまとまっていない 隣の人と入っているパッケージが違う なぜかサーバごとに設定が違う(歴史的経緯) 手順を飛ばして本番で事故る バッチが停止したままだった 何十台も手作業で設定してるとつい… 手順書にはクロスチェック欄がある
  5. 5. そうだ自動化しよう シェルスクリプトでまとめる PXE + kickstart によるインストール sed/awk などによる設定ファイル書き換え PHP で設定ファイルを生成したことがあります オレオレパッケージを作る
  6. 6.  本番環境と同じ方法で開発環境を構築せよ 本番用スクリプトでは最後までテストされない 開発開始時点から環境構築を自動化する この書籍では puppet が紹介されている継続的デリバリー
  7. 7. 自動化ツールについて調べてみた 自動化ツールの種類 (@tk0miya 調べ) アプローチの違い 手順ベース 定義ベース インストールが必要か 共有リソースの有無
  8. 8. 手順ベース 実行するコマンドを羅列する シェルスクリプトも手順ベースに含まれる 例:run "apt-get -y install nginx”sudo "curl -o /etc/nginx/sites-availablehttps://.../nginx/default”sudo "/etc/init.d/nginx restart”
  9. 9. 定義ベース システムのあるべき姿を定義する nginx が入っている nginx は /var/www/html を公開している 冪等性(べきとうせい)を持つ 何度実行しても同じ結果になる 例:package "nginx" doaction :installendfile "/etc/nginx/sites-available/default" dosource “nginx-default” # 用意しておいた設定をコピーするend
  10. 10. 定義ベース vs 手順ベース 手順ベース コマンドベースなのでわかりやすい 何度か実行することを想定していない(ものもある) 現在の状態を意識する必要がある 手作業とまぜやすい 定義ベース 定義の仕方を覚える必要がある 何度実行してもよい 状態は意識しなくてよい (大抵は) 定義に基づいて手作業の結果が消えたりする
  11. 11. インストールが必要か 構築するホストにインストールが必要かどうか インストールが必要なタイプ クライアント・サーバ構成のもの 各ホストにクライアントを入れる必要がある インストールが不要なタイプ SSH でコマンドを逐次実行させる 実行するマシンにだけインストールが必要
  12. 12. 共有リソース よく使う定義(手順)は共有されているか nginx のインストール定義を毎回書きたくない 各言語のパッケージリポジトリのようなもの rubygems, PyPI, CPAN, PEAR
  13. 13. 環境構築ツールの比較名前 言語 種別 インストール共有リソースPuppet Ruby 定義ベース○ ○Chef Ruby 定義ベース○ ○Salt Python 定義ベース○ ×Ansible Python 定義ベース× ×Cinnamon Perl 手順ベース× ×Capistrano Ruby 手順ベー × △
  14. 14. (株)タイムインタメーディア小宮健http://www.flickr.com/photos/yelpar/6678239091/
  15. 15. Chef がカバーしてくれること OS/distro. パッケージの操作 ファイル操作 サービスの起動/停止 ユーザ作成 gem, python パッケージのインストール VCS (git, hg, etc) からのダウンロード などなど
  16. 16. Chef の特徴 定義ベースの構成管理ツール Cookbook という定義を持つ 冪等性を持っている 各ホストへ chef のインストールが必要 共有リソースをもっている Opscode Community 皆で Cookbook を共有している github でも公開されている
  17. 17. Chef を使っている企業 37 signals Facebook CyberAgent Amazon OpsWorks
  18. 18. Chef の種類 Chef-Server / Chef-Client 大規模用 ホスト間の連携 設定の自動反映 Chef-solo 単体で稼働する (実行ホストの設定をする) 手動で実行する Hosted Chef ASP版 Chef-Server
  19. 19. どの Chef を使えばいいの? Chef-solo Chef の概念を把握したい人 管理対象のホストが20台以下の人 Chef-Server / Hosted Chef 大量のホストを管理してる人 今回は chef-solo をベースに説明します
  20. 20. Chef のインストール 事前に以下の設定を済ませておく必要がある OS のインストール ネットワークの設定 sudo 可能なユーザ作成 (chef-solo を使う人のみ) この部分は PXE/kickstart/AMI などでカバー
  21. 21. Chef のインストール Chef-Server Opscode.com から rpm/deb をダウンロード Chef-Client / Chef-solo 以下のコマンドを実行curl -L https://www.opscode.com/chef/install.sh | sudobash /opt/chef 以下にファイルがインストールされる 一部、/usr/bin, /etc/chef にファイルが入る
  22. 22. chef で環境構築をしていく流れ1. 設定する対象を決める 例: ntpd をインストールする2. community site で cookbook を探す3. 試してみる4. 合わなかったら自分で書く
  23. 23. community site で cookbook を探す http://community.opscode.com/ にアクセス 検索ボックスにキーワードを指定してみる 例: ntp ダウンロードした tarball を展開しておく
  24. 24. community cookbooks を使ってみる chef-solo 実行用のファイルを作る solo.rb chef-solo の設定ファイル。ディレクトリ等を設定 solo.json run_list: 実行する cookbooks を列挙 attributes: 設定情報 設定できる値は cookbook の README 参照のこと ntp の設定情報
  25. 25. community cookbooks を使ってみる solo.rbfile_cache_path "/home/app/chef-solo/cache"cookbook_path "/home/app/chef-solo/cookbooks” solo.json{"ntp" : {"servers" : ["ntp.nict.jp”]},"run_list" : ["recipe[ntp]”]}
  26. 26. community cookbooks を使ってみる chef-solo を実行する$ sudo chef-solo -j solo.json -c solo.rb
  27. 27. community cookbook が合わない場合 望みどおり設定されない… 希望どおり設定できない 特殊なビルドオプションを指定したい cookbook がバグっていて動かない そんな場合は自分で cookbook を書きます
  28. 28. Cookbook の作り方 (簡易版) knife コマンドでひな形を作る $ knife cookbook create my_cookbook -ocookbooks my_cookbook/recipes/default.rb を書き換える この資料では代表的なものを紹介します 詳細はドキュメントや他人のコードを参考のこと
  29. 29. Cookbook の作り方 (簡易版) パッケージを入れたい場合package "ntp” サービスを自動起動にするservice "ntp" doaction [:enable, :start]end
  30. 30. Cookbook の作り方 (簡易版) ファイルを書き換える場合cookbook_file "/etc/ntp.conf" do# files/default/ntp.conf がコピーされるsource "ntp.conf"# 書き換えたら再起動notifies :restart, "service[ntp]"end
  31. 31. Cookbook の作り方 (簡易版) その他 (shell script 実行)script "some special process" dointerpreter "bash"code <<-EOHcurl -O http://.../ntp-4.2.6p5.tar.gztar xzf ntp-4.2.6p5.tar.gzcd ntp-4.2.6p5./configure; make; make installEOH# インストールされていたら実行しないnot_if { ::File.exists?(/usr/local/sbin/ntpd) }end
  32. 32. 利用事例の紹介 Rails アプリ環境を作る 案件で利用した cookbook をお見せします Jenkins サーバを構築する EC2 上で Jenkins サーバを立てます 時間があれば
  33. 33. 利用事例の紹介 Rails アプリ環境を作る ネットワーク設定 iptables, SELinux 無効化, timezone, NTP OS 設定 Yum の設定 (EPEL, repoforge) logrotate, rsyslog Nginx, postfix 開発言語/ツール Python (Ruby は capistrano でインストール) Vim, screen, git, mercurial Jenkins + TeXLive
  34. 34. chef-solo 周辺ツール紹介 vagrant 仮想環境の CLI 操作ツール VirtualBox, EC2, VMWare Fusion などに対応 ヴェイグラントと読むらしい chef の試行錯誤に VM を使い捨てて実験する librarian-chef / berkshelf Community/githubからcookbooksをダウンロード cookbooks 同士の依存関係も解決する bundler, requirements.txt のような位置づけ
  35. 35. chef-solo 周辺ツール紹介 knife-solo / paratrooper-chef chef-solo をリモート実行するツール knife-solo は単体コマンド paratrooper-chef は capistrano 経由
  36. 36. chef に関する情報源 公式ドキュメント (docs.opscode.com) 伊藤直也さんの電子書籍 用語などの基礎が押さえられます #opschef, #opschef_ja 各種 chef 勉強会 (おまけ) id:tk0miya のブログ
  37. 37. 待ち構えている罠たち community cookbooks の不備・不足 動かないものがある 似たようなものがたくさんある users, generic-users, users_solo, user, accounts 長時間ハマる前に見切りをつけて、新しく書く できればパッチを投げましょう :-) 全員が chef を覚える必要がある 手作業でいじったものは失われてしまう
  38. 38. 待ち構えている罠たち まだ定石が存在しない 多くの人がまだ手探りで使っている みんなで情報共有していく必要がある テストが難しい やったつもりが出来ていないのを防ぐ Chefspec, Serverspec あたりを使うらしい
  39. 39. chef ってどれくらい幸せになれるの? 覚えるまでに苦労がある 新しい設定で苦労する postfix の設定で半日かかった (手動なら 10分) 再利用、量産すると効果が出てくる 運用はまだまだ経験/知識が必要そう
  40. 40. まとめ chef を使うと環境構築ができる community cookbooks で省力できる ただし、罠は結構残っている状態 始めるにはコスト覚悟の上で 長い目で見て使って行きましょう

×