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

Tags: [ Ruby ] [ Chef ] [ イベント ] Published: 2013/04/27

詳細

テーマは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などなど

課題など

  • 鍵とかはどう管理するか
blog comments powered by Disqus

Author: kk_Ataka / Powered by Jekyll on GitHub Pages