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 研修 中級編#02

1,194 views

Published on

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

DevOpsの代表的ツールとして Chef の knife solo のハンズオン研修になります。
初心者を対象とした knife solo の実践研修にてPCを使いながら行いました。

DevOps 研修は概要説明から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 研修 中級編#02

  1. 1. DevOps研修 中級編#02 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. 参加者へのお願い まず手を動かす 失敗するリスクのない環境 できるだけトライアンドエラーをする たくさん失敗して、失敗から学ぶ 自分の道具にするためにたくさん触る
  7. 7. 今日のゴール Cookbookの動作を理解し、自分で作り始める
  8. 8. 目次 1. 実施環境を整える 2. サードパーティーCookbookを使う 3. サンプルCookbookを動かす 4. 自分で作る
  9. 9. 研修環境 実行マシン(Windows PC) Node (Chef Client) Virtual Box knife solo コマンド ssh login
  10. 10. 演習環境の確認 実行サーバに knife solo コマンドが入っていること Nodeとなるサーバがあること knife コマンド実行環境からNodeにsshログインでき ること Chefのレポジトリディレクトリが作成済なこと sample-cookbookがダウンロード済なこと
  11. 11. 実施環境を整える
  12. 12. Nodeへ 認証でssh loginできるようにする
  13. 13. 生成 実行マシンで以下を実施 $ 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 が生成される
  14. 14. Nodeに公開 設定 Nodeにて以下を実行 $ cd /vagrant $ ls id_rsa, id_rsa.pub が確認できる $ cat id_rsa.pub >> ~/.ssh/authorized_keys
  15. 15. 確認 実行マシンで以下を実施 $ ssh -i /home/ikusei/vagrant/sample/ id_rsa root@192.168.33.10 パスワードを聞かれずにログインできればOK
  16. 16. サードパーティー Cookbookを使う
  17. 17. yum epel レポジトリを使えるようにする Cookbookをインストールする
  18. 18. Chef Supermarket ブラウザで https://supermarket.chef.io へアクセス “yum-epel" で検索 yum-epel のページを見る
  19. 19. 自分のレポジトリに取り込む 実行マシンにて $ cd [レポジトリディレクトリ] $ knife cookbook site install yum $ knife cookbook site install yum-epel [レポジトリディレクトリ]/cookbooks 配下に yum, yum- epel があること
  20. 20. サンプルCookbookを 動かす
  21. 21. サンプルcookbookをコピー 実行マシンで以下を実施 $ cd [sample-cookbooks] $ cp -rf site-cookbooks/nginx_html [自 分の作ったレポジトリディレクトリ]/site- cookbooks/
  22. 22. nodesを作る 実行マシンで以下を実施 $ knife solo prepare root@192.168.33.10
 -i C:/cygwin/home/ikusei/.vagrant/ sample/id_rsa [レポジトリディレクトリ]/nodes/192.168.33.10.json が確認できること
  23. 23. jsonを編集 実行マシンにて、[レポジトリディレクトリ]/nodes/192.168.33.10.json を以 下のように編集する。 { "title" : "Chef Tech Study", "run_list": [ "recipe[yum-epel]", "recipe[nginx_html]" ] }
  24. 24. cookする 実行マシンにて以下を実行 $ knife solo cook root@192.168.33.10
 -i id_rsa 処理が終わったらブラウザで http://192.168.33.10 へアクセス
  25. 25. 変数の値を変える 実行マシンにて、テキストエディタで 192.168.33.10.json をひらく "title" : “learning Chef, Right Now!”, 再度、 $ knife solo cook root@192.168.33.10
 -i id_rsa 再度 http://192.168.33.10 へアクセス
  26. 26. 自分で作る
  27. 27. ルール どんな状態にするCookbookかしっかり意図する サードパーティーCookbookを利用してもOK referenceのサンプルからコードのコピペはOK(ま るごと持ってきて動かすだけはNG) 作成中の質問はいつでも受け付けます
  28. 28. 心構え 人それぞれ違うので、自分のペースで確実に成果 が残るようにしてください。 大量のレシピ ≠ 良い成果 少ないレシピでも確実に動くこと。自ら作ったレ シピが何を目的としているか説明できること
  29. 29. 進め方例 1. まず小さなレシピを書いて動かす 2. 正しく動いたらレシピに追記して処理を増やす 3. 動かしてチェック これを繰り返す。途中で時間切れでも成果が残る 方法を取る
  30. 30. 成果発表の仕方 1. Nodeが適用前の状態であることを証明する 2. レシピ適用 3. Nodeが意図した状態になったことを証明する
  31. 31. Let’s start !!
  32. 32. Contact Blog hirofukami.com Facebook /fukami Twitter @d_sea Mail fukami@shakesoul.net
  33. 33. 参考 Cookbook の設定方法
  34. 34. リポジトリディレクトリ cookbooks : サードパーティーcookbooksの置き場 data_bags : 入力したいデータを管理する nodes : Nodeに対して適用する設定内容、ホストごとに JSONファイルを置く roles : 適用レシピのグルーピング site-cookbooks : 自作cookbookの置き場
  35. 35. 自作cookbookを作る knife cookbook create [cookbook-name] -o site- cookbooks -o オプション : cookbookの出力先指定 site-cookbooks 配下に [cookbook-name]ディレク トリが作られる
  36. 36. Cookbook ディレクトリ attributes : 変数のデフォルト値を設定したファイル を置く files : アップロードするファイルを置く recipes : 実行ファイルを置く templates : アップロードするファイル(変数設定 可)を置く
  37. 37. 参考 レシピの書き方
  38. 38. recipes/xxx.rbの書き方 Resources Reference https://docs.chef.io/chef/resources.html
  39. 39. よく使うresources package service template bash
  40. 40. Package パッケージのマネージ package "tar" do action :install end
  41. 41. 多くのpackageをインストールし たい時 rubyのeachが使える %w{ tar git gcc }.each do |pkg| package pkg do action :install end end
  42. 42. Service サービスプロセスのマネージ service "nginx" do supports :status => true, :restart => true, :reload => true action [:enable, :start] end
  43. 43. 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
  44. 44. 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
  45. 45. 条件分岐 not_if only_if
  46. 46. not_if false の時に実行する template '/tmp/somefile' do mode 00644 source 'somefile.erb' not_if do File.exists?('/etc/passwd') end end
  47. 47. only_if true の時に実行する template '/tmp/somefile' do mode 00644 source 'somefile.erb' only_if do ! File.exists?('/etc/passwd') end end
  48. 48. 変数 template(.erb)ファイル内に変数を定義 <h1><%= node['title'] %> サンプルページ</h1> nodes/[hostname].json内に値を設定する "title" : "Chef Tech Study",
  49. 49. 変数 階層化 階層化も可能 template <%= node[‘userinfo']['username']%> node "userinfo" : { "username" : "shakesoul" },
  50. 50. node json形式 run_listに適用するレシピを書く(配列) "run_list": [
 “recipe[nginx_html]”,
 “recipe[php]”
 ] 変数の値を書く(サンプルcookbook参照)

×