chef, consul を使ったクラウドオーケストレーション

50
Chef, Consulを使った クラウドオーケストレーション Tech-Cricle#8 Chef Meetup @tominaga443 By: The City of Vancouver CC BY 2.0

Upload: yoshimi-tominaga

Post on 16-Apr-2017

2.313 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Chef, Consul を使ったクラウドオーケストレーション

Chef, Consulを使った

クラウドオーケストレーション

Tech-Cricle#8 Chef Meetup

@tominaga443

By: The City of Vancouver CC BY 2.0

Page 2: Chef, Consul を使ったクラウドオーケストレーション

本日のアジェンダ

1. イントロダクション

2. ライフサイクルイベントを意識してChefを使おう

3. Consulを使ってサーバ間連携しよう

Page 4: Chef, Consul を使ったクラウドオーケストレーション

自己紹介

冨永 善視(Yoshimi Tominaga)

@tominaga443

2013.4 ~ TIS株式会社 戦略技術センター

- OSS Middleware Stack “ISHIGAKI Template”

- OSS Cloud Orchestrator “CloudConductor”

- その他OSS関連の技術検証

Page 5: Chef, Consul を使ったクラウドオーケストレーション

Chefとわたし

入社して最初に買った技術書

まだ日本語の情報が少なく、

情報がまとまっていなかった当時、

新人のわたしを導いてくれた一冊。

Page 6: Chef, Consul を使ったクラウドオーケストレーション

ISHIGAKI Template

○ 4, 5時間の構築作業が20分~1時間に

○ インフラにもCIを導入

△ Chef Serverのメンテナンスが割に合わない

俺はこれでChef Serverきらいになったなあもりにも大変すぎるでしょう?

• 推奨OSSスタックをテンプレート化

• アプリケーション基盤をChefで自動構築

• Enterprise向けに検証、チューニング

Page 7: Chef, Consul を使ったクラウドオーケストレーション

CloudConductor

• Infrastructure Pattern as Code

• Autonomous Operation

• Pluggable Non-Functional Requirements

インフラの”パターン”を組み合わせて

クラウドにシステムを自動構築

Page 8: Chef, Consul を使ったクラウドオーケストレーション

1枚でわかるCloudConductor (要解説)

Page 10: Chef, Consul を使ったクラウドオーケストレーション

モデルケース

LB

Web / AP

DB

Page 11: Chef, Consul を使ったクラウドオーケストレーション

インフラ構築~運用で起きるイベント

Middleware Install

Configuration Application

Deploy

Scale Out

Scale Up

Application

New Release

Data Backup

Restore

Page 12: Chef, Consul を使ったクラウドオーケストレーション

インフラ構築~運用で起きるイベント

Middleware Install

Configuration Application

Deploy

Scale Out

Scale Up

Application

New Release

Data Backup

Restore

Page 13: Chef, Consul を使ったクラウドオーケストレーション

ライフサイクルイベント

• Setup: インスタンスがブートした後に発生

• Configure: インスタンスがOnline/Offline状態に移行したとき発生

• Deploy: アプリケーションをデプロイするとき発生

• Undeploy: アプリケーションを削除するときに発生

• Shutdown インスタンスを停止するときに発生

AWS Opsworks のライフサイクルイベント

Page 14: Chef, Consul を使ったクラウドオーケストレーション

CloudConductorのライフサイクルイベント

Setup

Configure

Deploy

Backup Restore

Page 15: Chef, Consul を使ったクラウドオーケストレーション

CloudConductorのライフサイクルイベント

Setup

Configure

Deploy

Backup Restore

ベースイメージ作成時

インスタンス起動時 構成変化時 アプリケーション投入時

バックアップ取得時

DR, システム切替時

Page 16: Chef, Consul を使ったクラウドオーケストレーション

CloudConductorのライフサイクルイベント

Setup

Configure

Deploy

Backup Restore

Spec

Spec

システム構築完了時

アプリケーション デプロイ完了時

Page 17: Chef, Consul を使ったクラウドオーケストレーション

ライフサイクルイベントの通知

イベントを通知

Cookbook取得 対応するRun List実行

Page 18: Chef, Consul を使ったクラウドオーケストレーション

イベントごとにレシピを分割

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 を使ったクラウドオーケストレーション

Setup

tomcat_cluster_pattern/site-cookbooks/apache_part/recipes/setup.rb

各種ミドルウェアのインストール、環境に依存しない設定を実施

設定後スナップショットを取得し、ベースイメージとして利用

Page 20: Chef, Consul を使ったクラウドオーケストレーション

Configure

tomcat_cluster_pattern/site-cookbooks/apache_part/recipes/configure.rb

IPなど、構築するまで確定しない値を必要とする設定を実施

ユーザからパラメータを渡す必要がある設定もここで実施

Page 21: Chef, Consul を使ったクラウドオーケストレーション

Deploy

tomcat_cluster_pattern/site-cookbooks/apache_part/recipes/deploy.rb

アプリケーションファイルの配置、データ投入などを実施

アプリケーションに関するパラメータを必要とする設定もここで実施

Page 22: Chef, Consul を使ったクラウドオーケストレーション

ライフサイクルイベントを意識してChefを使おう

システムの構成変化をイベントとしてとらえる

イベントを意識してChefレシピを分割することで、

運用フェーズでクラウドの機能やツールをうまく活用できる

Page 24: Chef, Consul を使ったクラウドオーケストレーション

Chefだけでは難しいところ

• システム構成の管理

• 膨大で不定なノード数

• 起動するたびに変わるIPアドレス

• サーバー間連携

• 起動しないと分からないパラメータの連携

• サーバを跨いだレシピ実行の順序制御、待ち合わせ

Page 25: Chef, Consul を使ったクラウドオーケストレーション

Chefだけでは難しいところ

• システム構成の管理

• 膨大で不定なノード数

• 起動するたびに変わるIPアドレス

• サーバー間連携

• 起動しないと分からないパラメータの連携

• サーバを跨いだレシピ実行順の制御

集中管理ではなく自律分散

Page 26: Chef, Consul を使ったクラウドオーケストレーション
Page 27: Chef, Consul を使ったクラウドオーケストレーション

Consul

https://www.consul.io/

Page 28: Chef, Consul を使ったクラウドオーケストレーション

Key / Value Storage

各ノードがKVSを持ち、クラスタ全体で同期

ノード障害が発生しても、全体でデータ保持可能

Page 29: Chef, Consul を使ったクラウドオーケストレーション

Consul Watch

イベントや通知を受け取ると

特定のコマンド、スクリプトを実行

Health Check 障害通知

障害通知

Page 30: Chef, Consul を使ったクラウドオーケストレーション

Consul Event

任意のEventをクラスタ内に伝播

特定のノードにのみ伝播させることも可能

Event Event

Event

Page 31: Chef, Consul を使ったクラウドオーケストレーション

Consulを使ってサーバ間連携しよう

• システム構成の管理

• IPアドレスなど自身の情報をKVSに登録

• クラスタの情報はConsulの分散KVSに集約

• サーバー間連携

• 必要な情報はKVSでやりとり

• Event通知で処理実行のタイミングを合わせる

Page 32: Chef, Consul を使ったクラウドオーケストレーション

Consul Event / Consul Watchの課題

Event が届く順番は保障されない

先のEvent の処理中に次のEvent の処理も実行される

Event

Event

Event

Event

どっちが先?

Page 33: Chef, Consul を使ったクラウドオーケストレーション

Consul Event / Consul Watchの課題

Event が届く順番は保障されない

先のEvent の処理中に次のEvent の処理も実行される

Event

Event

Event

Event

どっちが先?

イベント発生時の処理を うまく順序制御したい

Page 34: Chef, Consul を使ったクラウドオーケストレーション

Consul Event / Consul Watchの課題

Event が届く順番は保障されない

先のEvent の処理中に次のEvent の処理も実行される

Event

Event

Event

Event

どっちが先?

ないなら作ろう!

Page 35: Chef, Consul を使ったクラウドオーケストレーション

※開発中のため、ロゴは

変更になる場合があります

https://github.com/cloudconductor/metronome

Page 36: Chef, Consul を使ったクラウドオーケストレーション

Metronome

Consul と連動

Event 発生時の処理をクラスタ全体で順序制御

• Event Queuing

• Task Sequence Control

• Results Sharing

Page 37: Chef, Consul を使ったクラウドオーケストレーション

処理の実行順を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 を使ったクラウドオーケストレーション

処理の実行順を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 を使ったクラウドオーケストレーション

イベントをキューに追加

EventQueue:

Consul KVS Consul Cluster

Event

metronome push

Page 40: Chef, Consul を使ったクラウドオーケストレーション

タスクをキューに展開

EventQueue:

ProgressTaskQueue:

Consul KVS

metronome.Event

Consul Cluster

Event

metronome push

Page 41: Chef, Consul を使ったクラウドオーケストレーション

各ノードでタスクを実行

EventQueue:

ProgressTaskQueue:

Consul KVS

metronome.Event

metronome.EventTask - service - tag - task

Consul Cluster

Event

metronome push

Page 42: Chef, Consul を使ったクラウドオーケストレーション

タスクの実行結果を格納

EventQueue:

ProgressTaskQueue:

Consul KVS Consul Cluster

Result NodTaskResult:

Page 43: Chef, Consul を使ったクラウドオーケストレーション

タスクのキューを進める

EventQueue:

ProgressTaskQueue:

Consul KVS Consul Cluster

Result NodTaskResult:

TaskResult:

Page 44: Chef, Consul を使ったクラウドオーケストレーション

全タスクが終了したら結果を格納

EventQueue:

ProgressTaskQueue:

Consul KVS Consul Cluster

Result NodTaskResult:

TaskResult:

EventResult:

Page 45: Chef, Consul を使ったクラウドオーケストレーション

順序制御で複雑な待ち合わせも可能に

DBサーバ⇒APサーバ⇒Webサーバの順にサービス起動

マスターDBにデータを投入してからスレーブDBを起動

各サーバの公開鍵をKVSに登録して一括共有

Page 46: Chef, Consul を使ったクラウドオーケストレーション

CloudConductorにおけるツールの使い分け

CloudFormation

OpenStack Heat Packer Chef

Consul

Metronome Serverspec

Provisioning ● ●

Configuration ● ●

Application

Deploy ● ●

Test ● ●

Lifecycle Event ● ●

Page 47: Chef, Consul を使ったクラウドオーケストレーション

まとめ

システム構成が変化するクラウド環境では

すべてを集中管理することは難しい

Page 48: Chef, Consul を使ったクラウドオーケストレーション

まとめ

Chef による自動化

Consul による自律分散

Page 49: Chef, Consul を使ったクラウドオーケストレーション

まとめ

上手く活用して

システム運用を自働化しよう!

Page 50: Chef, Consul を使ったクラウドオーケストレーション

Thank you for listening.