狠狠撸

狠狠撸Share a Scribd company logo
SOLA勉強会 第3回目

Chef入門
自己紹介
大原 慎一郎 https://twitter.com/ohhara_shiojiri
(有)トラストネットワークス 塩尻インキュベーションプラザ108号室
サーバーやルーター、スイッチなどのインフラ系のシステム構築、運用、管理、監視、
保守を行っています。

http://shiojiri-osslabo.com/
?長野県塩尻市に活動拠点を置く、市内プログラマー有志による団体
?「オープンな環境でオープンな活動を目指す」を合言葉に集う
?CoderDojo Shiojiri 開催 ?小学生高学年向けRuby教室開催
?オープンソースCMS ZOMEKIを使ったサイト構築
?塩尻市と東京都三鷹市で交互にOSS勉強会開催
?IT技術書をリブライズで貸し出し、また市立図書館と協力
本日のアジェンダ(前半)
?サーバー環境構築って大変だよね。
?颁丑别蹿とは何か?
?Chef Soloのインストール
?クックブックの作成
?レシピの作成
?JSONファイル
?パス設定ファイル
?Chef Soloを実行
本日のアジェンダ(後半)
?Knife Solo
?Chefのインストール
?Knife Soloのインストール
?レポジトリの新規作成
?クックブックとレシピの作成
?リモートサーバー設定
?Knife Soloを実行
?基本的な作業の流れ
?次回 レシピの書き方
サーバー環境構築って大変だよね
?クラウドでサーバーの手配は簡単になった。
?でも各種サービスを起動させるのに、インストールや設定ファ
イルの準備がたくさんあります。
?毎回手順書の通りにダウンロード&インストール、
設定ファイルの編集をやらなくてはならない。
?人間は必ず間違える!
?サーバーの台数が増えて、スタッフが足りない!
颁丑别蹿とは何か?
?プロビジョニング(Provisioning)ツールのひとつ
 他にもPuppet等があります。
?サーバー環境構築の手順をプログラム化します。
?プログラム化したことで、自動化が出来ます。
?サーバーの差異を吸収してソースコードを共有化出来ます。
?Rubyでソースコードを記述します。
?ソースコードはGitでバージョン管理できます。
?多くのソースコードが公開されていて、流用が出来ます。
?オープンソース版と商用版があります。
?食事の料理にちなんだ名称で、理解しやすい。
颁丑别蹿とは何か?
?なんだか難しくない?
?RubyやRuby on Railsのプログラムやった事が無いけど?
?開発学習環境のサーバーが無いけど?
?失敗しても壊れない?

?ソースコードの多くは自動生成されます。
?Rubyのコードもごく単純な事だけ。
?開発学習環境のサーバーは、Vagrantが対応しています。
?失敗してもVagrantのrollbackでやり直せる。
颁丑别蹿とは何か?
?サーバー&クライアント型モデルで大規模に管理出来ます。
 Facebookでも大量のサーバー管理に使われています。
?Chef Serverが各サーバー状況を一括管理します。
?各サーバーのChef Clientが、Chef Serverの指示で、
 サーバーの状態を自動で変更します。
?管理者はChef Serverに設定するだけで、何百何千のサー
バーでも自動設定が出来ます。
 
颁丑别蹿とは何か?
颁丑别蹿とは何か?
?大量のサーバーなんて自分には無いから関係無い?
?Chef Serverを借りたり自分で用意出来ないけど?

?煩雑なサーバー構築の手順を自動化できる。
?サーバー1台からでも使用できる。
?Chef Server & Chef Clientを必要としないChef Soloがある。
?管理サーバーが増えていってもChef Soloで管理できる。
?Chef Soloで培った資産は、Chef Server & Clientでも
 そのまま使用できる。
Chef Soloインストール
?VagrantでCentOS6.4の仮想サーバーを起動します。
?sandbox機能をonにしておきます。
?CentOS6.4の仮想サーバーにSSHログインします。
?Chef をインストールします。
curl -L https://www.opscode.com/chef/install.sh | sudo bash
Chef Soloインストール
?1つのシステムに1つのレポジトリ(キッチン)を用意します。
?CentOS6.4の仮想サーバー上にGitをインストールします。
 ※Git入門勉強会の資料を参考

?OpsCodeがGithubに公開しているひな形を使用します。
git clone git://github.com/opscode/chef-repo.git
新しくchef-repoディレクトリが作成されて、基本設定ファイルが
用意されています。
Chef Soloのインストール
レポジトリを操作するknifeの初期設定をします。

knife configure
 設定値を質問して来ますが、とりあえず標準値でよいので、
そのままリターンキーで進めて、終了させます。
 ユーザーディレクトリ以下に.chef/knife.rbファイルが作成され
ます。

cat ~/.chef/knife.rb
クックブックの作成
?レポジトリの中には、1つもしくは複数のクックブックを作成しま
す。
?レポジトリのディレクトリに移動します。

cd chef-repo
?knifeでクックブックを作成します。
例 knife cookbook create クックブック名 -o ディレクトリ
knife cookbook create ntp -o cookbooks
レシピの作成
?クックブックの中に、レシピを書きます。今回は、ntpをインス
トールして自動起動させてみます。
?クックブック作成時にレシピファイルが自動作成されます。
 これを編集してみましょう。

vi cookbooks/ntp/recipes/default.rb
viの操作キー(キーボード入力)
?編集入力モード切り替え → i 文字キー
?切り替えたモードを元に戻す → ESC キー
?コマンドモード切り替え → : 文字キー
 ファイルに保存して終了コマンド → wq
 破棄して終了コマンド → q!
レシピの作成
?パッケージのインストール
package “ntp” do
action :install
end
?サービスの状態設定
service “ntpd” do
supports :status=>true,:restart=>true,:reload=>true
action [:enable,:start]
end

?レシピファイルを保存してviを終了します。
JSONファイル
?Chefが管理するサーバーをノード(node)と呼びます。
?ノードの状態を記述するのが、JSONファイルです。
?JSONファイルに記述したデータ構造を、Node Objectと呼び
ます。
?JSONファイルには、実行するレシピ名や変数(Attribute)等を
記述して、Chefがその内容に沿って実行します。
?Chef Serverに設置して管理します。
?Chef 厂辞濒辞ではローカルに置きます。
JSONファイル
?JSONファイルを作成します。

vi localhost.json
?実行するレシピの設定

{”run_list”:[“ntp”]}
パス設定ファイル
?Chef Solo実行に必要なパス設定ファイルを作成します。
vi solo.rb
?Chef Soloの各作業パスを設定する。
file_cache_path “/tmp/chef-solo”
cookbook_path [“/home/vagrant/chef-repo/cookbooks”]
Chef Soloを実行
?Chef Soloを実行してntpサービスをインストール起動します。
sudo chef-solo -c solo.rb -j localhost.json
?レシピ内容などに間違いがある場合には、Chefが判別してエ
ラーになります。問題無ければ、Vagrantの仮想サーバー上に
ntpdサービスがインストールされて、サービスが起動します。
service ntpd status
?動作確認できたら、仮想サーバーからログアウトしてホスト側
に戻ります。
Knife Solo
?Chef Soloはサーバーにログインして各作業をします。

?毎回サーバーにログインするのが面倒。
?使い慣れた自分のローカル環境で作業したい。
?Chef Serverではないので、レシピがサーバーに分散する。

?ローカル環境からリモートで、レシピを転送して、Chefを実行
するKnife Solo
Chefのインストール
?bash端末画面からインストール
curl -L https://www.opscode.com/chef/install.sh | sudo bash

?インストーラーからインストール
 http://www.getchef.com/chef/install/
※Windowsの場合はインストーラー推奨
Chefのインストール
?RubyとRubyGemsをインストール
 LinuxやOS Xの場合 → 各自で事前準備
 Windowsの場合 → Chefインストーラーに入ってます。

?インストール後、bash端末画面で確認します。
ruby -v
gem -v
※2013年12月12日時点では、ruby 2.0.0p353 , ruby 1.9.3p484 , gem 2.1.11
Chefのインストール
?rsyncをインストール
 LinuxやOS Xの場合 → sshに同梱されています。
 Windowsの場合 → cwRsyncをインストールする。

  https://www.itefix.no/i2/cwrsync
 Git Bash(MINGW32)にはsshはありますが、rsyncが無い
為、cwRsyncのsshとrsyncをコマンドプロンプトで使用します。

?インストール後、bash端末画面で確認します。
rsync -v
Chefのインストール
?cwRsyncの設定(Windowsの場合)
 1.環境変数を新規設定します。
  ユーザー環境変数
変数

値

HOME

%USERPROFILE%

  システム環境変数
変数

値

CYGWIN

nodosfilewarning
Chefのインストール
?cwRsyncの設定(Windowsの場合)
 2.パスを既存の設定へ追加します。
  ユーザー環境変数
  システム環境変数
変数

値

Path

;C:¥Program Files (x86)¥cwRsync¥bin
Chefのインストール
?cwRsyncの設定(Windowsの場合)
 3.コマンドプロンプトでsshの動作確認をする。

例 ssh [ホスト名]
ssh centos64
 パーミッションの警告が出る場合、読み取り専用に属性を変
更します。
例 attrib +r c:¥Users¥MyName¥.ssh¥config
Knife Soloのインストール
?Knife SoloはRubyGemsからインストールします。

gem install knife-solo
?最新版をGithubからインストールも出来ます。
git clone git://github.com/matschaffer/knife-solo.git
cd knife-solo
rake install

?Knife Soloのインストールを確認します。

gem list | grep knife-solo
Knife Soloのインストール
?レポジトリを操作するknifeの初期設定をします。

knife configure
質問の設定値は、そのまま進めて、終了させます。
ユーザーディレクトリ以下に.chef/knife.rbファイルが作成されま
す。Knife Soloのパス設定を追記します。

vi ~/.chef/knife.rb
?Knife Soloの作業パスを設定する。

knife[:solo_path]=’/tmp/chef-solo’
Knife Soloのインストール
?ssh経由(rsync)で実行される為、サーバーに条件があります。
?パスワードなしssh暗号鍵認証であること。
?スーパーユーザー権限が必要な為、sudo権限があること。

?VagrantやEC2は初期状態で対応しています。
?条件を満たせば、他のサーバーも利用可能です。
レポジトリの新規作成
?Vagrantの仮想サーバーをrollbackして初期状態に戻すか、
別の新しい仮想サーバーを起動します。
?ただし起動する前に、ホスト側から接続出来るように
VagrantfileにIPアドレスを設定しておきます。
?念の為、sandbox機能をonにします。
?Vagrantのディレクトリでレポジトリを新規作成します。
例 knife solo init レポジトリのディレクトリ名
knife solo init chef-repo
?ひな形をGithubからgit cloneしなくても自動生成されます。
レポジトリの新規作成
?自動生成されたディレクトリに移動して一覧表示します。

cd chef-repo
ls -la
?cookbooks → ダウンロードした第三者のレシピなど
?site-cookbooks → 自分が作成したレシピ
?nodes → JSONファイルの保管場所
?.gitignore → git管理対象外のディレクトリ指定ファイル

cat .gitignore
レポジトリの新規作成
?Gitでバージョン管理の初期設定をします。

git init
git add .
git commit -m ‘frist commit’
?レシピを変更する毎に、addファイル登録してコミットすれば、
バージョン管理することが出来ます。
?Gitサーバーにpushすれば、レシピを共有することが出来ま
す。
クックブックとレシピの作成
?knifeでクックブックを作成します。
例 knife cookbook create クックブック名 -o site-cookbooks

knife cookbook create ntp -o site-cookbooks
?レシピを編集します。内容は前半のChef Soloと同じです。
vi site-cookbooks/ntp/recipes/default.rb
クックブックとレシピの作成
?パッケージのインストール
package “ntp” do
action :install
end
?サービスの状態設定
service “ntpd” do
supports :status=>true,:restart=>true,:reload=>true
action [:enable,:start]
end

?レシピファイルを保存してviを終了します。
リモートサーバー設定
?VagrantのCentOS6.4仮想サーバーにChefをリモートからイ
ンストールします。
例 knife solo prepare リモートホスト名
knife solo prepare centos64
?JSONファイルがnodesディレクトリに自動生成されます。
vi nodes/centos64.json
?実行するレシピの設定
{”run_list”:[“ntp”]}
Knife Soloを実行
?Knife Soloはリモートからサーバーへレシピを転送して、サー
バー上でChef Soloを実行します。
例 knife solo cook リモートホスト名
knife solo cook centos64
?レシピ内容などに間違いがある場合には、Chefが判別してエ
ラーになります。
?問題無ければ、Vagrantの仮想サーバー上にntpdサービスが
インストールされて、サービスが起動します。
?Windows環境の場合、cwRsyncを適切に設定する必要があ
ります。
Knife Soloを実行
?動作確認できたら、仮想サーバーからログアウトしてホスト側
に戻ります。
ssh centos64
service ntpd status
exit
?レシピが出来たら、Gitで変更ファイルを登録してコミットしてお
きます。
git add .
git commit -m ‘ntp recipe’
Knife Soloを実行
?リモートサーバーに転送したレシピ等を消します。
例 knife solo clean リモートホスト名
knife solo clean centos64
基本的な作業の流れ
1.Vagrantで仮想サーバー環境を作成して起動する。
 vagrant up
2.ssh環境設定する。
 vagrant ssh-config --host [ホスト名] >> ~/.ssh/config
3.レポジトリ(キッチン)を作成する。
 knife solo init [レポジトリのディレクトリ名]
4.クックブックを作成してレシピを編集する。
 knife cookbook create [レシピ名] -o site-cookbooks
5.仮想サーバーにChefをインストールしてJSONファイルを編集する。
 knife solo prepare [ホスト名]
6.knife soloを実行して、リモートから仮想サーバーへインストール
 knife solo cook [ホスト名]
7.レシピが完成したらgitでコミットする。
次回 レシピの書き方
?レシピの書き方を紹介します。
?サードパーティが公開しているレシピの利用方法
?課題 ZOMEKIのレシピを書いてみよう。

?本日の勉強会、お疲れ様でした。

More Related Content

厂辞濒补勉强会 肠丑别蹿入门