Upload
shinichiro-ohhara
View
2.487
Download
0
Embed Size (px)
DESCRIPTION
Chef入門です。Git入門とVagrant入門を講習済みの方向けです。
Citation preview
自己紹介
大原 慎一郎 https://twitter.com/ohhara_shiojiri
(有)トラストネットワークス 塩尻インキュベーションプラザ108号室
サーバーやルーター、スイッチなどのインフラ系のシステム構築、運用、管理、監視、保守を行っています。
・長野県塩尻市に活動拠点を置く、市内プログラマー有志による団体・「オープンな環境でオープンな活動を目指す」を合言葉に集う・CoderDojo Shiojiri 開催 ・小学生高学年向けRuby教室開催・オープンソースCMS ZOMEKIを使ったサイト構築・塩尻市と東京都三鷹市で交互にOSS勉強会開催・IT技術書をリブライズで貸し出し、また市立図書館と協力
http://shiojiri-osslabo.com/
本日のアジェンダ(前半)
・サーバー環境構築って大変だよね。
・Chefとは何か?
・Chef Soloのインストール
・クックブックの作成
・レシピの作成
・JSONファイル
・パス設定ファイル
・Chef Soloを実行
本日のアジェンダ(後半)
・Knife Solo・Chefのインストール
・Knife Soloのインストール
・レポジトリの新規作成
・クックブックとレシピの作成
・リモートサーバー設定
・Knife Soloを実行
・基本的な作業の流れ
・次回 レシピの書き方
サーバー環境構築って大変だよね
・クラウドでサーバーの手配は簡単になった。
・でも各種サービスを起動させるのに、インストールや設定ファイルの準備がたくさんあります。
・毎回手順書の通りにダウンロード&インストール、
設定ファイルの編集をやらなくてはならない。
・人間は必ず間違える!
・サーバーの台数が増えて、スタッフが足りない!
Chefとは何か?
・プロビジョニング(Provisioning)ツールのひとつ
他にもPuppet等があります。
・サーバー環境構築の手順をプログラム化します。
・プログラム化したことで、自動化が出来ます。
・サーバーの差異を吸収してソースコードを共有化出来ます。
・Rubyでソースコードを記述します。
・ソースコードはGitでバージョン管理できます。
・多くのソースコードが公開されていて、流用が出来ます。
・オープンソース版と商用版があります。
・食事の料理にちなんだ名称で、理解しやすい。
Chefとは何か?
・なんだか難しくない?
・RubyやRuby on Railsのプログラムやった事が無いけど?
・開発学習環境のサーバーが無いけど?
・失敗しても壊れない?
・ソースコードの多くは自動生成されます。
・Rubyのコードもごく単純な事だけ。
・開発学習環境のサーバーは、Vagrantが対応しています。
・失敗してもVagrantのrollbackでやり直せる。
Chefとは何か?
・サーバー&クライアント型モデルで大規模に管理出来ます。
Facebookでも大量のサーバー管理に使われています。
・Chef Serverが各サーバー状況を一括管理します。
・各サーバーのChef Clientが、Chef Serverの指示で、
サーバーの状態を自動で変更します。
・管理者はChef Serverに設定するだけで、何百何千のサーバーでも自動設定が出来ます。
Chefとは何か?
Chefとは何か?
・大量のサーバーなんて自分には無いから関係無い?
・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に公開しているひな形を使用します。
新しくchef-repoディレクトリが作成されて、基本設定ファイルが用意されています。
git clone git://github.com/opscode/chef-repo.git
Chef Soloのインストール
レポジトリを操作するknifeの初期設定をします。
設定値を質問して来ますが、とりあえず標準値でよいので、
そのままリターンキーで進めて、終了させます。
ユーザーディレクトリ以下に.chef/knife.rbファイルが作成されます。
knife configure
cat ~/.chef/knife.rb
クックブックの作成
・レポジトリの中には、1つもしくは複数のクックブックを作成します。
・レポジトリのディレクトリに移動します。
・knifeでクックブックを作成します。
knife cookbook create ntp -o cookbooks
例 knife cookbook create クックブック名 -o ディレクトリ
cd chef-repo
レシピの作成
・クックブックの中に、レシピを書きます。今回は、ntpをインストールして自動起動させてみます。
・クックブック作成時にレシピファイルが自動作成されます。
これを編集してみましょう。
viの操作キー(キーボード入力)
・編集入力モード切り替え → i 文字キー
・切り替えたモードを元に戻す → ESC キー
・コマンドモード切り替え → : 文字キー
ファイルに保存して終了コマンド → wq 破棄して終了コマンド → q!
vi cookbooks/ntp/recipes/default.rb
レシピの作成
・パッケージのインストール
package “ntp” do action :installend
・サービスの状態設定
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 Soloではローカルに置きます。
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端末画面からインストール
・インストーラーからインストール
http://www.getchef.com/chef/install/ ※Windowsの場合はインストーラー推奨
curl -L https://www.opscode.com/chef/install.sh | sudo bash
Chefのインストール
・RubyとRubyGemsをインストール LinuxやOS Xの場合 → 各自で事前準備
Windowsの場合 → Chefインストーラーに入ってます。
・インストール後、bash端末画面で確認します。
※2013年12月12日時点では、ruby 2.0.0p353 , ruby 1.9.3p484 , gem 2.1.11
ruby -v
gem -v
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 centos64
例 ssh [ホスト名]
例 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.gitcd knife-solorake install
・Knife Soloのインストールを確認します。
gem list | grep knife-solo
Knife Soloのインストール
・レポジトリを操作するknifeの初期設定をします。
質問の設定値は、そのまま進めて、終了させます。
ユーザーディレクトリ以下に.chef/knife.rbファイルが作成されます。Knife Soloのパス設定を追記します。
knife configure
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 chef-repo
例 knife solo init レポジトリのディレクトリ名
・ひな形をGithubからgit cloneしなくても自動生成されます。
レポジトリの新規作成
・自動生成されたディレクトリに移動して一覧表示します。
・cookbooks → ダウンロードした第三者のレシピなど
・site-cookbooks → 自分が作成したレシピ
・nodes → JSONファイルの保管場所
・.gitignore → git管理対象外のディレクトリ指定ファイル
cd chef-repols -la
cat .gitignore
レポジトリの新規作成
・Gitでバージョン管理の初期設定をします。
git initgit add .git commit -m ‘frist commit’
・レシピを変更する毎に、addファイル登録してコミットすれば、バージョン管理することが出来ます。
・Gitサーバーにpushすれば、レシピを共有することが出来ます。
クックブックとレシピの作成
・knifeでクックブックを作成します。
・レシピを編集します。内容は前半のChef Soloと同じです。
knife cookbook create ntp -o site-cookbooks
例 knife cookbook create クックブック名 -o site-cookbooks
vi site-cookbooks/ntp/recipes/default.rb
クックブックとレシピの作成
・パッケージのインストール
package “ntp” do action :installend
・サービスの状態設定
service “ntpd” do supports :status=>true,:restart=>true,:reload=>true action [:enable,:start]end
・レシピファイルを保存してviを終了します。
リモートサーバー設定
・VagrantのCentOS6.4仮想サーバーにChefをリモートからインストールします。
knife solo prepare centos64
例 knife solo prepare リモートホスト名
・JSONファイルがnodesディレクトリに自動生成されます。
vi nodes/centos64.json
・実行するレシピの設定
{”run_list”:[“ntp”]}
Knife Soloを実行
・Knife Soloはリモートからサーバーへレシピを転送して、サーバー上でChef Soloを実行します。
・レシピ内容などに間違いがある場合には、Chefが判別してエラーになります。
・問題無ければ、Vagrantの仮想サーバー上にntpdサービスがインストールされて、サービスが起動します。
・Windows環境の場合、cwRsyncを適切に設定する必要があります。
knife solo cook centos64
例 knife solo cook リモートホスト名
Knife Soloを実行
・レシピが出来たら、Gitで変更ファイルを登録してコミットしておきます。
git add .git commit -m ‘ntp recipe’
・動作確認できたら、仮想サーバーからログアウトしてホスト側に戻ります。
ssh centos64service ntpd statusexit
Knife Soloを実行
・リモートサーバーに転送したレシピ等を消します。
knife solo clean centos64
例 knife solo clean リモートホスト名
基本的な作業の流れ
1.Vagrantで仮想サーバー環境を作成して起動する。
vagrant up2.ssh環境設定する。
vagrant ssh-config --host [ホスト名] >> ~/.ssh/config3.レポジトリ(キッチン)を作成する。
knife solo init [レポジトリのディレクトリ名]4.クックブックを作成してレシピを編集する。
knife cookbook create [レシピ名] -o site-cookbooks5.仮想サーバーにChefをインストールしてJSONファイルを編集する。
knife solo prepare [ホスト名]6.knife soloを実行して、リモートから仮想サーバーへインストール
knife solo cook [ホスト名]7.レシピが完成したらgitでコミットする。
次回 レシピの書き方
・レシピの書き方を紹介します。
・サードパーティが公開しているレシピの利用方法
・課題 ZOMEKIのレシピを書いてみよう。
・本日の勉強会、お疲れ様でした。