CHEF
(WINDOWSとLINUXの環境構築)
目次
1.概要
2.環境構成
3.環境構築
4.自動化作業
そもそもChefって?・・・・
:Chefとは構成管理製品と呼ばれる。インフラにおける
構築作業などを自動化処理を行う為の製品。
構築作業におけるルーチンワークの自動化をする
且つメンテナンス時のサービス停止等も自動化して
楽ができます。
ってことは?
1.概要
3.今回の目標
1.Chefの環境を作れます(Windowsでも、Linuxでも!)
2.Chefの実行プログラムを作れるようになります
(Service,FileTransfer,FileInstall,OSReboot)
4.インフラ作業をChefで自動化できます。
3.実行プログラムをどうやって動かすかがわかります。
◆今回のハンズオンでは下記の内容を習得します。
つまるところ⇒
Chefを使った業務に入り込むことができます
⇒今回の構築を行う上での特殊な用語について下記に記載する。
2.用語説明
No 名称 意味
1 構成管理 インフラ作業をコード化するソフトウェア製品の総称
2 Chef 今回使用する構成管理製品
3 ChefServer Chefのサーバ用途をもつマシン。Chefの設定、Node管理等
4 WorkStatio
n
cookbookを作成するコマンドの実行, 作業サーバ
5 Node Chefのクライアント用途をもつマシン
6 Knife ChefServerとWorkStationのインターフェースを提供するコマンドライン
ツール
7 bootstrap Knifeコマンドのオプション。Client導入作業をサーバからコントロールする
8 Cookbook コードをパッケージ化したもの。実行時のRecipe、ファイル展開時のファイ
ル
9 Recipe Chefのコード。Ruby形式で記載
◆参考資料
⇒構成管理製品(Chef)の概要資料
http://www.slideshare.net/100003829577658/chef-48229145
◆説明者
・氏名:小田島 靖(株式会社Rosso)
・部署:システムソリューション
・業務歴:構成管理を使用した自動化システム設計、構築
・業務歴:シンクライアント環境の運用
まずは環境・・・・
:環境構成図
:構成内容一覧(OSとか。。。Diskとか。。。)
:導入パッケージ
(Chef作るためには何をどこに入れるの?)
2.環境構成
環境構成図
⇒構成管理の機能を確認する上での最小構成とする。
⇒WindowsNodeとLinuxNodeでは通信プロトコルの違いから使用するポートも違う
⇒Recipeの実行はサーバからクライアントに対しそれぞれのプロトコルを使用し実行する。
⇒Node登録はBootStrapを使用する為、Node登録時にクライアントへのログインはしない
CentOS 6.7
Chef Server
WorkStation
CentOS 6.7
ChefNode
Apach
Win2k12
Chef Node
DHCP
Recipe実行:SSH通信(22)
Recipe実行:WinRM通信(5985,5986)
Node登録:bootstrap
⇒ChefServerとWorkStationを同一マシンに導入することで管理サーバの数を減らす。
⇒No5~7はChef環境構築の前提条件になる。
構成内容一覧
No 項目 Server Client(Linux) Client(Windows)
1 OS CentOS 6.7Final CentOS 6.7 Final Windows 2012 std
2 Hostname chefserver Linnode Winnode
3 Disk/Mem/CPU 20GB/1028/1core 20GB/1028/1co
re
60GB/2048/2core
4 用途 ChefServer
WorkStation
ChefNode
Apache Web
ChefNode
DHCPServer
5 通信ポート 22,80,443,5985,5
986
22 5985,5986
6 名前解決 Server/Client Server/Client Server/Client
7 時刻同期 Osaka,Japan Osaka,Japan Japan/Osaka
8 構成 ChefServer(11.16.4
)
ChefClient(11.0.8)
ChefClient(11.1.
8)
Apache(2.0)
ChefClient(11.1.8)
導入パッケージ(ソフトウェア)
⇒Client導入に関してはServerより「bootstrap」を使用してインストールを行う。
⇒WindowsNodeに対して扱うCookBookに関しては外部サイトよりダウンロードして使用。
No パッケージ名 用途 備考
1 chef-server-11.0.8-
1.el6.x86_64.rpm
Chefのサーバパッケー
ジ
・Chefのサイトより
DL
・Server側にインス
トール
2 chef-11.16.4-1.el6.x86_64.rpm Chefのパッケージ
(Knife)
・Chefのサイトより
DL
・Server側にインス
トール
3 Chef-repo Cookbook ・SuperMarketより
DL
4 windows Windows用Cookbook ・SuperMarketより
DL
5 chef_handler Reboot用CookBook ・SuperMarketより
DL
環境はわかったけど、入れ方わからん。。。
:環境構築手順
:Chefを使うためのディレクトリ構成
3.環境構築
環境構築手順
⇒Windowsも管理対象Nodeの場合、Nodeに対しても設定を行う必要がある。
No 項目 実行サーバ コマンドライン
1 時刻同期 Server/Client ntpd -q
2 名前解決 Server/Client vi /etc/hosts
3 ポート解放 Server/Client vi /etc/sysconfig/iptables
4 サーバインストール Server rpm -ivh <Serverパッケージ>
5 Server設定、鍵の作成 Server chef-server-ctl reconfigure
6 WorkStation Server rpm -ivh <Clientパッケージ>
7 鍵コピー Server cp <src:admin.pem> <dest:admin.pem>
Server cp <src:validation.pem> <dest:validation.pem>
8 Knife初期設定 Server knife configure -i
9 Client設定ファイル生成 Server knife configure client
10 knife windows 設定 Server yum install libxml2-devel libxslt-devel
/opt/chef/embedded/bin/gem install knife-windows --no-ri --no-rdoc
11 PowerShell有効可 WinNode Set-ExecutionPolicy bypass
12 WinRm設定 WinNode Enable-PSRemoting -force
13 Set-Item -Path "WSMan:localhostMaxTimeoutms" 1800000
14 Set-Item -Path "WSMan:localhostServiceAllowUnencrypted" "true"
15 set-Item -Path "WSMan:localhostServiceAuthBasic" "true"
16 Node追加 Server
knife bootstrap <host> --ssh-user root --node-name <node>
knife bootstrap windows winrm <host> -x "<user>" -P
Chefを使うためのディレクトリ構成
⇒実行するRecipeを格納するディレクトリの一覧を記載する。(一部ダウンロード)
No ディレクトリ構造 作成方法 用途
1 Cookbook ダウンロード CookBook格納ディレクトリ。ダウンロードしコピー
2 apache 作成 (Apache) Cookbook
3 Recipes 作成 (Apache) Recipe格納ディレクトリ
4 default.rb 作成 (Apache) インストール&設定Recipe
5 files 作成 (Apache) 配布ファイル格納ディレクトリ
6 default 作成 (Apache) 配布ファイル格納ディレクトリ
7 sample.html 作成 (Apache) 配布ファイル
8 httpd_conf 作成 (Apache) 配布ファイル
9 windows ダウンロード (Windows) 機能CookBook
10 chef-handler ダウンロード (Windows) 機能CookBook
11 win_operation 作成 (Windows) 操作CookBook
12 recipes 作成 (Windows) 操作Recipe格納ディレクトリ
13 01_FileTransfer.rb 作成 (Windows) OS再起動Recipe
14 02_Service.rb 作成 (Windows) サービス起動Recipe
15 03_Feature.rb 作成 (Windows) 役割追加Recipe
16 04_Pkginstall.rb 作成 (Windows) S/WインストールRecipe
17 05_Reboot.rb 作成 (Windows) OS再起動
18 files 作成 (Windows) 配布ファイル格納ディレクトリ
19 default 作成 (Windows) 配布ファイル格納ディレクトリ
20 7z1514-x64.msi 作成 (Windows) 配布ファイル
さぁ!自動化!!
:Chef-Repo、CooKbook格納
:Recipe作成 -Windows&Linux-
:Recipe実行
4.自動化作業
◆1「WinZip」等でServerに「Chef-Repo」を格納する。
Chef-Repo、CooKbook格納
⇒追加したNodeに対してCookBook格納ディレクトリを配置する
⇒「Chef-Repo」「windows」「chef-handler」に関しては事前に外部サイトよりダウンロード。
[root@chef_server work]# ls -la chef-repo
LICENSE README.md chefignore cookbooks data_bags environments roles
[root@chef_server work]# ls -la chef-repo/cookbooks
READ.ME
◆2「Windows」「Chef-Handler」を「CookBook」に丸ごとコピー
[root@chef_server work]# ls -la chef-repo/cookbooks
READ.ME chef-handler windows
◆3「Knife」コマンドにてCooKbook 「apache」「win_operation」 を作成
[root@chef_server chef-repo]# knife cookbook create apache –o /chef-repo/cookbooks
[root@chef_server chef-repo]# knife cookbook create win_operation –o /chef-repo/cookbooks
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
Recipeの作成-Linux-
⇒apacheの設定ファイル等(編集済み)のファイルをCookbook/apache/files/defaultに格納
⇒ファイルパスの配置(fails/default)はChefの読込先の為基本的に固定する。
◆4「httpd_conf」「Sampl.html」を「CookBook/apache/files/default」にコピー
[root@chef_server work]# ls -la chef-repo/apache/files/default
httpd_conf sample.html
◆5「Cookbooks/apache/recipes/default.rb」編集する。
※ファイル内容は「別紙:apache:default.rb」にて記載。
※ファイル内容は「別紙:apachefile」にて記載。
◆6Windows用「7zipインストールファイル」を「Cookbook/win_opration/files/default」に格納する。
[root@chef_server work]# ls -la chef-repo/win_operation/files/default
7z1514-x64.msi(インストールする対象のファイルを格納すること)
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
Recipe作成 -Windows-
⇒apacheの設定ファイル等(編集済み)のファイルをCookbook/apache/files/defaultに格納
⇒ファイルパスの配置(fails/default)はChefの読込先の為基本的に固定する。
◆7「Cookbook/win_operation/recipes」の「default.rb」を下記の名前にリネームコピー
[root@chef_server work]# cp –p /Cookbook/win_operation/recipes/default.rb
/Cookbook/win_operation/recipes/01_FileTransfer
[root@chef_server work]# ls /Cookbook/win_operation/recipes
Default.rb 01_FileTransfer.rb 02_install.rb 03_Fiuture.rb 04_service.rb 05_reboot.rb
↑赤文字記載ファイルを作成する。
◆8「◆7」で作成したファイルをそれぞれ編集する。
※ファイル内容は「別紙:apache:default.rb」にて記載。
◆9Recipe実行のリスト(Run_list)を以下のコマンドを実行し作成する
[root@chef_server work]# knife role create sample -e vi
“recipe[01_FileTransfer]”,
“<recipe>”
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
Recipe実行
⇒Runlistはrolesに登録している場合手順10は必要ない(Windowsではrolesに登録している)
⇒WindowsとLinuxではRecipeを実行するときのコマンドが違う。
◆10.作成したRecipeのアップロードする(以下コマンド実行)
[root@chef_server work]# knife cookbook upload apache -o /chef-repo/cookbook
[root@chef_server work]# knife cookbook upload chef-handler -o /chef-repo/cookbook
◆11.Linux用ApacheRecipeのみRun_listへ登録する。
[root@chef_server work]# knife node run_list add linnode 'recipe[apache]'
◆12.uploadしたRecipeをLinuxNodeへ実行する(以下コマンド実行)
[root@chef_server work]# knife ssh 'name:linnode' 'chef-client -o recipe[apache]'
◆12.UploadしたRecipeをWindowsNodeへ実行する(以下コマンド実行)
[root@chef_server work]# knife winrm 'name:winnode' 'chef-client -o role[sample]'
[root@chef_server work]# knife cookbook upload windows -o /chef-repo/cookbook
[root@chef_server work]# knife cookbook upload win_operation -o /chef-repo/cookbook
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
別紙.apache –default.rb-
⇒Default.rbだけでApacheのインストールと設定を行っている。
⇒Default.rbのリネームを行うと実行時のRecipeもリネームする必要がある
package “httpd” do
action :install
end
cookbook_file "/etc/httpd/conf/httpd.conf" do
source "httpd.conf"
owner 'root'
group 'root'
mode 00644
end
directory "/var/www/html/sample" do
owner "apache"
group "apache"
mode 00755
action :create
end
cookbook_file "/var/www/html/sample/sample.html" do
source "sample.html"
owner 'root'
group 'root'
mode 00644
end
service "httpd" do
action [ :enable, :start ]
end
Service:HTTPDインストール
HTTPD.CONFの設定
※httpd_confは作成して
files/defaultに格納
サンプルページ用ディレクトリの作
成
サンプルページ用ファイルの展開
httpdServiceの起動設定
別紙.Win_operations
windows_feature 'DHCPServer' do
action :install
end
include_recipe ‘windows::reboot_handler’ // include_recipe で 外部レシピの実行
windows_reboot 30 do // WindowsRebootのリソース
reason ‘only win restart’ //
action :nothing // Rebootはアクションの後に呼び出す
end
log 'Mack ChefRecipe' do
message ‘Make ChefRecipe!!’ // ログを吐き出すリソース
notifies :request, ‘windows_reboot[30]} // 再起動リソースを実行
end
⇒RolesにRun_listを登録し01~05のRecipeをシーケンシャルに実行している
cookbook_file 'C:work7z1514-x64.msi' do
mode 00644
end
windows_package '7zip' do
source 'C:/work/7z1514-x64.msi'
action :install
end
service "SNMPTRAP" do
action :start
end
service "msiserver" do
action :start
end
別紙.apachfile設定/role(run_list)
⇒Chefで転送するapacheの設定ファイルの内容を下記に記載。
⇒/files/defaultにおいてあるファイルが転送される
⇒roleのRun_listに記載することで単体で作成されたResipeを連続して起動させている
Listen 80
ServerRoot "/etc/httpd"
DocumentRoot "/var/www/html"
Httpd.conf
<html>
<body>
<h1> Makechef-Apache</h1>
</html>
Sample.html
[root@chefserver recipes]# knife role create sample -e vi
{
"name": "sample",
"description": "",
"json_class": "Chef::Role",
"default_attributes": {
},
"override_attributes": {
},
"chef_type": "role",
"run_list": [
"recipe[win_operation::06_Win_feature]"
],
"env_run_lists": {
}
}
レシピを実行順に記載
Role:sample
お疲れ様でした。
:最終的に。。。
⇒自己責任で。。。

Chef windows linux環境構築

Editor's Notes

  • #13 サーバインストール WorkStation,Knife インストール ChefのServer設定、鍵ファイル生成 通信用ファイルのクライアントコピー Knifeの初期設定を行う Client設定ファイル生成 ChefServerにNodeを追加する PowerShellの有効可(WinNodeのみ) WinRmの設定(WinNodeのみ)