Chef Serverを使って実際にベアメタルマシンへの自動構築を行う

2014年1月22日(水)
喜納 健

Chef Serverの特徴

Chef Serverには、次の特徴があります。

  1. システム構成・状態管理の一元化
  2. セキュアなノード管理
  3. グラフィカルなインターフェース

こちらも順にご紹介しましょう。

1. システム構成・状態管理の一元化

Chef Serverは、レシピとノードの関連付け設定を一元管理することができます。第2回でご紹介した各ノードのランリストや個別設定を行うJSONファイルはChef Serverで管理されます。Chef Serverを使用して、ランリスト設定の他、ノードの一覧表示や各ノードの設定確認を行うことができます。

次の例は、Knifeを使用して既に設定してある“chefclient01”ノードの設定値を表示したものです。設定済みのレシピは“Run List:”の行で確認します。

$ knife node show chefclient01
Node Name:    chefclient01
Environment: _default
FQDN:         chefclient01
IP:           192.168.5.72
Run List:     recipe[resolver], recipe[ntp], recipe[yum], recipe[apache]
Roles:
Recipes:
Platform:     centos 6.4
Tags:
$

また、Chef Serverを使用して各ノードのOSやネットワーク等、ノードの状態に関するデータを収集して確認することもできます。収集されるデータには、カーネルやCPUに関する詳細なデータの他、ネットワークやメモリの使用率も含まれます。以下の例は、Knifeを使用してノード関連データの詳細を一覧表示したものです。

$ knife node show chefclient01 –l
・・・省略・・・ 
os:               linux
os_version:       2.6.32-358.el6.x86_64
platform:         centos
platform_family:  rhel
platform_version: 6.4
・・・省略・・・ 
$

2. セキュアなノード管理

Chef Serverはシステム構成や状態を管理しているため、悪意を持った者に操作されると危険です。そのため、Chef Serverは、Workstationやノードと通信を行う際に認証を行い、認証登録されたユーザーやノードからのみリクエストを受け付けます。

認証登録は、chef-validatorと呼ばれているクライアントの認証キーを仮使用することで容易に行えます。認証登録を行っていない状態でも、chef-clientをはじめて実行する時にchef-validatorの鍵を配布しておくと、chef-clientはその鍵を使用して自動で認証登録を行います。なお、chef-validatorの鍵は、認証登録が済んだら削除することが奨励されています。chef-validatorについては、下記のページが参考になります。

> About the chef-client

3. グラフィカルなインターフェース

Chef Serverのインターフェースは、CUIのKnifeの他にWebUIも提供されています。WebUIを使用すると、視覚的な操作が可能になります。例えば、第2回でご紹介した、ランリストなどのノード設定も視覚的に設定・確認することができます。次の図は、chefclient01ノードのランリスト設定をドラッグ&ドロップで設定しているものです。

図5:Web UIによるランリストの設定(クリックで拡大)

ベアメタルマシンに対する構築

Chef Serverを使用してシステム構築・運用を行うためには、各ノードにchef-clientがインストール・設定されている必要があります。しかし、構築対象マシンの台数が多い場合、chef-clientの利用環境を人手で構築するのは大変です。そこで、この構築作業の自動化が重要になってきます。

図6:Chef Serverを使用した自動構築の流れ(クリックで拡大)

特に構築対象がベアメタルマシンであれば、OSのインストールやネットワークの設定も行う必要があります。

これらの作業を手動で行うと、OSのインストールをインストーラのGUIで対話的に行い、その後コマンド操作でアプリケーションのインストールや設定を行うことになります(図7の上部)。そこで、サイレントインストールやシェルスクリプトを使用して自動化します。

以下では、Red Hat系OSを対象としたネットワークブートとKickstartを組み合わせた方法をご紹介します(図7の下部)。

図7:chef-clientインストールの自動化(クリックで拡大)

まず、ネットワークブートとKickstartによるOSインストールに必要な全てのサービスやファイル等を格納したインストール用のサーバを用意します(下図のインストール用サーバ)。

図8:インストール用のサーバ(クリックで拡大)

次に、ネットワークブートやKickstartの設定を行い、OSやchef-clientを自動的にインストールするようにします。ネットワークブートとKickstartによるOSインストールの大まかな動きは下図の通りです。

OSインストールの細かな設定については、Chefからはなれてしまうため割愛し、参考資料をご紹介しておきます。

Red Hat Enterprise Linux 6 インストールガイド

図9:自動構築の流れ(クリックで拡大)

ここでは、OSインストール後のKickstartオプションであるShellスクリプトについて説明します。

(1)chef-clientのインストール

インストールサーバにchef-clientのRPMパッケージを格納したリポジトリを用意しておき、Yumコマンドを使用してchef-clientのインストールを行います。

(2)chef-clientの設定(認証登録、設定ファイルの配布)

インストールサーバのWebディレクトリにchef-clientの設定ファイル(client.rb)とchef-validatorの鍵(validation.pem)を格納しておき、Wgetコマンドを使用して所定の場所(上の例では、/etc/chef)に格納します。
chef-clientの設定ファイルでノード名を設定できるため、上の例ではechoコマンドを使用してホスト名を設定しています。(デフォルトはFQDN)

(3)chef-clientの実行

chef-clientコマンドを実行します。chef-clientが設定ファイルに記載されているChef ServerのURLにリクエストを行い、レシピを取得して構築を行います。

(4)chef-validator鍵の削除

認証登録用に取得したchef-validatorの鍵を削除します。

このようにして、ベアメタルマシンに対するchef-clientの利用環境を含めた自動構築ができるようになります。

Chef Server のインストールも簡単!

第2回でchef-solo/chef-clientのオムニバスインストーラをご紹介しましたが、Chef Serverも同様のインストーラが提供されています。例えばRed Hat系Linuxの場合、コマンド3行でインストールできます。簡単ですので、是非試してみて下さい。

# rpm -vih chef-server-11.0.8-1.el6.x86_64.rpm
# chef-server-ctl reconfigure
# chef-server-ctl test

Chef Serverのインストール要件は、以下のページが参考になります。
> System Requirements

株式会社 日立ソリューションズ

(株)日立ソリューションズ、オープンソース技術開発センタにてクラウド関連技術の調査に従事。Hadoop関連のプロジェクトで大規模クラスタの構築を担当したことを機に、システム構築・運用自動化について調査を行っている。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています