2018年以降の記事はGitHub Pagesに移行しました

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

詳細

テーマはChef。

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

所感

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

http://www.slideshare.net/slideshow/embed_code/20014957
サーバ、どうやって構築している?

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

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

どうやってやる?

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

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

自動化ツールについて
アプローチの違い
  • 手順ベース
    • 手順を意識する必要
    • 手作業と混ぜやすい
  • 定義ベース
    • あるべき姿を定義(例: nginxが入っているべき)
    • 何度実行してもよい = 冪等性 を持つ
    • 定義の仕方は覚えないといけない
    • 大抵は 、状態を意識しなくてよい
インストールが必要か
  • インストールが必要、各ホストにクライアントを
  • sshで流しこむのか

  • 共有リソースの有無
    • よく使う定義の手順は共有されているか
    • 書く言語のパッケージリポジトリのようなもの
他の構成ツール
  • 定義ベース
    • puppet
    • chef
    • salt
    • ansible
  • 手順ベース

こんなにあるとは…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アプリ環境
    • みんながやるような事をクックブックに
周辺ツール
  • 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でできるかもしれないが、今回は切り離して考える。

使用ツール
Webサービス
セットアップ内容
  • サーバは10台
  • iptablesの設定など
  • サーバ間はssh接続
  • などなど
サーバの役割

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

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

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

  • 個人のvagrant
  • 社内
  • 検証用
  • 本番
クックブック
  • opscodeとgithubから持ってきたもの
  • 案件に依存するものは自作
課題など
  • 鍵とかはどう管理するか