devops 研修 中級編#01

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

Upload: hiro-fukami

Post on 16-Apr-2017

1.124 views

Category:

Technology


0 download

TRANSCRIPT

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 [email protected]:shakesoulinc/sample-cookbooks.git

もしくは

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

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 へアクセス

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. レシピファイルなどを rsync して Node にコピーする

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

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. エラーが出たら修正 && knife solo cook(繰り返し)

Practice

Cookbooks を作る

knife solo init [repository-name]

cd [repository-name]

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

Cookbook の設定方法

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

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

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

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

site-cookbooks : 自作cookbookの置き場

自作cookbookを作る

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

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

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

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, :start]

end

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

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

条件分岐

not_if

only_if

not_iffalse の時に実行する

template '/tmp/somefile' do

mode 00644

source 'somefile.erb'

not_if do

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

end

end

only_iftrue の時に実行する

template '/tmp/somefile' do

mode 00644

source 'somefile.erb'

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

end

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

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

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

"title" : "Chef Tech Study",

変数 階層化階層化も可能

template

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

node

"userinfo" : {

"username" : "shakesoul"

},

nodejson形式

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 [email protected]