Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
DevOps研修
中級編#01
Hiro Fukami
ShakeSoul, inc.
I’m …
深海 寛信 Hiro Fukami
株式会社シェイクソウル 代表取締役 CEO
創業者 + エンジニア + 一人娘のパパ
Blog hirofukami.com
Facebook /fukami
Twitter @d_sea
中級編について
中級編でやること
Chefを実際利用するためのスキルを身につける
実践による学習
中級編のゴール
自ら考えたCookbookを作り、その成果をプレゼン
してもらいます
今日のゴール
knife solo の使い方と主なレシピの書き方を学ぶ
参加者へのお願い
まず手を動かす
失敗するリスクのない環境
できるだけトライアンドエラーをする
たくさん失敗して、失敗から学ぶ
自分の道具にするためにたくさん触る
目次
1. サンプルCookbookを動かす
2. knife solo コマンドを学ぶ
3. Cookbook の設定方法
4. レシピの書き方
5. 自分で作る
研修環境
Windows PC
Node
(Chef Client)
Virtual Box
knife solo コマンド
ssh login
演習環境の確認
実行サーバに knife solo コマンドが入っているこ
と
Nodeとなるサーバがあること
knife コマンド実行環境からNodeにsshログイン
できること
サンプルCookbookを
動かす
サンプルCookbook
実行マシン上(Linux/Mac)の適当なディレクトリ上
で、
git clone git@github.com:shakesoulinc/sample-
cookbooks.git
もしくは
https://gith...
Practice - knife solo実行
cd /sample-cookbooks-master
knife solo prepare root@192.168.33.10
nodes/node00.json の中身を nodes/
19...
Practice - 変数
nodes/node00.json の中身を node/[node].json
内の “title” から後の文字列を適当に変更してみ
る
knife solo cook [node]
ブラウザから Node へアク...
knife solo コマンドを
学ぶ
knife solo
knife solo init
knife solo prepare
knife solo cook
knife solo bootstrap
knife solo init
リポジトリディレクトリの作成
knife solo prepare
NodeをChef Clientに仕立てる(knifeコマンドをイ
ンストール)
nodes 配下にホストに適用するJSONファイルを
作成する
一度 Chef Client に仕立てれば2回目以降は不要
knife solo cook
Nodeにレシピを適用する
-W オプションを付けると実際には実行せずにレ
シピ通りに作業を流してくれる(dry-run:予行演
習)
Cook 動作フロー
1. nodes ディレクトリ配下にある [ホスト名].json ファイル
を探す
2. ファイル内の “run_list” を読み、指定されたレシピを把握
3. [ホスト名] に ssh login
4. レシピファイル...
knife solo bootstrap
knife solo prepare + knife solo cook
を一つのコマンドで行う
作業の仕方例
1. knife solo init
2. Cookbook作成、レシピ作成
3. knife solo prepare
4. knife solo cook -W : チェック
5. knife solo cook
6. エラー...
Practice
Cookbooks を作る
knife solo init [repository-name]
cd [repository-name]
knife cookbook create [cookbook-name] -o site-
cookbo...
Cookbook の設定方法
リポジトリディレクトリ
cookbooks : サードパーティーcookbooksの置き場
data_bags : 入力したいデータを管理する
nodes : Nodeに対して適用する設定内容、ホストごとに
JSONファイルを置く
roles ...
自作cookbookを作る
knife cookbook create [cookbook-name] -o site-
cookbooks
-o オプション : cookbookの出力先指定
site-cookbooks 配下に [cookb...
Cookbook ディレクトリ
attributes : 変数のデフォルト値を設定したファイル
を置く
files : アップロードするファイルを置く
recipes : 実行ファイルを置く
templates : アップロードするファイル(変数...
レシピの書き方
recipes/xxx.rbの書き方
Resources Reference
https://docs.chef.io/chef/resources.html
よく使うresources
package
service
template
bash
Package
パッケージのマネージ
package "tar" do
action :install
end
多くのpackageをインストールし
たい時
rubyのeachが使える
%w{
tar
git
gcc
}.each do |pkg|
package pkg do
action :install
end
end
Service
サービスプロセスのマネージ
service "nginx" do
supports :status => true, :restart => true, :reload => true
action [:enable, :sta...
Template
ファイルの配置、.erbファイルとして変数が扱える
template "site.conf" do
path "/etc/nginx/conf.d/default.conf"
source "site.conf.erb"
ow...
Bash
bashの実行
bash 'install_something' do
user 'root'
cwd '/tmp'
code <<-EOH
wget http://www.example.com/tarball.tar.gz
tar...
条件分岐
not_if
only_if
not_if
false の時に実行する
template '/tmp/somefile' do
mode 00644
source 'somefile.erb'
not_if do
File.exists?('/etc/passwd')
en...
only_if
true の時に実行する
template '/tmp/somefile' do
mode 00644
source 'somefile.erb'
only_if do ! File.exists?('/etc/passwd')...
変数
template(.erb)ファイル内に変数を定義
<h1><%= node['title'] %> サンプルページ</h1>
nodes/[hostname].json内に値を設定する
"title" : "Chef Tech Stud...
変数 階層化
階層化も可能
template
<%= node[‘userinfo']['username']%>
node
"userinfo" : {
"username" : "shakesoul"
},
node
json形式
run_listに適用するレシピを書く(配列)
"run_list": [

“recipe[nginx_html]”,

“recipe[php]”

]
変数の値を書く(サンプルcookbook参照)
自分で作る
ルール
どんな状態にするCookbookかしっかり意図する
Chef Super Marketなどから一部コードのコピペは
OK(まるごと持ってきて動かすだけはNG)
サードパーティーCookbookを利用してもOK
作成中の質問はいつでも受け...
心構え
人それぞれ違うので、自分のペースで確実に成果
が残るようにしてください。
大量のレシピ ≠ 良い成果
少ないレシピでも確実に動くこと。自ら作ったレ
シピが何を目的としているか説明できること
進め方例
1. まず小さなレシピを書いて動かす
2. 正しく動いたらレシピに追記して処理を増やす
3. 動かしてチェック
これを繰り返す。途中で時間切れでも成果が残る
方法を取る
成果発表の仕方
1. Nodeが適用前の状態であることを証明する
2. レシピ適用
3. Nodeが意図した状態になったことを証明する
Let’s start !!
Contact
Blog hirofukami.com
Facebook /fukami
Twitter @d_sea
Mail fukami@shakesoul.net
Upcoming SlideShare
Loading in …5
×

DevOps 研修 中級編#01

1,290 views

Published on

株式会社シェイクソウルのテクニカルレクチャー事業
企業内研修で行った DevOps 研修 中級編(全4回)#01の講義内容です。

DevOpsの代表的ツールとして Chef の knife solo のハンズオン研修になります。
初心者を対象とした knife solo の実践研修にてPCを使いながら行いました。
使うための事前知識、動作解説、中級編のゴール設定などを行っています。

DevOps Chef研修は概要説明からPCを用いたハンズオンの研修まで最新インフラテクノロジーの研修を行っています。

DevOpsやChefの企業内研修を検討されていましたら、以下URLをご覧頂きまして、お問い合わせくださいませ。
http://www.shakesoul.net/tech-lecture

Published in: Technology
  • Be the first to comment

  • Be the first to like this

DevOps 研修 中級編#01

  1. 1. DevOps研修 中級編#01 Hiro Fukami ShakeSoul, inc.
  2. 2. I’m … 深海 寛信 Hiro Fukami 株式会社シェイクソウル 代表取締役 CEO 創業者 + エンジニア + 一人娘のパパ Blog hirofukami.com Facebook /fukami Twitter @d_sea
  3. 3. 中級編について
  4. 4. 中級編でやること Chefを実際利用するためのスキルを身につける 実践による学習
  5. 5. 中級編のゴール 自ら考えたCookbookを作り、その成果をプレゼン してもらいます
  6. 6. 今日のゴール knife solo の使い方と主なレシピの書き方を学ぶ
  7. 7. 参加者へのお願い まず手を動かす 失敗するリスクのない環境 できるだけトライアンドエラーをする たくさん失敗して、失敗から学ぶ 自分の道具にするためにたくさん触る
  8. 8. 目次 1. サンプルCookbookを動かす 2. knife solo コマンドを学ぶ 3. Cookbook の設定方法 4. レシピの書き方 5. 自分で作る
  9. 9. 研修環境 Windows PC Node (Chef Client) Virtual Box knife solo コマンド ssh login
  10. 10. 演習環境の確認 実行サーバに knife solo コマンドが入っているこ と Nodeとなるサーバがあること knife コマンド実行環境からNodeにsshログイン できること
  11. 11. サンプルCookbookを 動かす
  12. 12. サンプルCookbook 実行マシン上(Linux/Mac)の適当なディレクトリ上 で、 git clone git@github.com:shakesoulinc/sample- cookbooks.git もしくは https://github.com/shakesoulinc/sample-cookbooks/ archive/master.zip
 からDownload ZIPして解凍
  13. 13. Practice - knife solo実行 cd /sample-cookbooks-master knife solo prepare root@192.168.33.10 nodes/node00.json の中身を nodes/ 192.168.33.10.json へコピペ knife solo cook root@192.168.33.10 ブラウザから Node へアクセス
  14. 14. Practice - 変数 nodes/node00.json の中身を node/[node].json 内の “title” から後の文字列を適当に変更してみ る knife solo cook [node] ブラウザから Node へアクセス
  15. 15. knife solo コマンドを 学ぶ
  16. 16. knife solo knife solo init knife solo prepare knife solo cook knife solo bootstrap
  17. 17. knife solo init リポジトリディレクトリの作成
  18. 18. knife solo prepare NodeをChef Clientに仕立てる(knifeコマンドをイ ンストール) nodes 配下にホストに適用するJSONファイルを 作成する 一度 Chef Client に仕立てれば2回目以降は不要
  19. 19. knife solo cook Nodeにレシピを適用する -W オプションを付けると実際には実行せずにレ シピ通りに作業を流してくれる(dry-run:予行演 習)
  20. 20. Cook 動作フロー 1. nodes ディレクトリ配下にある [ホスト名].json ファイル を探す 2. ファイル内の “run_list” を読み、指定されたレシピを把握 3. [ホスト名] に ssh login 4. レシピファイルなどを rsync して Node にコピーする 5. Node 内で指定されたレシピを実行
  21. 21. knife solo bootstrap knife solo prepare + knife solo cook を一つのコマンドで行う
  22. 22. 作業の仕方例 1. knife solo init 2. Cookbook作成、レシピ作成 3. knife solo prepare 4. knife solo cook -W : チェック 5. knife solo cook 6. エラーが出たら修正 && knife solo cook(繰り返し)
  23. 23. Practice
  24. 24. Cookbooks を作る knife solo init [repository-name] cd [repository-name] knife cookbook create [cookbook-name] -o site- cookbooks
  25. 25. Cookbook の設定方法
  26. 26. リポジトリディレクトリ cookbooks : サードパーティーcookbooksの置き場 data_bags : 入力したいデータを管理する nodes : Nodeに対して適用する設定内容、ホストごとに JSONファイルを置く roles : 適用レシピのグルーピング site-cookbooks : 自作cookbookの置き場
  27. 27. 自作cookbookを作る knife cookbook create [cookbook-name] -o site- cookbooks -o オプション : cookbookの出力先指定 site-cookbooks 配下に [cookbook-name]ディレク トリが作られる
  28. 28. Cookbook ディレクトリ attributes : 変数のデフォルト値を設定したファイル を置く files : アップロードするファイルを置く recipes : 実行ファイルを置く templates : アップロードするファイル(変数設定 可)を置く
  29. 29. レシピの書き方
  30. 30. recipes/xxx.rbの書き方 Resources Reference https://docs.chef.io/chef/resources.html
  31. 31. よく使うresources package service template bash
  32. 32. Package パッケージのマネージ package "tar" do action :install end
  33. 33. 多くのpackageをインストールし たい時 rubyのeachが使える %w{ tar git gcc }.each do |pkg| package pkg do action :install end end
  34. 34. Service サービスプロセスのマネージ service "nginx" do supports :status => true, :restart => true, :reload => true action [:enable, :start] end
  35. 35. Template ファイルの配置、.erbファイルとして変数が扱える template "site.conf" do path "/etc/nginx/conf.d/default.conf" source "site.conf.erb" owner "root" group "root" mode 0644 notifies :reload, 'service[nginx]' end
  36. 36. Bash bashの実行 bash 'install_something' do user 'root' cwd '/tmp' code <<-EOH wget http://www.example.com/tarball.tar.gz tar -zxf tarball.tar.gz cd tarball ./configure make make install EOH end
  37. 37. 条件分岐 not_if only_if
  38. 38. not_if false の時に実行する template '/tmp/somefile' do mode 00644 source 'somefile.erb' not_if do File.exists?('/etc/passwd') end end
  39. 39. only_if true の時に実行する template '/tmp/somefile' do mode 00644 source 'somefile.erb' only_if do ! File.exists?('/etc/passwd') end end
  40. 40. 変数 template(.erb)ファイル内に変数を定義 <h1><%= node['title'] %> サンプルページ</h1> nodes/[hostname].json内に値を設定する "title" : "Chef Tech Study",
  41. 41. 変数 階層化 階層化も可能 template <%= node[‘userinfo']['username']%> node "userinfo" : { "username" : "shakesoul" },
  42. 42. node json形式 run_listに適用するレシピを書く(配列) "run_list": [
 “recipe[nginx_html]”,
 “recipe[php]”
 ] 変数の値を書く(サンプルcookbook参照)
  43. 43. 自分で作る
  44. 44. ルール どんな状態にするCookbookかしっかり意図する Chef Super Marketなどから一部コードのコピペは OK(まるごと持ってきて動かすだけはNG) サードパーティーCookbookを利用してもOK 作成中の質問はいつでも受け付けます
  45. 45. 心構え 人それぞれ違うので、自分のペースで確実に成果 が残るようにしてください。 大量のレシピ ≠ 良い成果 少ないレシピでも確実に動くこと。自ら作ったレ シピが何を目的としているか説明できること
  46. 46. 進め方例 1. まず小さなレシピを書いて動かす 2. 正しく動いたらレシピに追記して処理を増やす 3. 動かしてチェック これを繰り返す。途中で時間切れでも成果が残る 方法を取る
  47. 47. 成果発表の仕方 1. Nodeが適用前の状態であることを証明する 2. レシピ適用 3. Nodeが意図した状態になったことを証明する
  48. 48. Let’s start !!
  49. 49. Contact Blog hirofukami.com Facebook /fukami Twitter @d_sea Mail fukami@shakesoul.net

×