Chef, Consul を使ったクラウドオーケストレーション
-
Upload
yoshimi-tominaga -
Category
Engineering
-
view
2.308 -
download
0
Transcript of Chef, Consul を使ったクラウドオーケストレーション
![Page 1: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/1.jpg)
Chef, Consulを使った
クラウドオーケストレーション
Tech-Cricle#8 Chef Meetup
@tominaga443
By: The City of Vancouver CC BY 2.0
![Page 2: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/2.jpg)
本日のアジェンダ
1. イントロダクション
2. ライフサイクルイベントを意識してChefを使おう
3. Consulを使ってサーバ間連携しよう
![Page 3: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/3.jpg)
1. イントロダクション
By: Joshua Schnable CC BY 2.0
![Page 4: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/4.jpg)
自己紹介
冨永 善視(Yoshimi Tominaga)
@tominaga443
2013.4 ~ TIS株式会社 戦略技術センター
- OSS Middleware Stack “ISHIGAKI Template”
- OSS Cloud Orchestrator “CloudConductor”
- その他OSS関連の技術検証
![Page 5: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/5.jpg)
Chefとわたし
入社して最初に買った技術書
まだ日本語の情報が少なく、
情報がまとまっていなかった当時、
新人のわたしを導いてくれた一冊。
![Page 6: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/6.jpg)
ISHIGAKI Template
○ 4, 5時間の構築作業が20分~1時間に
○ インフラにもCIを導入
△ Chef Serverのメンテナンスが割に合わない
俺はこれでChef Serverきらいになったなあもりにも大変すぎるでしょう?
• 推奨OSSスタックをテンプレート化
• アプリケーション基盤をChefで自動構築
• Enterprise向けに検証、チューニング
![Page 7: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/7.jpg)
CloudConductor
• Infrastructure Pattern as Code
• Autonomous Operation
• Pluggable Non-Functional Requirements
インフラの”パターン”を組み合わせて
クラウドにシステムを自動構築
![Page 8: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/8.jpg)
1枚でわかるCloudConductor (要解説)
![Page 9: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/9.jpg)
By: seyed mostafa zamani CC BY 2.0
2. ライフサイクルイベントを意識してChefを使おう
![Page 10: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/10.jpg)
モデルケース
LB
Web / AP
DB
![Page 11: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/11.jpg)
インフラ構築~運用で起きるイベント
Middleware Install
Configuration Application
Deploy
Scale Out
Scale Up
Application
New Release
Data Backup
Restore
![Page 12: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/12.jpg)
インフラ構築~運用で起きるイベント
Middleware Install
Configuration Application
Deploy
Scale Out
Scale Up
Application
New Release
Data Backup
Restore
![Page 13: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/13.jpg)
ライフサイクルイベント
• Setup: インスタンスがブートした後に発生
• Configure: インスタンスがOnline/Offline状態に移行したとき発生
• Deploy: アプリケーションをデプロイするとき発生
• Undeploy: アプリケーションを削除するときに発生
• Shutdown インスタンスを停止するときに発生
AWS Opsworks のライフサイクルイベント
![Page 14: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/14.jpg)
CloudConductorのライフサイクルイベント
Setup
Configure
Deploy
Backup Restore
![Page 15: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/15.jpg)
CloudConductorのライフサイクルイベント
Setup
Configure
Deploy
Backup Restore
ベースイメージ作成時
インスタンス起動時 構成変化時 アプリケーション投入時
バックアップ取得時
DR, システム切替時
![Page 16: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/16.jpg)
CloudConductorのライフサイクルイベント
Setup
Configure
Deploy
Backup Restore
Spec
Spec
システム構築完了時
アプリケーション デプロイ完了時
![Page 17: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/17.jpg)
ライフサイクルイベントの通知
イベントを通知
Cookbook取得 対応するRun List実行
![Page 18: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/18.jpg)
イベントごとにレシピを分割
tomcat_cluster_pattern
├ site-cookbooks
│ ├ apache_part
│ │ └ recipes
│ │ ├ default.rb
│ │ ├ setup.rb
│ │ ├ configure.rb
│ │ └ deploy.rb
│ ├ tomcat_part
│ ├ pgpool-II_part
│ ├ postgresql_part
│ ├ haproxy_part
│ └ cloudconductor
イベント発生時、
自分のRoleに応じたCookbookから
イベントに対応するレシピを実行
![Page 19: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/19.jpg)
Setup
tomcat_cluster_pattern/site-cookbooks/apache_part/recipes/setup.rb
各種ミドルウェアのインストール、環境に依存しない設定を実施
設定後スナップショットを取得し、ベースイメージとして利用
![Page 20: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/20.jpg)
Configure
tomcat_cluster_pattern/site-cookbooks/apache_part/recipes/configure.rb
IPなど、構築するまで確定しない値を必要とする設定を実施
ユーザからパラメータを渡す必要がある設定もここで実施
![Page 21: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/21.jpg)
Deploy
tomcat_cluster_pattern/site-cookbooks/apache_part/recipes/deploy.rb
アプリケーションファイルの配置、データ投入などを実施
アプリケーションに関するパラメータを必要とする設定もここで実施
![Page 22: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/22.jpg)
ライフサイクルイベントを意識してChefを使おう
システムの構成変化をイベントとしてとらえる
イベントを意識してChefレシピを分割することで、
運用フェーズでクラウドの機能やツールをうまく活用できる
![Page 23: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/23.jpg)
3. Consulを使ってサーバ間連携しよう
By: Judy Schmidti CC BY 2.0
![Page 24: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/24.jpg)
Chefだけでは難しいところ
• システム構成の管理
• 膨大で不定なノード数
• 起動するたびに変わるIPアドレス
• サーバー間連携
• 起動しないと分からないパラメータの連携
• サーバを跨いだレシピ実行の順序制御、待ち合わせ
![Page 25: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/25.jpg)
Chefだけでは難しいところ
• システム構成の管理
• 膨大で不定なノード数
• 起動するたびに変わるIPアドレス
• サーバー間連携
• 起動しないと分からないパラメータの連携
• サーバを跨いだレシピ実行順の制御
集中管理ではなく自律分散
![Page 26: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/26.jpg)
![Page 27: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/27.jpg)
Consul
https://www.consul.io/
![Page 28: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/28.jpg)
Key / Value Storage
各ノードがKVSを持ち、クラスタ全体で同期
ノード障害が発生しても、全体でデータ保持可能
![Page 29: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/29.jpg)
Consul Watch
イベントや通知を受け取ると
特定のコマンド、スクリプトを実行
Health Check 障害通知
障害通知
![Page 30: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/30.jpg)
Consul Event
任意のEventをクラスタ内に伝播
特定のノードにのみ伝播させることも可能
Event Event
Event
![Page 31: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/31.jpg)
Consulを使ってサーバ間連携しよう
• システム構成の管理
• IPアドレスなど自身の情報をKVSに登録
• クラスタの情報はConsulの分散KVSに集約
• サーバー間連携
• 必要な情報はKVSでやりとり
• Event通知で処理実行のタイミングを合わせる
![Page 32: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/32.jpg)
Consul Event / Consul Watchの課題
Event が届く順番は保障されない
先のEvent の処理中に次のEvent の処理も実行される
Event
Event
Event
Event
どっちが先?
![Page 33: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/33.jpg)
Consul Event / Consul Watchの課題
Event が届く順番は保障されない
先のEvent の処理中に次のEvent の処理も実行される
Event
Event
Event
Event
どっちが先?
イベント発生時の処理を うまく順序制御したい
![Page 34: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/34.jpg)
Consul Event / Consul Watchの課題
Event が届く順番は保障されない
先のEvent の処理中に次のEvent の処理も実行される
Event
Event
Event
Event
どっちが先?
ないなら作ろう!
![Page 35: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/35.jpg)
※開発中のため、ロゴは
変更になる場合があります
https://github.com/cloudconductor/metronome
![Page 36: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/36.jpg)
Metronome
Consul と連動
Event 発生時の処理をクラスタ全体で順序制御
• Event Queuing
• Task Sequence Control
• Results Sharing
![Page 37: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/37.jpg)
処理の実行順をYAML形式で記述
task.yml
events: setup: description: Execute setup task: setup configure: description: Execute configure chef priority: 50 ordered_tasks: - service: postgresql task: configure - service: tomcat task: configure - service: httpd task: configure
service, tag で対象絞込み
前のタスク結果を待ってから
次のタスクを実行
Event 発生時に実行する
タスクを指定
![Page 38: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/38.jpg)
処理の実行順をYAML形式で記述
task.yml
tasks: setup: description: Execute setup chef operations: - execute: file: prepare.sh - chef: run_list: - role[{{role}}_setup] configure: description: Execute configure chef operations: - chef: run_list: - role[{{role}}_configure]
実行する処理を記述
operations
- execute: シェルを実行
- chef: Chefを実行
- service: サービス起動/停止
- echo: 文字列を出力
- consul-event: イベント発行
- consul-kvs: KVS操作
![Page 39: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/39.jpg)
イベントをキューに追加
EventQueue:
Consul KVS Consul Cluster
Event
metronome push
![Page 40: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/40.jpg)
タスクをキューに展開
EventQueue:
ProgressTaskQueue:
Consul KVS
metronome.Event
Consul Cluster
Event
metronome push
![Page 41: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/41.jpg)
各ノードでタスクを実行
EventQueue:
ProgressTaskQueue:
Consul KVS
metronome.Event
metronome.EventTask - service - tag - task
Consul Cluster
Event
metronome push
![Page 42: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/42.jpg)
タスクの実行結果を格納
EventQueue:
ProgressTaskQueue:
Consul KVS Consul Cluster
Result NodTaskResult:
![Page 43: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/43.jpg)
タスクのキューを進める
EventQueue:
ProgressTaskQueue:
Consul KVS Consul Cluster
Result NodTaskResult:
TaskResult:
![Page 44: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/44.jpg)
全タスクが終了したら結果を格納
EventQueue:
ProgressTaskQueue:
Consul KVS Consul Cluster
Result NodTaskResult:
TaskResult:
EventResult:
![Page 45: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/45.jpg)
順序制御で複雑な待ち合わせも可能に
DBサーバ⇒APサーバ⇒Webサーバの順にサービス起動
マスターDBにデータを投入してからスレーブDBを起動
各サーバの公開鍵をKVSに登録して一括共有
![Page 46: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/46.jpg)
CloudConductorにおけるツールの使い分け
CloudFormation
OpenStack Heat Packer Chef
Consul
Metronome Serverspec
Provisioning ● ●
Configuration ● ●
Application
Deploy ● ●
Test ● ●
Lifecycle Event ● ●
![Page 47: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/47.jpg)
まとめ
システム構成が変化するクラウド環境では
すべてを集中管理することは難しい
![Page 48: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/48.jpg)
まとめ
Chef による自動化
Consul による自律分散
![Page 49: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/49.jpg)
まとめ
上手く活用して
システム運用を自働化しよう!
![Page 50: Chef, Consul を使ったクラウドオーケストレーション](https://reader034.fdocument.pub/reader034/viewer/2022042520/58f2a5491a28ab741d8b458b/html5/thumbnails/50.jpg)
Thank you for listening.