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

9,948 views

Published on

Published in: Technology
0 Comments
44 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,948
On SlideShare
0
From Embeds
0
Number of Embeds
732
Actions
Shares
0
Downloads
62
Comments
0
Likes
44
Embeds 0
No embeds

No notes for slide

明日から始める 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 で省力できる ただし、罠は結構残っている状態 始めるにはコスト覚悟の上で 長い目で見て使って行きましょう

×