Upload
yukihiko-sawanobori
View
1.943
Download
0
Embed Size (px)
DESCRIPTION
http://chef-meetup-kansai.doorkeeper.jp/events/4978 第1回 Chef Casual Talks Kansai のオープニングに使ったスライドです
Citation preview
第一回Chef Casual Talks Kansai
2013.07.24主催: HiganWorks LLC
Wednesday, July 24, 13
• http://chef-meetup-kansai.doorkeeper.jp/
• Chefとかでサーバインフラ自動化全般に関わっている人で集まって情報交換しましょうというコミュニティです
• 原則、参加者全員なんでもいいから発表
• ハッシュタグ(仮): #opschef_kansai , #opschef_ja
2Wednesday, July 24, 13
HiganWorks, OpsRockについて
3
• http://opsrock.in 共同開発・運営
• AWS OpsWorksとChefを主に取り扱うソリューションを提供
• アプリケーションのためのプラットフォーム構築/運用自動化をテーマに活動
Wednesday, July 24, 13
配布資料(参加特典)TDI with chef(Ja)第一章
4注:Casualさはカケラもございません
Wednesday, July 24, 13
FYI: 先日ChefClientの11.6.0がリリース
5Wednesday, July 24, 13
リリースノートのコントリビュータにちゃっかり混ざってみました※ @urasoko 氏が言及しなかったら多分気づかず
6Wednesday, July 24, 13
インフラとしてのコード- Infrastructure as code -
Chef Casual Talks Kansai Vol.1オープニング
Wednesday, July 24, 13
Chef によるテスト駆動型インフラストラクチャ開発 より• ボタンひとつでサーバインスタンスの調達• 生産性の高いウェブ・アプリケーションフレームワークの隆盛
• インフラの抽象化、設計、実装、デプロイというニーズ
• アプリ開発の優れた手法を取り入れ
8Wednesday, July 24, 13
『コードとしてのインフラ』というアプローチがもたらす恩恵
• 自動化(Automation)
• 敏捷性(Agility)
• 拡張性(Scalability)
• 信頼性(Reassurance)
• ディザスタ・リカバリ(Disaster recovery)
• それとOpscodeが提唱する、基礎的(primitive)コンポーネントを再利用可能にする10の原則※詳しくは配布資料で。(”収束”・”冪等性”など)
9Wednesday, July 24, 13
でも実際どういうことなん?
Wednesday, July 24, 13
先日構築したシステムから、コードとしてのインフラって
“こういう事なのかもしれん”という解釈をちょっとお話します
Wednesday, July 24, 13
アプリデプロイをたのまれました
Wednesday, July 24, 13
今からインフラを構築します...
まず何しますか?
Wednesday, July 24, 13
初手、git init
※完成後のいま、93commits
Wednesday, July 24, 13
bundle initvim Gemfilebundle install
Wednesday, July 24, 13
librarian-chef initvim Cheffile
librarian-chef install
Wednesday, July 24, 13
この頃のリポジトリ├── Cheffile├── Cheffile.lock├── Gemfile├── README.md├── Rakefile├── cookbooks└── site-cookbooks
17
※git checkoutで調査
Wednesday, July 24, 13
このころのCheffile抜粋site 'http://community.opscode.com/api/v1'cookbook 'smartmachine_functions'cookbook 'monit_bin'
18Wednesday, July 24, 13
余談、Readme as systemこうやってサーバ構築する強者もいます。
$ sh README.md
中身は適当に想像して下さい。
19Wednesday, July 24, 13
そしてknife cookbook create (site-cookbooks)
knife role createknife data bag create
※適当に繰り返し確認用に vim solo.rb & chef-shell -s -c
solo.rb
Wednesday, July 24, 13
Q.サーバ無いの?A.まだありません
Wednesday, July 24, 13
この頃のシステム(?)構成
22
HostedChef
WorkStation(MacBook)
Wednesday, July 24, 13
Hosted Chefつこうてんの??• Opscode提供のSaaS
• Organizationあたり『5ノード』まで無料
• ⇒将来OSS ChefSeverに移行するの前提で開発サーバ用に使い倒す
• 用がすんだら消す
• このパスなし ✕ chef-solo => chef-server
• 捕捉: 大概ChefSoloでいいと思います。私はChefSoloに慣れてないのでClient/Serverにしてるだけ。
23Wednesday, July 24, 13
そろそろサーバインスタンス
つくるかー
Wednesday, July 24, 13
knife (Iaas) createor
knife bootstrap
Wednesday, July 24, 13
開発サーバで設定を検討しながら
Cookbookへ
Wednesday, July 24, 13
この頃のリポジトリ2 1/2├── Cheffile├── Cheffile.lock├── Gemfile
├── Gemfile.lock├── README.md├── certs├── cookbooks│ ├── chefclient_simple_cron│ ├── ipf│ ├── ipf_configure│ ├── logadm│ ├── monit_bin│ ├── partial_search
│ ├── postfix│ ├── rbac│ ├── smartmachine_functions│ └── smf
27
※git checkoutで調査
Wednesday, July 24, 13
この頃のリポジトリ2 2/2├── data_bags│ ├── README.md│ └── postgresql├── site-cookbooks│ ├── ipf_settings│ ├── postfix_envs│ ├── postgresql-for-some_app│ └── redis-for-some_app└── solo.rb
28
※git checkoutで調査
Wednesday, July 24, 13
この頃のシステム構成2
29
HostedChef
WorkStation(MacBook)
開発サーバ(Joyent)
ChefClient
Wednesday, July 24, 13
この頃のリポジトリ2 1/3├── Cheffile├── Cheffile.lock├── Gemfile├── Gemfile.lock├── README.md├── certs├── cookbooks│ ├── chefclient_simple_cron│ ├── ipf│ ├── ipf_configure│ ├── logadm│ ├── monit_bin│ ├── partial_search│ ├── postfix│ ├── rbac│ ├── smartmachine_functions│ └── smf
30
※git checkoutで調査
Wednesday, July 24, 13
この頃のリポジトリ2 2/3├── data_bags│ ├── README.md│ ├── certs│ ├── deploy│ ├── domains│ ├── postfix_env│ └── postgresql├── roles│ ├── app_server_common.json│ ├── base_smartos.json│ ├── chef-client_cron.json│ ├── some_app.json│ ├── monit_smartos.json│ ├── patchjob_update_certs.json│ ├── postfix_server.json│ ├── postgres-client.json│ ├── postgres-server.json
31
※git checkoutで調査
Wednesday, July 24, 13
この頃のリポジトリ2 3/3│ ├── redis-client.json│ └── redis-server.json├── site-cookbooks│ ├── ipf_settings│ ├── some_app_deploy│ ├── nginx_upstream│ ├── postfix_envs│ ├── postgresql-for-some_app│ └── redis-for-some_app└── solo.rb
32
※git checkoutで調査
Wednesday, July 24, 13
そろそろOSS Chefサーバに移行
Wednesday, July 24, 13
knife server backupknife role(他) create
from_file
Wednesday, July 24, 13
リポジトリにserverbackups/追加
env,roles,data_bags,nodes
Wednesday, July 24, 13
この頃のシステム構成3
36
OSSChef
WorkStation(MacBook)
開発サーバ(Joyent)
ChefClient
Wednesday, July 24, 13
このころのCheffile抜粋 2cookbook 'partial_search'cookbook 'smartmachine_functions'cookbook 'monit_bin'
# Github## modcloth-cookbookscookbook 'ipf', :git => 'https://github.com/modcloth-cookbooks/ipf.git'cookbook 'logadm', :git => 'https://github.com/modcloth-cookbooks/logadm.git'
## higanworks-cookbookscookbook 'ipf_configure'cookbook 'chefclient_simple_cron', :git => 'https://github.com/higanworks-cookbooks/chefclient_simple_cron.git'
## modified community cookbooks.cookbook 'postfix', :git => 'https://github.com/ZCloud-Firstserver/postfix.git', :ref => 'respond_to_smartos'
37
コミュニティCookbooks※自作もの多い
他所様の汎用的なCookbook※ そこそこプルリクしてる
自作Cookbook※ site-cookbookからpublicに昇格
改造したコミュニティCookbooks※結局後でプルリク
Wednesday, July 24, 13
これで大体完了、あとは適当に展開
Wednesday, July 24, 13
この頃のシステム構成4
39
OSSChef
WorkStation(MacBook)
開発サーバ(Joyent)Stagingサーバ群
(Joyent)
Stagingサーバ群(Joyent)
Wednesday, July 24, 13
更新アリ
Wednesday, July 24, 13
1. env[production]でhogebookの現行バージョンを pinする ※指定無しならlatest
41
Staging
CookBook更新と適用手法の例
hogebook v1.0
Production
hogebook v1.0
v1.0にpin
Wednesday, July 24, 13
1. env[production]でhogebookの現行バージョンを pinする ※指定無しならlatest
2. 新しいバージョンをChefServerにアップ
42
Staging
CookBook更新と適用手法の例
hogebook v1.1
Production
hogebook v1.0
次回コンバージョンでv1.1が適用される
こちらpinされたバージョンのまま
Wednesday, July 24, 13
1. env[production]でhogebookの現行バージョンを pinする ※指定無しならlatest
2. 新しいバージョンをChefServerにアップ3. OKならpinをはずす
43
Staging
CookBook更新と適用手法の例
hogebook v1.1
Production
hogebook v1.1
新バージョンが適用される
Wednesday, July 24, 13
• システム構築にあたって、アプリに必要なれいやをゆっくり考えつつコード(再現可能)に落としこむ
• 決めた役割を与えるため、適当に調達したサーバインスタンス上で収束用クライアント(Chefなど)を走らせる
• 一発構築はあまり必要ない• ノードを支配下においてねっとりと操ったり簡単に棄てる
44Wednesday, July 24, 13
コードとしてのインフラってだいたいこんな感じだと
思いました。
Wednesday, July 24, 13