devops 研修 中級編#02

50
DevOps研修 中級編#02 Hiro Fukami ShakeSoul, inc.

Upload: hiro-fukami

Post on 16-Apr-2017

1.016 views

Category:

Technology


0 download

TRANSCRIPT

DevOps研修 中級編#02

Hiro Fukami ShakeSoul, inc.

I’m …深海 寛信 Hiro Fukami

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

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

Blog hirofukami.com

Facebook /fukami

Twitter @d_sea

中級編について

中級編でやること

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

実践による学習

中級編のゴール

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

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

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

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

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

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

今日のゴール

Cookbookの動作を理解し、自分で作り始める

目次1. 実施環境を整える

2. サードパーティーCookbookを使う

3. サンプルCookbookを動かす

4. 自分で作る

研修環境

実行マシン(Windows PC)

Node (Chef Client)

Virtual Box

knife solo コマンドssh login

演習環境の確認実行サーバに knife solo コマンドが入っていること

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

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

Chefのレポジトリディレクトリが作成済なこと

sample-cookbookがダウンロード済なこと

実施環境を整える

Nodeへ鍵認証でssh loginできるようにする

鍵生成実行マシンで以下を実施

$ cd /home/ikusei/vagrant/sample

$ ssh-keygen

Enter file in which to save the key : ./id_rsa

Enter passphrase (empty for no passphrase): (何も入力しない)

Enter same passphrase again: (何も入力しない)

id_rsa, id_rsa.pub が生成される

Nodeに公開鍵設定Nodeにて以下を実行

$ cd /vagrant

$ ls

id_rsa, id_rsa.pub が確認できる

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

確認実行マシンで以下を実施

$ ssh -i /home/ikusei/vagrant/sample/id_rsa [email protected]

パスワードを聞かれずにログインできればOK

サードパーティーCookbookを使う

yum epel レポジトリを使えるようにするCookbookをインストールする

Chef Supermarket

ブラウザで https://supermarket.chef.io へアクセス

“yum-epel" で検索

yum-epel のページを見る

自分のレポジトリに取り込む実行マシンにて

$ cd [レポジトリディレクトリ]

$ knife cookbook site install yum

$ knife cookbook site install yum-epel

[レポジトリディレクトリ]/cookbooks 配下に yum, yum-epel があること

サンプルCookbookを動かす

サンプルcookbookをコピー実行マシンで以下を実施

$ cd [sample-cookbooks]

$ cp -rf site-cookbooks/nginx_html [自分の作ったレポジトリディレクトリ]/site-cookbooks/

nodesを作る実行マシンで以下を実施

$ knife solo prepare [email protected] -i C:/cygwin/home/ikusei/.vagrant/sample/id_rsa

[レポジトリディレクトリ]/nodes/192.168.33.10.json が確認できること

jsonを編集実行マシンにて、[レポジトリディレクトリ]/nodes/192.168.33.10.json を以下のように編集する。

{

"title" : "Chef Tech Study",

"run_list": [

"recipe[yum-epel]",

"recipe[nginx_html]"

]

}

cookする実行マシンにて以下を実行

$ knife solo cook [email protected] -i id_rsa

処理が終わったらブラウザで http://192.168.33.10 へアクセス

変数の値を変える実行マシンにて、テキストエディタで 192.168.33.10.json をひらく

"title" : “learning Chef, Right Now!”,

再度、

$ knife solo cook [email protected] -i id_rsa

再度 http://192.168.33.10 へアクセス

自分で作る

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

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

referenceのサンプルからコードのコピペはOK(まるごと持ってきて動かすだけはNG)

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

心構え

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

大量のレシピ ≠ 良い成果

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

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

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

3. 動かしてチェック

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

成果発表の仕方

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

2. レシピ適用

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

Let’s start !!

Contact

Blog hirofukami.com

Facebook /fukami

Twitter @d_sea

Mail [email protected]

参考 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参照)