株式会社 日立ソリューションズ オープンソース技術開発センタ 2013/9/14
知らなきゃ損!
今話題の自動構築フレームワーク Chef !
1. システム構築における課題 2. Chefの概要
3. Chef-Clientのデプロイ方法
知らなきゃ損!今話題の自動構築フレームワークChef!
Contents
1 . 章 システム構築における課題
知らなきゃ損!
今話題の自動構築フレームワークChef!
1-1 システム構築における課題
大規模環境構築における課題近年、OpenStackやHadoopなど大規模クラウド基盤が注目を集めている。
大規模環境の構築作業を行うには、次の様な作業が発生する事がある。
単調な繰り返し作業
待ち時間が発生する作業このような作業は、以下の事象を引き起こす。
モチベーションの低下
設定ミスの発生
障害発生時の切り分けが困難
自動化を検討しましょう!
設定ミスが あるのは、
どのマシン だ?
2 . 章 Chefの概要
知らなきゃ損!
今話題の自動構築フレームワークChef!
2-1 Chef の概要
Chefとはシステム自動構築のために開発されたOSSのフレームワーク。
主な開発は、米国のOpscode社
多数の導入実績があり、Facebook も採用
システムをコードで管理する従来は、詳細設計書や構築手順書を使用して行っていた部分を、
コード化して管理する。Chefは、その仕組みを提供する。
OS設定A OS設定B ソフトA ソフトB
OS設定A OS設定C ソフトA ソフトC
サーバ1
サーバ2
OS設定A OS設定B OS設定C ソフトA ソフトB ソフトC
Chef
include_recipe "yum"
directory "/etc/ntp" do owner "root"
group "root"
mode "0755"
action :create end
yum_package “ntpd" do version “X.X.XX- 15.el6.centos"
action :install end
構成を集約
サーバ1
サーバ2
サーバ1
サーバ2
システムの状態を コードで定義
システムA
2-2 導入効果とユーザ
導入効果自動化によるコスト削減の他、コンプライアンス対応にも利用されている。
環境構築の自動化による構築コスト削減(新規構築に限らず、既存環境の移行に伴う再構築も含む)
設定変更の自動化による運用・管理コストの削減
オペレーションの可視化によるセキュリティ・コンプライアンス対応
ユーザ(企業)クラウドサービスを提供する企業が多数。
SNS・ソーシャルゲーム、SaaS を提供するサービス企業 (Facebook/サイバーエージェント/IGNなどの企業)
クラウド基盤を提供・運用するクラウドベンダ(Stratalux/Cycle Computing/DreamHostなどの企業)
自社でECサイトを運営する企業(BookRenter/MercadoLibre/LANなどの企業)
2-3 Chefのアーキテクチャ
Client/Server スタンドアロン(Chef Solo)
Chef サーバ
Chef Server
構築対象マシン サーバ2
Chef Client
構築対象マシン サーバ1
Chef Client
サーバ1 サーバ2
レシピA レシピB レシピC
サーバとレシピの紐付け
構築対象マシン サーバ2
Chef Solo
構築対象マシン サーバ1
Chef Solo
Client/Serverタイプは、レシピと構築対象マシンの 状態を一括管理できる
・Chef ServerでレシピとClient情報を管理
・Chef Clientを実行すると、自身に割り当てられた レシピを取得・適用
スタンドアロンタイプは、構築台数が少ない(数十台)
場合に有効
(台数が少なくても正確さが求められる構築に有効)
・構築対象マシンにレシピを配布
・Chef Soloは配布されたレシピを読み込み・適用
DB
Chefのアーキテクチャ
システムの状態は、レシピと呼ばれるファイルにコードで記述し管理する
構築対象マシンにレシピを配布し、Chefプログラムがレシピに基づいて構築
Client/Serverと、スタンドアロンの2通りの使い方がある2-4 Chef Serverのアーキテクチャ
Chef Serverの基本構成Chef Server、Chef Client および 操作端末で構成される。
Chef Client
操作端末
WebUI/CUI
Chef サーバ
Chef Server の操作 Chef Server 内部DB
(V.10までは CouchDB、V.11 から PostgreSQL )
レシピに基づいた 構築の自動実行 レシピ
システムのあるべき状態を定義
Chef Client、レシピの管理
構築対象 マシン
Chef DB
Chef
Server
2-5 基本的な動作(1) Web サーバ構築例
レシピの作成管理端末でレシピを作成する。
Chef Client Chef
DB
管理端末
Chef サーバ 構築対象
マシン
レシピ
作業マシンでレシピを作成する。
Chef
Server
2-6 基本的な動作(2) Web サーバ構築例
レシピのアップロードレシピを作成し、Chef Server にアップロードする。
Chef Client Chef
DB
管理端末
Chef サーバ 構築対象
マシン
レシピ
Chef サーバ へアップロードする。
Chef
Server
2-7 基本的な動作(3) Web サーバ構築例
レシピの割り当てChef Serverにアップロードしたレシピと 構築対象マシンの紐付けを行う。
Chef DB
Chef サーバ
レシピ
レシピを構築対象マシンに紐付ける。
Chef Server
Run list
Run list
Run list 利用可能
レシピ
ネットワーク
Webサーバ リポジトリ
利用可能 ロール
Chef Client 導入マシン
Web リポジトリ
ネット
2-8 基本的な動作(4) Web サーバ構築例
Chef Clientによるレシピの取得 Chef Client が レシピを取得する。Chef Client Chef
DB
Chef サーバ 構築対象
マシン
Chef Server
実行
Webサーバ リポジトリ設定 ネットワーク設定
Run list
構築対象マシンで“chef-client”コマンド を実行する。
2-9 基本的な動作(5) Web サーバ構築例
Chef Clientによるオペレーションの実行Chef Client が取得したレシピに基づいて、オペレーションを行う。
実行
Chef サーバ 構築対象
マシン
Run list
ネット ワーク
設定
Webサーバ リポジトリ設定
Chef DB
Chef Client は、取得したレシピに基づいて インストールやファイルの設定を行う。
2-10 基本的な動作(6) Web サーバ構築例
実行
Chef サーバ 構築対象
マシン
Run list
リポジ トリ 設定
Webサーバ
Chef DB
Chef Clientによるオペレーションの実行Chef Client が取得したレシピに基づいて、オペレーションを行う。
Chef Client は、取得したレシピに基づいて
2-11 基本的な動作(7) Web サーバを構築
必要に応じて外部から構築に必要なリソースを調達 必要な外部リソースは、別途リポジトリなどから取得する。外部 リポジトリ
実行
Chef サーバ 構築対象
マシン
Run list
Web サーバ
Chef
DB
Yum などのパッケージ管理ツールと連携し、
外部のリポジトリからリソースを取得することでもできる。
2-12 レシピの 記載例
システムの状態を Ruby の DSL※1 で順序立てて記載する。#
# Cookbook Name:: cm4-server
# Recipe:: default
#
# Copyright 2012, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
include_recipe "yum"
yum_package "httpd" do version "2.2.15-15.el6.centos"
action :install end
service "httpd" do
supports :status => true action [ :enable , :start ] end
remote_file "/etc/httpd/conf/httpd.conf" do source "httpd.conf"
owner "root"
group "root"
◆順序
Apache のパッケージがインストールされている状態を定義した 後に、Apache のサービスが起動している状態を定義する。
レシピ(XXX.rb)
◆状態で定義
Chefの場合、レシピに状態を定義する。Chefは、レシピとシス テムの状態を比較し、レシピと異なっている場合に設定を行う。
Shellの場合、ファイルの存在確認などを行う必要がある場合 もある。
ファイルの存在確認を行う場合の例--- if [ -e /etc/httpd/conf/httpd.conf ] then
3 . 章 Chef-Clientのデプロイ方法
知らなきゃ損!
今話題の自動構築フレームワークChef!
3-1 Chefを使用する際の流れ
レシピの準備
•
レシピの作成•
レシピアップロード•
構築対象マシンとレシピの紐付け設定chef-client
のデプロイ• chef-client
インストール• chef-client
の設定レシピの適用
• chef-client
の実行管理端末
Chef サーバ
レシピ
Chef Client 構築対象
マシン
実 行 構築対象
マシン
Run list
3-2 前提と準備
前提
Red Hat系OSのシステムを構築
ハードウェアは、IPMIに対応(IPMI:ハードウェア管理のインターフェース仕様)
準備
Chef Serverを内臓するインストール用のサーバを用意済 (以下、インストールサーバ)
ChefのClientとレシピの紐付けは実施済 インストールサーバ
構築対象マシン群
(ブレード)
・DHCP Server
・TFTP Server
・Web Server
・Chef Server
3-3 Chef Client インストールの自動化
ネットワークブートと Kickstartを使用インストール用のサーバを用意し、ネットワーク経由で構築。
構築対象 マシン インストール用
マシン
インストーラ
Kickstart
設定ファイル OS 設定
Chef Client インストール
Chef Clientの構築をShellスクリプトで実装 インストール媒体
の用意
OS
インストール(GUIで対話的に) コマンド操作
ネットワークブート
Kickstart
※1Chef Client
のインストール(
Kickstart
の後処理で実行)OSインストール
手動 自動
アプリケーションのデプロイ
3-4 自動構築の流れ
マシンの起動からアプリケーションサービスの起動まで自動構築構築用サーバ
DHCP server
TFTP server
HTTP server
Chef Server
Kickstart ファイル ディスクイメージ ブートローダ
構築対象マシン群
暫定IPアドレス の取得 TFTP server
の参照 Kickstart file
の取得 OSの インストール
chef-client デプロイと実行
IPMIを使用して 電源を入れる
次シートでもう少し詳細を説明
3-5 Chef Clientのインストール・設定を自動化
Kickstartの後処理(オプション)を使用KickstartのOSインストール後に実行されるスクリプトでChef Clientのデプロイを行う。
ネットワーク設定
•
ホスト名• IPアドレス
Yumリポジトリ設定
・インストールサーバのリポジトリを登録
Chef Clientインストール
・Yumを使用したインストール
Chef Client設定
•
認証キーの取得• Client設定ファイルの取得
構築対象 マシン インストール
サーバ
3-6 Chef の特徴
Chef には、以下の特徴がある。
レシピ再利用による構築・管理工数の削減
作業の重複を削減する
検索機能Web上に公開されているレシピを検索・利用できる。
システム状態を管理するフレームワークの整備
システムを状態で定義・管理する仕組み
人為的ミスのリスク排除人為的ミスのリスクを排除することで、手戻りのリスクを軽減できる。
類似構成のマシンが多い大規模システムの構築に有効
類似した構成のマシンが多い場合、レシピ作成の費用対効果が高くなる。
レシピを共有
同じレシピを複数台に使える!
株式会社 日立ソリューションズ オープンソース技術開発センタ
知らなきゃ損!
今話題の自動構築フレームワークChef!
2013/9/14
END
本資料に掲載されている会社名、製品名、サービス名は各社の登録商標、又は商標です。
・Hadoopは、Apacheソフトウェア財団の米国及びその他の国における登録商標です。
・OpenStackは、OpenStack,LLC の登録商標です。
・Facebookは、米国Facebook Inc.の登録商標です。
・その他記載の会社名、製品名は、それぞれの会社の商標もしくは登録商標です。
付録1 インストールは簡単
Omnibusインストーラ開発元のOpscode社が提供するインストーラを使用すれば構築は簡単。
コマンド数行でインストール
Red Hat系OSでは、“/opt/chef”以下に全て配置(環境への影響を限定)
Ruby(およびRubyGems)同梱既存のRuby/RubyGems環境と競合しない。
# rpm –ivh /tmp/chef-server-11.0.6-1.el6.x86_64.rpm
# chef-server-ctl reconfigure
# chef-server-ctl test
# /opt/chef/embedded/bin/ruby -v
ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]
# /opt/chef/embedded/bin/gem -v 1.8.24
#
付録2 開発が進められているプラットフォーム
現状は、Linux系OSが中心UbuntuやDebian、Red Hat系LinuxなどのLinux系OSが中心。
Windowsでも開発が進んでいる。
参照元:http://wiki.opscode.com/display/chef/System+Requirements(最終アクセス:2013/08/06)
付録3 構築対象マシンの情報を取得するOhai
Ohaiコンポーネント構築対象マシンに関するOSの種類、カーネルのバージョンといった プラットフォーム情報の他、ホスト名やIPアドレスなども取得できる。
プラットフォームの詳細(OSの種類やバージョンなど)
ネットワークの使用状況
メモリの使用状況
カーネルのデータ
ホスト名構築対象マシンのホスト名を設定する場合、以下の様にレシピを記載する。
Chefで構築する際に、各ノードでそれぞれのホスト名(FQDN)が設定される。
物理レイヤ Ohai
Chef Client/Solo 構築対象マシン ・
・
・