BPStudy#68に参加しました #bpstudy

詳細

テーマはChef。

入門からChefの実運用例まで。

所感

  • 入門Chef Solo - Infrastructure as Code を読みながらChef Soloで遊べるようになるまで で入門していたので復習も兼ねて
    • Chef Server / Chef Clientはまだ試していない
  • レシピのテストってうまい事できないのかな?
    • 文法チェック以上、Serverspec未満の事は今のところ直接実行して確認してる
    • vagrantでvm作る、実行、壊すを繰り返し
  • iptablesとか、SELinuxあたりの設定は会社によって or 案件によって固定で、かつそんなに変更がないと思うので、ここだけでも速やかにChefで管理したいな

第1部 明日からはじめる Chef 入門

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

サーバ、どうやって構築している?

手順書?Wikiを見て?職人がやってる?

よくある話

  • 手順書通りにやってもうごかない
  • サーバごとに設定がちがう
  • 手順を飛ばしちゃって事故る
    • 手作業で複数だいは辛い
    • クロスチェック欄など…

自動化しよう!

どうやってやる?

  • シェルスクリプト
  • PXE + kickstart
  • sed/awk
    • PHP
  • オレオレパッケージ

環境構築について、継続的デリバリーにはこう書かれている。

本番環境と同じ方法で開発環境を構築する

自動化ツールについて

アプローチの違い

  • 手順ベース
    • 手順を意識する必要
    • 手作業と混ぜやすい
  • 定義ベース
    • あるべき姿を定義(例: nginxが入っているべき)
    • 何度実行してもよい = 冪等性 を持つ
    • 定義の仕方は覚えないといけない
    • 大抵は 、状態を意識しなくてよい

インストールが必要か

  • インストールが必要、各ホストにクライアントを
  • sshで流しこむのか

  • 共有リソースの有無

    • よく使う定義の手順は共有されているか
    • 書く言語のパッケージリポジトリのようなもの

他の構成ツール

  • 定義ベース
    • puppet
    • chef
    • salt
    • ansible
  • 手順ベース
    • cinnamon
    • capistrano
    • fabric

こんなにあるとは…fabricとpuppetくらいしか聞いた事なかった。

Chef

Chefができること

  • OS、ファイル、パッケージの操作
  • サービス起動/停止
  • ユーザ作成
  • gemなどのインストール

Chef特徴

  • 定義ベース
  • 各ホストにChef(Ruby)のインストールが必要
  • 共有リソースを持っている

Chefの種類

  • Chef-Server Chef-Client
  • Hosted Chef(ASP)
    • サーバが大量にある場合有効かも
  • Chef-solo
    • 練習用 / サーバが少ない場合これでも回せる
    • 20台以下くらいならこれで

インストール

の前に

  • OSのインストール
  • ネットワーク設定
  • sudo可能なユーザの作成

は準備必要。

  • Rubyが入っていなくてもcurlでいける

環境構築

  • 設定対象を決める
  • Community siteでクックブックで探す
  • 試す
  • だめだったら自分で書く

はじめにCommunityからクックブックを探してみるとよいという話。

ただし、固執し過ぎるとハマる。

必要なファイル

  • solo.rb
    • 設定ファイル
  • sodo.json
    • run_list 実行するクックブックを列挙
    • file_cache_path
    • cookbook_path
    • attributes 設定情報、クックブックのREADMEを見てみるとよい

自分でクックブックを作ってみる

knifeコマンドで。

利用事例

  • Railsアプリ環境
    • みんながやるような事をクックブックに
    • ネットワーク周りの設定(iptables, SELinux)
    • OSの設定(yum, log, syslog)
    • ツールインストール(Python, Git, Mercurial)

周辺ツール

  • vagrant
    • vmを使い捨てられる
  • librarian-chef berkshelf
    • Ruby のbundlerのようなもの
    • Jenkinsクックブック入れようとしたらJavaが必要などの依存を解消してくれる
  • knife-solo paratrooper-chef
    • chef-soloをリモート実行するツール

Chefのデメリット

  • community cookbookの不備
  • 全員がChefを覚える必要がある
    • 手動で書き換えたところにChefで流し込むと、手動の部分が消えてしまう
  • まだ定石がない
  • テストが難しい
    • serverspec, chefspecが候補
  • はじめるにはコストが掛かる

第2部 Chefで構築するBP-Redmine環境

実際の導入事例の紹介。

  1. BeProudのRedmine環境
  2. Webサービスのサーバ構成(10台)

BP-Redmine

Redmineの管理

  • メンテナンスが大変
  • 構築手順が残っていない or 残っていても集めるのが大変(Wikiとかに散らばってる)

それならChefでまとめる。

セットアップ内容

Apache, Redmine, Ldapなどを入れていく方針…。

しかし、一部GUI必須のインストール(Skypeなど)がある。

GUIのインストールもChefでできるかもしれないが、今回は切り離して考える。

使用ツール

  • vagrant
  • librarian-chef

Webサービス

セットアップ内容

  • サーバは10台
  • iptablesの設定など
  • サーバ間はssh接続
  • などなど

サーバの役割

役割ごとにRoleでグルーピング。

  • 抽象的なロール
    • common
  • 機能
    • django, nginx, loadbalancerなど
  • 大きいロール
    • gatewayサーバ
    • batchサーバ
    • devサーバ

環境別にenvironment的に分け。(Chef 11.4.0ではenvironmentをサポートしていないため)

  • 個人のvagrant
  • 社内
  • 検証用
  • 本番

クックブック

  • opscodeとgithubから持ってきたもの
  • 案件に依存するものは自作
    • hosts, ssh, iptables, nginxなどなど

課題など

  • 鍵とかはどう管理するか

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2013/04/01 [Ruby] [StartUp] [Chef] 入門Chef Solo - Infrastructure as Code を読みながらChef Soloで遊べるようになるまで
  2. 2014/08/28 [Sphinx] [Ruby] [イベント] kawasaki.rb #015 でSphinx導入事例の発表をしてきました #kwskrb #sphinxjp
  3. 2014/07/13 [Sphinx] [Ruby] [イベント] kawasaki.rb #013 でSphinx導入事例の発表をしてきました と #011 #012 参加記録 #kwskrb #sphinxjp
  4. 2014/04/01 [Ruby] [Jekyll] [イベント] kawasaki.rb #010 で発表してきました #kwskrb
  5. 2012/06/03 [TDD] [RSpec] [Ruby] [イベント] TDD Boot Camp 大阪 1.0( #tddbc ) に参加しました
  6. 2012/05/28 [Ruby] [イベント] [Jenkins] [Redmine] Jenkins,Redmine使いこなし勉強会に参加しました と、ちょっとプラグイン作ってみた #jen_red
  7. 2013/12/24 [Ruby] RubyでQRコードを生成してみる
  8. 2013/09/07 [Ruby] [Git] [Jekyll] Jekyllバージョンアップの際に思いのほか手こずった話 てっく煮さん製プラグインの更新に追従したい編
  9. 2013/09/03 [Ruby] [Rails] Ruby1.9.3のWebrickで出るCould not determine content-length...エラーを消す方法(2.0.0では解決済)
  10. 2013/08/26 [Ruby] ソースコード中に0xC2A0(UTF-8のNO-BREAK SPACE)が混ざり実行できなくて困った話
  11. 2013/08/20 [Ruby] [Rails] [Redmine] Rails3のログ出力にANSIカラーコードを使用しない設定
  12. 2013/08/09 [Ruby] [Redmine] [MySql] [StartUp] WindowsにRedmine2.3をインストールする手順と、プラグイン作成用メモ
  13. 2013/08/07 [Ruby] [Jekyll] [Git] Jekyllバージョンアップの際に思いのほか手こずった話 Jekyll Bootstrapの更新に追従したい編
  14. 2013/05/27 [Jekyll] [Ruby] Jekyll@GitHub Pagesの運用形態を変えたのでAnalyticsの設定が効かなくなっていた
  15. 2013/05/23 [Jekyll] [Liquid] [Ruby] 記事の目次を出力するJekyllプラグインの改良