Chef/初心者向けChef入門講座/インストール・初期設定


インストールにあたって

ChefにはChefサーバーという中央管理サーバーを使って自動で反映させる方法、chef-soloという機能を使って個別にガッツリ手動で反映させる方法、knife-soloという機能を使って(中央管理サーバーとはまた別の)管理サーバーから手動で反映させる方法、knife-zeroという機能を使って(中央管理サーバーとはまた別の)管理サーバーから手動で反映させる方法があります。
以前はめんどくささと使い勝手のバランスが取れている(と思う)knife-soloを使用していたのですが、こちらは廃止の上knife-zeroに移行されるらしいので、knife-zeroを使用する前提で説明をしていきます。

管理サーバーへのインストール

まずは管理サーバーでの作業です。
後々面倒なのでrootで鍵作っておきます。
セキュリティを考慮する場合はパスフレーズを設定することをおすすめしますが、実際にどうするかはお任せします。
# ssh-keygen -t rsa

最終的にはgemでインストールします。
このへんのコマンドを必要に応じて入れていきましょう。
# LANG=C yum groupinstall "Development Tools"
# yum install ruby ruby-devel rubygems rubygems-devel
# gem install chef
旧版のCentOSなどでrubyのバージョンが古い場合は、rubyとgemは手で入れて下さい。

管理サーバーではknife-zeroを使うので入れておきます。
# gem install knife-zero

chefでユーザー管理する場合はruby-shadowが必要なので一応入れておきます。
# gem install ruby-shadow

ここまで終わったら一旦被管理サーバーでSSH設定を行います。

被管理サーバーへのSSH設定

続けて被管理サーバーの作業です。
まずはSSH鍵でのログインのためauthorized_keysを作ります。
rootで実施して下さい。
# mkdir ~/.ssh
# chmod 700 .ssh
# scp -p 管理サーバーIP:~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
# chmod 600 .ssh/authorized_keys
管理サーバー側でアクセス制限などされている場合は、公開鍵の中身を表示してそのまま持ってくればいいだけです。
パーミッション設定は忘れずに。

sshdの設定でアクセス制限をします。
対象ファイルは /etc/sshd/sshd_config で、設定する内容は PermitRootLogin を without-password にしてrootでのパスワード認証を無効にすること。
PermitRootLogin without-password

それと、rootユーザーのアクセス元IPアドレスを管理サーバー(ここでは192.168.0.1とします)からのみにすることです。
AllowUsers root@192.168.0.1

もしroot以外でのログインを行う可能性がある場合は、そのユーザーも記述する必要があります。
AllowUsers root@192.168.0.1 user1@192.168.0.1 user2

編集が終わったら設定を反映させます。
(CentOS6の場合)
# /etc/init.d/sshd reload

(CentOS7の場合)
# systemctl reload sshd
この時点で管理サーバーから被管理サーバーへログインができるか確認しておきましょう。

被管理サーバーへの作業は何らかの形で自動化できるようにしておきたいところですが、実はこの作業をcapistranoで自動化する手順はこちらに掲載してあります。
自動化を検討する場合は確認してみて下さい。

サーバー、クライアント設定

あとは全て管理サーバーで行います。

実際はどこでもいいですが、とりあえず /root 配下にchef用のディレクトリとcookbook用のディレクトリを作成します。
# mkdir -p /root/chef/cookbooks

knifeの初期設定をします。
入力は全てデフォルト値で問題ありません。
# knife configure initial

擬似的なchef-serverに接続する際に使用するRSA鍵を作ります。
knife-zeroはchef-zeroという機能を利用しますが、chef-zeroはノード内に擬似的なchef-serverを立ち上げて接続させるような動作をしますので、その際に使う鍵です。
この鍵にはパスフレーズを設定する必要はありません。
設定しても大きな問題は出ませんが、knife zeroを実行するたびに都度パスフレーズを入力しなければならなくなるので面倒なだけです。
# ssh-keygen -t rsa -f ~/.chef/client.pem

設定ファイルにcookbookディレクトリのパスと、RSA鍵のパス、knifeコマンドを常にローカルモードで動かすための設定、それとknifeコマンドで編集が必要になった際のエディタを記載します。
client_keyの行は既にある物を編集して下さい。cookbook_pathとlocal_mode、knife[:editor]は行追加です。
対象のファイルは /root/.chef/knife.rb です。
client_key               '/root/.chef/*****.pem'
↓
client_key               '/root/.chef/client.pem'
cookbook_path            [ "/root/chef/cookbooks" ]
local_mode true
knife[:editor]="vi"
以上でknifeの設定は完了です。

次に被管理サーバーに対してknife-zeroを実行するための処理を行います。
管理サーバー上でchefのディレクトリに移動し、コマンドを実行します。
# cd ~/chef
# knife zero bootstrap [被管理サーバーのノード名]
ノード名が名前解決できない場合はIPアドレスを入力して下さい。
SSH鍵のパスフレーズをを設定している場合はここで聞かれるので入力して下さい。
当然ですが、この作業は全ての被管理サーバーを対象に実施する必要があり、また、被管理サーバーが追加される場合は都度実施する必要があります。

さて、このコマンドを実行すると被管理サーバーに必要なソフトウェアがインストールされると同時に、管理サーバーのchefのディレクトリ配下にnodesというディレクトリが作成され、登録したノードの情報がjson形式で保存されます。
これは本来chef-serverを使って管理する際にはデータベースに登録されるべき情報が、chef-zeroを使ったためファイルとして保存されたものです。
処理が終わったら下記のコマンドを実行してノードが登録されたかを確認しておきます。
# knife node list

問題無ければ初期設定は終了です。



  • 最終更新:2016-01-19 12:16:20

このWIKIを編集するにはパスワード入力が必要です

認証パスワード