Top Banner
DevOps研修 中級編#01 Hiro Fukami ShakeSoul, inc.
49

DevOps 研修 中級編#01

Apr 16, 2017

Download

Technology

Hiro Fukami
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: DevOps 研修 中級編#01

DevOps研修 中級編#01

Hiro Fukami ShakeSoul, inc.

Page 2: DevOps 研修 中級編#01

I’m …深海 寛信 Hiro Fukami

株式会社シェイクソウル 代表取締役 CEO

創業者 + エンジニア + 一人娘のパパ

Blog hirofukami.com

Facebook /fukami

Twitter @d_sea

Page 3: DevOps 研修 中級編#01

中級編について

Page 4: DevOps 研修 中級編#01

中級編でやること

Chefを実際利用するためのスキルを身につける

実践による学習

Page 5: DevOps 研修 中級編#01

中級編のゴール

自ら考えたCookbookを作り、その成果をプレゼンしてもらいます

Page 6: DevOps 研修 中級編#01

今日のゴール

knife solo の使い方と主なレシピの書き方を学ぶ

Page 7: DevOps 研修 中級編#01

参加者へのお願いまず手を動かす

失敗するリスクのない環境

できるだけトライアンドエラーをする

たくさん失敗して、失敗から学ぶ

自分の道具にするためにたくさん触る

Page 8: DevOps 研修 中級編#01

目次1. サンプルCookbookを動かす

2. knife solo コマンドを学ぶ

3. Cookbook の設定方法

4. レシピの書き方

5. 自分で作る

Page 9: DevOps 研修 中級編#01

研修環境

Windows PC

Node (Chef Client)

Virtual Box

knife solo コマンドssh login

Page 10: DevOps 研修 中級編#01

演習環境の確認

実行サーバに knife solo コマンドが入っていること

Nodeとなるサーバがあること

knife コマンド実行環境からNodeにsshログインできること

Page 11: DevOps 研修 中級編#01

サンプルCookbookを動かす

Page 12: DevOps 研修 中級編#01

サンプルCookbook実行マシン上(Linux/Mac)の適当なディレクトリ上で、

git clone [email protected]:shakesoulinc/sample-cookbooks.git

もしくは

https://github.com/shakesoulinc/sample-cookbooks/archive/master.zipからDownload ZIPして解凍

Page 13: DevOps 研修 中級編#01

Practice - knife solo実行cd /sample-cookbooks-master

knife solo prepare [email protected]

nodes/node00.json の中身を nodes/192.168.33.10.json へコピペ

knife solo cook [email protected]

ブラウザから Node へアクセス

Page 14: DevOps 研修 中級編#01

Practice - 変数

nodes/node00.json の中身を node/[node].json 内の “title” から後の文字列を適当に変更してみる

knife solo cook [node]

ブラウザから Node へアクセス

Page 15: DevOps 研修 中級編#01

knife solo コマンドを学ぶ

Page 16: DevOps 研修 中級編#01

knife solo

knife solo init

knife solo prepare

knife solo cook

knife solo bootstrap

Page 17: DevOps 研修 中級編#01

knife solo init

リポジトリディレクトリの作成

Page 18: DevOps 研修 中級編#01

knife solo prepare

NodeをChef Clientに仕立てる(knifeコマンドをインストール)

nodes 配下にホストに適用するJSONファイルを作成する

一度 Chef Client に仕立てれば2回目以降は不要

Page 19: DevOps 研修 中級編#01

knife solo cook

Nodeにレシピを適用する

-W オプションを付けると実際には実行せずにレシピ通りに作業を流してくれる(dry-run:予行演習)

Page 20: DevOps 研修 中級編#01

Cook 動作フロー1. nodes ディレクトリ配下にある [ホスト名].json ファイルを探す

2. ファイル内の “run_list” を読み、指定されたレシピを把握

3. [ホスト名] に ssh login

4. レシピファイルなどを rsync して Node にコピーする

5. Node 内で指定されたレシピを実行

Page 21: DevOps 研修 中級編#01

knife solo bootstrap

knife solo prepare + knife solo cook

を一つのコマンドで行う

Page 22: DevOps 研修 中級編#01

作業の仕方例1. knife solo init

2. Cookbook作成、レシピ作成

3. knife solo prepare

4. knife solo cook -W : チェック

5. knife solo cook

6. エラーが出たら修正 && knife solo cook(繰り返し)

Page 23: DevOps 研修 中級編#01

Practice

Page 24: DevOps 研修 中級編#01

Cookbooks を作る

knife solo init [repository-name]

cd [repository-name]

knife cookbook create [cookbook-name] -o site-cookbooks

Page 25: DevOps 研修 中級編#01

Cookbook の設定方法

Page 26: DevOps 研修 中級編#01

リポジトリディレクトリcookbooks : サードパーティーcookbooksの置き場

data_bags : 入力したいデータを管理する

nodes : Nodeに対して適用する設定内容、ホストごとにJSONファイルを置く

roles : 適用レシピのグルーピング

site-cookbooks : 自作cookbookの置き場

Page 27: DevOps 研修 中級編#01

自作cookbookを作る

knife cookbook create [cookbook-name] -o site-cookbooks

-o オプション : cookbookの出力先指定

site-cookbooks 配下に [cookbook-name]ディレクトリが作られる

Page 28: DevOps 研修 中級編#01

Cookbook ディレクトリattributes : 変数のデフォルト値を設定したファイルを置く

files : アップロードするファイルを置く

recipes : 実行ファイルを置く

templates : アップロードするファイル(変数設定可)を置く

Page 29: DevOps 研修 中級編#01

レシピの書き方

Page 30: DevOps 研修 中級編#01

recipes/xxx.rbの書き方

Resources Reference

https://docs.chef.io/chef/resources.html

Page 31: DevOps 研修 中級編#01

よく使うresources

package

service

template

bash

Page 32: DevOps 研修 中級編#01

Package

パッケージのマネージ

package "tar" do

action :install

end

Page 33: DevOps 研修 中級編#01

多くのpackageをインストールしたい時

rubyのeachが使える

%w{

tar

git

gcc

}.each do |pkg|

package pkg do

action :install

end

end

Page 34: DevOps 研修 中級編#01

Serviceサービスプロセスのマネージ

service "nginx" do

supports :status => true, :restart => true, :reload => true

action [:enable, :start]

end

Page 35: DevOps 研修 中級編#01

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

Page 36: DevOps 研修 中級編#01

Bashbashの実行

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

Page 37: DevOps 研修 中級編#01

条件分岐

not_if

only_if

Page 38: DevOps 研修 中級編#01

not_iffalse の時に実行する

template '/tmp/somefile' do

mode 00644

source 'somefile.erb'

not_if do

File.exists?('/etc/passwd')

end

end

Page 39: DevOps 研修 中級編#01

only_iftrue の時に実行する

template '/tmp/somefile' do

mode 00644

source 'somefile.erb'

only_if do ! File.exists?('/etc/passwd') end

end

Page 40: DevOps 研修 中級編#01

変数template(.erb)ファイル内に変数を定義

<h1><%= node['title'] %> サンプルページ</h1>

nodes/[hostname].json内に値を設定する

"title" : "Chef Tech Study",

Page 41: DevOps 研修 中級編#01

変数 階層化階層化も可能

template

<%= node[‘userinfo']['username']%>

node

"userinfo" : {

"username" : "shakesoul"

},

Page 42: DevOps 研修 中級編#01

nodejson形式

run_listに適用するレシピを書く(配列)

"run_list": [ “recipe[nginx_html]”, “recipe[php]” ]

変数の値を書く(サンプルcookbook参照)

Page 43: DevOps 研修 中級編#01

自分で作る

Page 44: DevOps 研修 中級編#01

ルールどんな状態にするCookbookかしっかり意図する

Chef Super Marketなどから一部コードのコピペはOK(まるごと持ってきて動かすだけはNG)

サードパーティーCookbookを利用してもOK

作成中の質問はいつでも受け付けます

Page 45: DevOps 研修 中級編#01

心構え

人それぞれ違うので、自分のペースで確実に成果が残るようにしてください。

大量のレシピ ≠ 良い成果

少ないレシピでも確実に動くこと。自ら作ったレシピが何を目的としているか説明できること

Page 46: DevOps 研修 中級編#01

進め方例1. まず小さなレシピを書いて動かす

2. 正しく動いたらレシピに追記して処理を増やす

3. 動かしてチェック

これを繰り返す。途中で時間切れでも成果が残る方法を取る

Page 47: DevOps 研修 中級編#01

成果発表の仕方

1. Nodeが適用前の状態であることを証明する

2. レシピ適用

3. Nodeが意図した状態になったことを証明する

Page 48: DevOps 研修 中級編#01

Let’s start !!

Page 49: DevOps 研修 中級編#01

Contact

Blog hirofukami.com

Facebook /fukami

Twitter @d_sea

Mail [email protected]