2015年9月2日水曜日

【トピックス】LifeKeeperセットアップに使用できるChef 環境の構築

はじめまして。LifeKeeperの開発を担当している佐藤です。

ChefでのLifeKeeper構築がとても便利で、日々無駄に作ったり壊したりしています。
そんな便利なChef環境ですが、使えるようになるまでかなり試行錯誤しました。
その苦労をまとめたセットアップ手順です。

ここでは一般的なChef環境の構築を行いますので、すでに持っていて使いこなしている方は、今後、掲載予定の ~LifeKeeperインストールからクラスタ構築~ 編に進んでください。
     1.        セットアップする構成
    Chefの構成にはいくつか種類がありますが、LifeKeeperで使用する場合は複数台のクライアントを管理しないといけないので、Chef Server/Client構成が使いやすいだろうと思います。
    今回はこの構成でセットアップします。
Chef/Client環境を構成する要素は大きく分けて3つあります。
    Chef Server
  Cookbookやノード情報などを一元管理してくれるサーバーです。
ホスティングされているサーバーもありますのが、今回は自力でセットアップすることにします。
    Workstation
  Chef Server操作用の端末になります。Serverには基本的にUIがないのでほとんどの操作はこちらで行います。
    client
  実際にLifeKeeperをインストールされる環境です。
図にするとこのようなイメージになります。


ServerWorkstationは同居させることもできますが、今回は別の端末にセットアップします。

     2.        セットアップ
    では、実際にセットアップしていきます。
    実行例では目の前に余っていたCentOS6環境を使用するので、違うディストリビューションでは適宜読み替えてください。
基本的にはそのまま使えます。
                 2.1.        事前準備
          あらかじめ以下の設定を行っておいてください。
    各端末がネットーワークで相互に接続されていること
    各端末がそれぞれ名前解決できること(IPアドレスではなくホスト名で接続できること)
    一部ファイルを外部からダウンロードするので、外部に接続できること
    rubyがインストールされている場合は削除しておくこと(Chefパッケージにも入っているので衝突します)
                 2.2.        Chef Server
                             2.2.1.        パッケージのダウンロード
            ttps://downloads.chef.io/chef-server/ から、使用している環境に合ったパッケージをダウンロードします。
今回はCentOS6なので、RedHat Enterprise Linux 6用を使います。
                             2.2.2.        パッケージのインストール
            ダウンロードしたパッケージはRPM形式なので、素直にrpmコマンドでインストールします。
            例)


# rpm -ivh chef-server-core-12.1.2-1.el6.x86_64.rpm

依存関係でエラーになる場合は、ダウンロードするファイルを間違えていますので、確認して下さい。


                             2.2.3.        初期設定
            Chef serverの初期設定を行うために、以下のコマンドを実行します。


# chef-server-ctl reconfigure

手元の環境では5分程かかりました。
途中、SSL証明書作成のために/dev/randomをものすごく使います。
止まっているようにみえる場合、キーボードやマウスを無駄に操作すると先に進みます。
リモートで操作できない場合は、終わるまで気長に待ちましょう。


                             2.2.4.        テスト
            初期設定が終わったら、正しく構成できたか確認するために、以下のコマンドを実行します。


# chef-server-ctl test


ここで



Configured URL: https://

が出てエラーになる場合は、自分の名前解決が出来ていないので設定を確認して下さい。
なお、設定変更後はreconfigureからやり直す必要があります。

無事に終わると



Finished in 4 minutes 10.5 seconds

148 examples, 0 failures, 2 pending

というように結果が出てくるので、failureがないことを確認しましょう。

                             2.2.5.        ユーザーと組織の作成

インストール直後は何も登録されていないので、ユーザーと組織を作成する必要があります。
まずはユーザーを以下のコマンドで作成します。
            chef-server-ctl user-create ユーザー名 名 性 メールアドレス パスワード
            例)


# chef-server-ctl user-create admin LifeKeeper Administrator lkadmin@example.jp password --filename admin.pem


ユーザー名はChef独自の管理なのでログイン名と連動している必要はありません。
--filename
オプションは証明書ファイル名を指定します。
後で使うので、わかりやすい名前をつけたほうがいいです。

次に組織を作成します。

chef-server-ctl org-create
組織名 正式名 --association_user  ユーザー名

例)



# chef-server-ctl org-create exmaple "Example corp." --association_user admin --filename example-validator.pem

ユーザー名は先ほど作ったユーザーになります。

--filename
user-createと同じく証明書ファイル名の指定です。

                             2.2.6.        ファイアーウォールの設定変更
            ChefサーバーはTCP 443ポートで接続されるので、このポートを外部に公開する必要があります。
ファイアーウォールを動作させている場合はこのポートを公開するように設定してください。
                             2.2.7.        これでChef Serverのインストールは完了です。


                 2.3.        Workstationのインストール

                             2.3.1.        ダウンロード
            https://downloads.chef.io/chef-dk/ 今回はサーバー同様にCentOS6を使用するので、RedHat Enterprise Linux 6用をダウンロードします。
                             2.3.2.        インストール

            同じくRPMなので、素直にrpmでインストールします。
            

            例)



# rpm -ivh chefdk-0.7.0-1.el6.x86_64.rpm

                             2.3.3.        確認
            正しくインストールできたか確認するために、以下のコマンドを実行してください。


# chef verify
(
)
Verification of component 'chefspec' succeeded.
Verification of component 'package installation' succeeded.


というようにエラーが出なければ大丈夫です。

                             2.3.4.        証明書の取得
            2.2.5で作成したサーバー上にある2個の.pemファイルを持ってきます。
                             2.3.5.        初期設定

            ここからは一般ユーザーで作業を行ってください。
            以下のコマンドで初期設定します。




$ knife configure

あとは対話的に進んでいくので適切に答えてください。
以下、注意すべき項目について列挙します。
    Please enter the chef server URL
Chef Server
URLを入力するところですが、例のとおりではなく
https://serverのFQDN:443/organizations/<組織
と設定しないとChef Serverと接続した時に以下の様なエラーになります。
Server
作成時の例のとおりであれば
https://chef-server.example.jp:443/organizations/example
のようになります。
    Please enter the location of the validation key
先ほど持ってきた組織の証明書を指定します。
出来上がった設定ファイルは以下のようになります。


$ cat .chef/knife.rb

log_level                :info

log_location             STDOUT

node_name                'admin'

client_key               '/home/admin/.chef/admin.pem'

validation_client_name   'chef-validator'

validation_key           '/home/admin/.chef/example-validator.pem'

chef_server_url          'https://chef-server.exmaple.jp:443/organizations/example'

syntax_check_cache_path  '/home/admin/.chef/syntax_check_cache'

cookbook_path [ 'chef-repo/cookbooks' ]


                             2.3.6.        SSL証明書のインストール
            サーバーにあるSSL証明書をインストールします。
以下のコマンドを実行するとインストールされます。


$ knife ssl fetch


                             2.3.7.        SSL接続確認
            以下のコマンドを実行してSSLの設定が適切にできていることを確認します。


$ knife ssl check
Successfully verified certificates from


と出力されたら正常です。
問題がある場合は、解決策が提示されるのでそれに従って設定を見なおしてください。

                             2.3.8.        Serverとの接続確認
            Chef Serverの設定が適切に行われているか確認するために、以下のコマンドを実行します。


$ knife user list
admin


                             2.3.9.        正常であれば先ほど作成したユーザーが出力されます。
            うまくいかない場合は設定に問題があるので、初期設定をやり直すか、.chef/knife.rbを直接編集して解決してください。
                           2.3.10.        リポジトリ作成
cookbook
などを保存するリポジトリを作成します。
https://github.com/chef/chef-repo
から取得するか、以下のコマンドを実行します。


$ mkdir -p chef-repo/{cookbooks,environments,nodes,roles,site-cookbooks}

                           2.3.11.        これでWorkstationのインストールは完了です。

                 2.4.        Client
                             2.4.1.        インストール
            Workstationから以下のコマンドを実行して、各ノードにchef-clientをインストールします。


$ knife bootstrap ノード名 -N ノード名


ノード名は名前解決できる必要があります。
途中でrootのパスワードを問い合わせてきます。
Authentication Error
になる場合は
validation keyを削除すると出なくなります。

例)



$ rm .chef/example-validation.pem

                             2.4.2.        動作確認
            Workstationから以下のコマンドを実行してServer-Client間の接続ができていることを確認します。


$ knife node show -l ノード名


正常であればノードの情報が出力されます。

                             2.4.3.        これでClientのインストールは完了です。

1 件のコメント:

  1. 次回は、ChefによるLifeKeeperクラスタ構築 ~cookbook準備 編です。また、cookbook準備編に続いて、LifeKeeperインストールからクラスタ構築 編をお届けする予定です。どうぞ、お楽しみに。

    返信削除