Chef 12対応版  Chef Server構築手順

この記事は、私の個人ブログ[「クラウド時代のシステム管理」の記事](http://www.takanyan.net/chef12-server-install/)を転記したものです。

会社のエンジニアブログでChef 10及び11でChef Serverを構築する手順を紹介してきました。しかし、Chef 12がリリースされた後なかなか触る機会が無くて手順の確認が出来ていませんでした。

ようやく検証する時間が取れたので、Chef 12での構築手順を紹介します。

<a href="http://www.takanyan.net/wp-content/uploads/2013/01/chef.png"><img class="aligncenter size-full wp-image-29" src="http://www.takanyan.net/wp-content/uploads/2013/01/chef.png" alt="chef" width="346" height="340" /></a>

&nbsp;

# Chefに登場する用語の整理〜Chef12版〜
Chef 12から様々な機能の追加や多少の用語の変更がありましたので、改めて用語の整理をします。原則<a href="https://docs.chef.io/chef_overview.html">Chef本家サイトのドキュメント</a>に即して訳しているつもりです。

まず、Chefには大きく4つの役割があります。

| 役割 | 説明 |
|:-----------|:------------|
| <strong>Chef Server</strong> | Clientの構成管理を行うサーバー。WebUIやClientのグルーピング、環境や組織単位の管理も行う。 |
| <strong>Chef Client</strong> | 管理対象となる端末。Chef Serverにあるべき状態の定義を取りに行き、構成変更を行う。 |
| <strong>Chef Workstation</strong> | Chef Serverへ構成の定義をアップロードしたり設定変更などを行う操作端末。 |
| <strong>Chef Analytics</strong> | Chef管理下でどんな変更が行われているのかリアルタイム解析してレポートする機能を持つ。オプション要素。 |

構成の定義、変更などはRubyで書かれたCookbookやその組み合わせをjsonで記述したRoleを使って管理します。Cookbookは以下の図のような要素から作られています。

# Chef Serverの構築手順

以前と比べて自動化が進んでおり、Chef Serverの構築はかなり楽になりました。ただ、1つのOS上で作る際はある程度リソースが必要なのは相変わらずです。最低でも2CPU、4GBメモリは用意しましょう。ここからは<a href="https://docs.chef.io/install_server.html">Chef本家サイトのChef Serverインストール手順</a>にあある「Standalone」インストールに従ってインストールを始めます。

### 0. 前提条件

<ul>
 	<li>CentOS 7.1以上をminimal installする</li>
 	<li>簡単にするためSELinuxとfirewalldを無効化、停止する</li>
 	<li>NTPで時刻同期させておく</li>
 	<li>内部DNSで名前解決出来るようにしておく</li>
</ul>
4つ目の内部DNSについては、もちろん皆様の自宅に必ずあるActive Directoryでもいいですし、DNSサーバーを構築してもいいです。パブリッククラウドを使う場合は始めから提供されている場合が多いです。

### 1. chef-server-coreパッケージのインストール

Chef Serverのcoreパッケージをインストールします。<a href="https://downloads.chef.io/chef-server/redhat/" target="_blank">Red Hat Enterprise Linux用Chef Serverダウンロードサイト</a>からCentOS7/RHEL7用のRPMをダウンロードし、rpmコマンドでインストールをします。以下すべての作業はroot権限で行います。

```Shell
# cd /tmp
# curl -LO https://packages.chef.io/stable/el/7/chef-server-core-12.6.0-1.el7.x86_64.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 459M 100 459M 0 0 5302k 0 0:01:28 0:01:28 --:--:-- 6238k
# rpm -Uvh /tmp/chef-server-core-12.6.0-1.el7.x86_64.rpm
警告: /tmp/chef-server-core-12.6.0-1.el7.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 83ef826a: NOKEY
準備しています... ################################# [100%]
更新中 / インストール中...
1:chef-server-core-12.6.0-1.el7 ################################# [100%]
```

<code>curl</code>コマンドで-Lオプションがついていることにに注意してください。URL Redirectに対応するために必要です。

### 2. Chef Serverの初期設定

Chef Serverの初期設定を行います。

```Shell
# chef-server-ctl reconfigure
Starting Chef Client, version 12.10.26
resolving cookbooks for run list: ["private-chef::default"]
Synchronizing Cookbooks:
（以下、大量の初期設定ログ）
Chef Client finished, 394/459 resources updated in 02 minutes 26 seconds
Chef Server Reconfigured!
```

ログの最後で"Chef Server Reconfigured!"と表示されれば正常に初期化が完了しています。次に、Chef SErverに管理者ユーザーと組織（Organization）を作成します。

```Shell
# chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' --filename FILE_NAME
# chef-server-ctl org-create short_name 'full_organization_name' --association_user USER_NAME --filename ORGANIZATION-validator.pem
```

上記のコマンド例で設定するパラメータの意味は以下の通りです。

| 引数 | 意味 |
|:-----------|:------------|
| USER_NAME | Chef Serverの管理者ユーザー名。|
| FIRST_NAME | 管理者ユーザーのFirst Name|
| LAST_NAME | 管理者ユーザーのLast Name |
| EMAIL | 管理者ユーザーのメールアドレス |
| 'PASSWORD'| 管理者ユーザーのパスワード |
| FILE_NAME | 管理者ユーザーのSSH秘密鍵の保存先ファイル名 |
| short_name | 組織の省略名。小文字のみ可能。 |
| full_organization_name | 組織の正式名称。スペースなども入れることが可能。 |
| ORGANIZATION-validator.pem | 組織のvalidator鍵の保存先ファイル名 |

ここまででChef Serverの初期設定が完了しました。

### 3. Chef Server追加パッケージのインストールと設定

Chef ServerはTiered構成（Front Endを複数台並べて負荷分散。バックエンドのDatabaseは1セット）をとれるよう、追加パッケージを独立してインストールできるようになっています。今回は1台のサーバー上にすべてのパッケージを導入します。

まず、「Chef Manage」を追加します。

```Shell
# chef-server-ctl install chef-manage
# chef-server-ctl reconfigure
（大量の設定ログ。）
Chef Client finished, 22/405 resources updated in 20 seconds
Chef Server Reconfigured!
# chef-manage-ctl reconfigure --accept-license
Chef Client finished, 62/79 resources updated in 34.353808962 seconds
chef-manage Reconfigured!
```

次に「Reporting」を追加します（必須ではありません）。

```Shell
# chef-server-ctl install opscode-reporting
（Chef Manageパッケージのダウンロード、インストールが自動で行われる）
# chef-server-ctl reconfigure
（大量の設定ログ。）
Chef Client finished, 21/405 resources updated in 21 seconds
Chef Server Reconfigured!
# chef-manage-ctl reconfigure --accept-license
Chef Client finished, 3/70 resources updated in 15.813660959 seconds
chef-manage Reconfigured!
```

### 4. 動作確認

以上でChef Serverのインストールができましたので、Chef ServerのWeb管理画面に接続してみます。<code>https://(Chef ServerのIP)/</code>にアクセスするとログイン画面が表示されます。

<a href="http://www.takanyan.net/wp-content/uploads/2016/05/chefserver-login.png"><img class="aligncenter size-full wp-image-76" src="http://www.takanyan.net/wp-content/uploads/2016/05/chefserver-login.png" alt="Chef Server Login" width="945" height="423" /></a>

先ほど指定した管理者ユーザー名とパスワードでログインすると、ダッシュボードが表示されます。右上に組織名のshort_nameも表示されていることがわかります。

<a href="http://www.takanyan.net/wp-content/uploads/2016/05/chefserver-dashboard.png"><img class="aligncenter size-full wp-image-77" src="http://www.takanyan.net/wp-content/uploads/2016/05/chefserver-dashboard.png" alt="Chef Server Dashboard" width="945" height="423" /></a>


### 5. インストールが正常に完了しないときの対処法

Chef Serverのインストール時に途中で処理が失敗する場合がありまs。主にサーバーのCPU、メモリ不足が原因ですが、そのようなことが発生した場合、中途半端に設定された状態になります。中途半端な状態から本当の初期状態に戻すためには、以下のコマンドを実行します。

```Shell
# chef-manage-ctl cleanse
# chef-server-ctl cleanse 
```

このコマンドでChef ServerやChef Manageをインストール直後の状態に戻すことができますので、再び「reconfigure」コマンドで初期化が可能になります。


これで、Chef 12ベースのChef Serverが出来ました。次回はChef Workstationを構築します。