Contenu connexe
Similaire à Chef社内向け解説とその課題について (20)
Chef社内向け解説とその課題について
- 14. VAGRANTFILEについて
• Vagrant(ベイグラント)とは、VirtualBoxのラッパーツールで、コマンド
ラインから仮想OSを起動するのに用います。(Bootstrappingツールです)
• AWS上でインスタンス起動する場合について。
# vagrant up --provider=aws
# vagrant ssh
# vagrant destroy
編集したVagrantFileの中身は以下のような感じです
Vagrant.configure("2") do |config|
config.vm.box = "dummy"
config.vm.provider :aws do |aws|
aws.access_key_id = ENV['AWS_ACCESS_KEY_ID']
aws.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
aws.keypair_name = "komi-test"
aws.ssh_username = "root"
aws.ssh_private_key_path = "~/.ssh/id_rsa
aws.instance_type = "t1.micro"
aws.region = "ap-northeast-1"
aws.ami = "ami-ca0784cb"
aws.security_groups = [ 'default' ]
end
end
←インスタンスタイプ指定
←東京リージョンを指定
←AMI(OSイメージ)を指定
←セキュリティグループを指定
←管理ノードへsshログインするための秘密鍵を指定
←管理ノードへsshログインするためのユーザを指定
←外部からsshログインするためAWSの秘密鍵を指定
←AWSのアクセスキーIDを指定
←AWSのシークレットアクセスキーを指定
←ダミーのBOXを指定
http://www.ryuzee.com/contents/blog/6538
- 15. レポジトリの構成
• 新規Chefレポジトリ(キッチン)を作るとできるディレクトリについて
# knife solo init chef-repo
# tree -L 1 chef-repo
chef-repo
|-- cookbooks
|-- data_bags
|-- nodes
|-- roles
|-- site-cookbooks
`-- solo.rb
cookbooksとsite-cookbooksはクックブックを格納するディレクトリで、
cookbooksにはダウンロードしてきたもの、site-cookbooksには自分で
作ったものを入れるのが推奨されているようです。
そのほか、knife-soloを入れると/root/.chef/knife.rbが作成され、必要な
ディレクトリパスなどを指定します。
←サードパーティレシピ置き場
←ユーザ等データ管理機能使用時に使う
←各サーバ(node)用のJSONファイル置き場
← Roleを使うとき用ディレクトリ
←自作レシピ置き場
← cookbookのパスなどを設定
- 16. COOKBOOKの構成
knife cookbook create <cookbook-name>で作るディレクトリの中身
tree nginx -F
nginx
|-- CHANGELOG.md
|-- README.md
|-- attributes/
| `-- default.rb
|-- definitions/
|-- files/
| `-- default/
|-- libraries/
|-- metadata.rb
|-- providers/
|-- recipes/
| `-- default.rb
| `-- server.rb
|-- resources/
`-- templates/
`-- default/
`-- nginx.conf.erb
←filesの下に定数のみの設定ファイルを置く
←recipesの下でレシピを書いておく
←templatesの下に変数が必要な設定ファイルを置く
←templateリソースを使う場合、
attributesの下にデフォルト値を定義する
←default以外のレシピはnginx::server等で利用可能
- 17. レシピについて
• Nginxのインストールと起動、設定ファイル設置とリロードするレシピ
# vi site-cookbooks/nginx/recipes/default.rb
package "nginx" do
action :install
end
service "nginx" do
supports :status => true, :restart => true, :reload => :true
action [ :enable, :start ]
end
template "nginx.conf" do
path "/etc/nginx/nginx.conf"
source "nginx.conf.erb"
owner "root"
group "root"
mode 0644
notifies :reload, 'service[nginx]'
end
レシピはやりたいことに応じた
リソースを使って書いていきます。
パッケージをインストールするの
はpackageリソース。
サービスを起動したり有効にする
のはserviceリソース。
設定ファイル(変数有)を配置す
るのはtemplateリソース。
- 20. TEMPLATEについて2
• Templateリソースでレシピを書く
template "nginx.conf" do
path "/etc/nginx/nginx.conf"
source "nginx.conf.erb"
owner "root"
group "root"
mode 0644
notifies :reload, 'service[nginx]'
end
• attribute/default.rbにデフォルト値を定義する
default['nginx']['port'] = "80”
• nodeまたはroleのattributeを定義する
{
"name":"webserver",
"chef_type": "role",
"json_class":"Chef::Role",
"default_attributes":{
"nginx": {
"port": "80",
}
},
# vi cookbooks/nginx/templates/default/nginx.conf.erb
~略~
server {
listen <%= node['nginx']['port'] %>;
server_name localhost;
~略~
ポート番号を変数に指定。
• Port番号を変数展開するようにした設定ファイル
- 22. ROLEについて
• 某システムでは、
webserver、
dbserver、
admserverでroleを
分けています。
cd chef-repo/roles
vi webserver.json
{
"name":"webserver", webserverのロール
"chef_type": "role",
"json_class":"Chef::Role",
"default_attributes":{
"base_setting": {
"swappiness": "30",
"tcp_tw_reuse": "0",
"tcp_tw_recycle": "0",
"tcp_fin_timeout": "60",
"tcp_max_syn_backlog": "4096",
"somaxconn": "4096"
}
},
"override_attributes":{},
"description":"webserver's role",
"run_list": [
"recipe[base_setting::bkup_dir]", 基本設定、バックアップディレクトリ作成
"recipe[login_users]", ログインユーザを作る
"recipe[base_setting::hosts]", 基本設定、hosts
"recipe[base_setting::sysctl]", 基本設定、sysctl
"recipe[base_setting::disable]", 基本設定、disable
"recipe[base_setting::ntpdate]", 基本設定、ntp
"recipe[base_setting::mail-client]", 基本設定、mail
"recipe[base_setting::logrotate]", 基本設定、ログローテート
"recipe[httpd::httpd-server]", httpdサーバ
"recipe[httpd::basic_auth]", httpdのベーシック認証
"recipe[httpd::wordpress]", httpdのwordpress
"recipe[httpd::s3mount]", httpdのs3mount
"recipe[munin::munin-node]", munin-node
"recipe[munin::munin-node-web]", munin-nodeのweb用プラグイン配置
"recipe[zabbix::zabbix-agent]" zabbix-agent
]
}
※※Role内で
run_listを管理する
のは初心者Chefア
ンチパターンによ
ると、バージョン
管理できないため
非推奨の模様。リ
ファクタリング対
象です。
- 24. NOT_IF, NOTIFIESについて
• not_if:実行結果が0でない場合にそのリソースを
実行する。たとえばrpm –qaでパッケージが入っ
てなかったらpackageリソースでインストール
する等。
• only_if:実行結果が0だった場合にそのリソース
を実行する。特定のディレクトリが存在した場合
にファイルを置く等、事前の確認を行いたい場合
に利用するものの模様。
• notifies:設定ファイルが更新されたらサービスを
リロードしたい、といった用途に用いるもので複
数のリソース内に定義することが可能。
Scriptリソースや2度実行されたくないリソース内には
必ずnot_ifを定義する必要があります。
- 27. 参考:某システムのレシピの構成概要 ディレクトリパス
chefのレポジトリ /root/chef-repo
VagrantFileの場所 /root/chef-repo/VagrantFile
要件 対応リソース cookbook レシピ名 コメント Node(Role)
ホスト名の変更 VagrantFile -
IF設定 VagrantFile -
hosts設定 template,Attribute,Role base_setting hosts.rb Ohaiのhostnameを使う all
bkupディレクトリ作成 Directory base_setting bkup_dir.rb all
カーネルパラメータ設定template,Attribute,Role base_setting sysctl.rb all
アカウント作成 Group,User,data_bags login_users default.rb all
Selinux無効化 file base_setting disable.rb all
yum設定修正 file base_setting disable.rb all
IPv6無効化 file base_setting disable.rb all
不要cron停止 file base_setting disable.rb all
yumリポジトリ設定 - base_setting
opscode要らず元のAMIに
あった
all
ntpデーモン設定 package,service,file base_setting ntpd.rb localhost
cron設定(ntpdate) cron base_setting ntpdate.rb クライアント設定 allクライアント
MTA設定 package,service,file,script base_setting mail-postfix.rb
mail-dovecot.rb
localhost
メールクライアント設定file base_setting mail-client.rb クライアント設定 allクライアント
logrotate.d設定 file base_setting logrotate.rb all
apache導入基本設定 script,service,file httpd httpd-server.rb web,localhost
mod_ssl導入設定 - httpd mod_ssl.rb ELB使うので要らなかった web
ベーシック認証設定 file httpd basic_auth.rb web
s3mount設定 file httpd s3mount.rb web
wordpress導入設定 file,script httpd wordpress.rb web,localhost
mysql導入基本設定 script,service,file mysqld mysqld-server.rb database
mysqlアカウント作成 databags,script mysqld mysql-users.rb
databaseクックブック依
存
database
munin-node設定 script,service,file munin munin-node.rb
munin-node-web.rb
munin-node-db.rb
web,db用のレシピをわけ
た
allクライアント
munin-server設定 package,service,file munin munin-server.rb localhost
監視設定zabbix-agent package,service,file zabbix zabbix-agent.rb all
監視設定zabbix-proxy package,service,file zabbix zabbix-proxy.rb localhost
phpmyadmin導入設定 - httpd phpmyadmin.rb 実は要らなかった模様 localhost
Rubyわからない全くの初心者がレシピを書きあげるのに2カ月程度。
WEB1+DB1+STG1な環境。
- 29. 課題とこれからのとりくみ
• レシピの書き方ほか自由度が高すぎて何がただしいのかよくわかっていないのが
課題の一つ。If文をもっと使いこなせたらよさそう。
• Host名の管理にdata_bagsをつかいたいけどどうなのでしょう。
• Scriptリソースを極力つかわないのが無用な問題を避けるまたは環境の違いを吸
収するために理想なようですが、使わないとどうにもならないところも多数あり
ました。
• Chef-ServerでないとEnvironmentが使えずに試験環境と本番環境など環境分け
のほうほうがRoleつかうくらいしか思いつかないです。
• サードパーティのレシピを使ってみたいがruby力等がたりずレシピを読み切れ
ない。書いたとおりに動くものは書いてある内容が理解できないなら使用するべ
きではないように思います。
• 自分でレシピを書いて育てていく。(ruby力の強化およびこれまで使ってきた
手順を整理する必要が生じます。 )
• Serverspecでテストを書いてテストする。(一応できたところです)
• 実環境での適用を検討する。(某システムは適用する前に切り替わってしまった
ためリリース済みの環境に試験ができない)これをすすめていかないと取り組ん
でる意味がないというか自動化や冪等性の恩恵を受けられないです。
• サーバリソースに応じたパラメータ自動調整などに取り組みたい。
• 試験環境とかハンズオン用のサーバを一気に立てて使い終わったら落とす等、夢
は広がってるようです。