Chef は、組織内のすべてのサーバーとネットワーク機器を管理するために使用できる IT インフラストラクチャ自動化ソフトウェアです。 .
シェフ サーバー、またはインフラストラクチャ内の物理ノード (サーバー、ネットワーク機器など) とやり取りする場合は、シェフ ワークステーションが必要です。
シェフ ワークステーションでは、いくつかのシェフ関連のコマンド (ナイフなど) を使用して、クックブックを作成したり、個々のノードで実行されるレシピを作成したりできます。シェフ ワークステーションから新しいノードを起動することもできます。
このチュートリアルでは、Linux サーバーに Chef ワークステーションをインストールして構成する方法について説明します。
ChefDK をダウンロード
ChefDK は、Chef 開発キットの略です。 ChefDK は、Debian ベースのディストリビューション、Ubuntu、CentOS、Mac OS X、Windows などの RedHat ベースのディストリビューションなど、ほぼすべてのプラットフォームで利用できます。
ChefDK の現在の安定バージョンは 0.11.2 です。RHEL ベースのシステムでは、バージョン 6 とバージョン 7 (つまり、CentOS 6 と CentOS 7) の両方で使用できます。パッケージ化された RPM バージョンは、64 ビット バージョンでのみ使用できます。
ここからダウンロードするか、以下に示す直接 URL を使用してください。
CentOS 7 の場合、以下を使用します:
cd ~ wget https://packages.chef.io/stable/el/7/chefdk-0.11.2-1.el7.x86_64.rpm
CentOS 6 の場合、以下を使用します:
cd ~ wget https://packages.chef.io/stable/el/6/chefdk-0.11.2-1.el6.x86_64.rpm
ChefDK をインストール
上記でダウンロードした RPM を使用して ChefDK をインストールします。
# rpm -ivh chefdk-0.11.2-1.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:chefdk-0.11.2-1.el7 ################################# [100%] Thank you for installing Chef Development Kit!
これにより、以下に示すように /opt/chefdk に ChefDK がインストールされます。
# ls -l /opt/chefdk/ drwxr-xr-x. 2 root root 4096 Mar 3 13:50 bin drwxr-xr-x. 7 root root 62 Mar 3 13:50 embedded -rw-r--r--. 1 root root 13249 Feb 22 14:26 version-manifest.json -rw-r--r--. 1 root root 8233 Feb 22 14:26 version-manifest.txt
ChefDK のインストールを確認する
以下に示すように、Chef 検証を実行します。これにより、ChefDK に付属するすべての異なるコンポーネントが問題なく正常に動作することが確認されます。
# chef verify Running verification for component 'berkshelf' Running verification for component 'test-kitchen' Running verification for component 'tk-policyfile-provisioner' Running verification for component 'chef-client' Running verification for component 'chef-dk' Running verification for component 'chef-provisioning' Running verification for component 'chefspec' Running verification for component 'generated-cookbooks-pass-chefspec' Running verification for component 'rubocop' Running verification for component 'fauxhai' Running verification for component 'knife-spork' Running verification for component 'kitchen-vagrant' Running verification for component 'package installation' Running verification for component 'openssl' Running verification for component 'inspec' ....... --------------------------------------------- Verification of component 'test-kitchen' succeeded. Verification of component 'chef-dk' succeeded. Verification of component 'chefspec' succeeded. Verification of component 'rubocop' succeeded. Verification of component 'knife-spork' succeeded. Verification of component 'openssl' succeeded. Verification of component 'berkshelf' succeeded. Verification of component 'chef-client' succeeded. Verification of component 'fauxhai' succeeded. Verification of component 'inspec' succeeded. Verification of component 'tk-policyfile-provisioner' succeeded. Verification of component 'kitchen-vagrant' succeeded. Verification of component 'chef-provisioning' succeeded. Verification of component 'package installation' succeeded. Verification of component 'generated-cookbooks-pass-chefspec' succeeded.
以下は、シェフの検証が失敗したケースの例です。また、ChefDK に組み込まれている Chef には ruby が必要であることに注意してください。
# chef verify .. /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/mixlib-shellout-2.2.6/lib/mixlib/shellout.rb:289:in `invalid!': Expected process to exit with [0], but received '1' (Mixlib::ShellOut::ShellCommandFailed) ---- Begin output of /usr/bin/ohai -v ---- STDOUT: STDERR: /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb:319:in `to_specs': Could not find 'chef-config' (= 12.8.0) - did find: [chef-config-12.7.2] (Gem::LoadError)
次のエラー メッセージが表示されます:「'chef-config' (=12.8.0) が見つかりませんでした – 見つかりました:[chef-config-12.7.2] (Gem::LoadError)」
上記のエラー メッセージでは、ChefDK に付属のchef-config は 12.7.2 で、これは古いバージョンであり、このセットアップでは互換性がありませんでした。したがって、この場合、chef-config バージョン 12.8.0 を手動でインストールしました。
その後、chef ベリファイを実行したところ、上記のエラー メッセージは表示されませんでした。
ChefDK のバージョンを確認する
Chef –version コマンドを実行すると、以下に示すように、ChefDK のバージョン番号とそれに付属するすべてのコンポーネントが表示されます。
# chef --version Chef Development Kit Version: 0.11.2 chef-client version: 12.7.2 berks version: 4.2.0 kitchen version: 1.5.0
Chef ENV 変数のセットアップ
また、Chef 関連の環境変数もセットアップする必要があります。例:GEM_ROOT、GEM_HOME、GEM_PATH。
export GEM_ROOT="/opt/chefdk/embedded/lib/ruby/gems/2.1.0" export GEM_HOME="/root/.chefdk/gem/ruby/2.1.0" export GEM_PATH="/root/.chefdk/gem/ruby/2.1.0:/opt/chefdk/embedded/lib/ruby/gems/2.1.0"
また、システムにすでに ruby がインストールされている場合は、以下に示すように、chefDK に付属の ruby を使用するように、それに応じて PATH 変数を更新する必要があります。
export PATH="/opt/chefdk/bin:/root/.chefdk/gem/ruby/2.1.0/bin:/opt/chefdk/embedded/bin:/opt/chefdk/bin:/root/.chefdk/gem/ruby/2.1.0/bin:/opt/chefdk/embedded/bin:/opt/chefdk/bin:/root/.chefdk/gem/ruby/2.1.0/bin:/opt/chefdk/embedded/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
次のコマンドは、設定する必要があるすべての Chef 環境変数を表示します。
chef shell-init bash
これらの環境変数を設定する簡単な方法は、以下に示すように、上記の行を .bash_profile ファイルに追加することです。
echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile
Chef Manage にアクセスするためのファイアウォール ルール
次に、すでに実行中の Chef Server から Chef スターター キットをダウンロードする必要があります。
Chef 管理 GUI にアクセスするには、Chef サーバーで次の firewalld ルールを追加して、Chef サーバーの適切なポートを開きます。
firewall-cmd --direct --add-rule ipv4 \ filter INPUT_direct 0 -i eth0 -p tcp \ --dport 443 -j ACCEPT firewall-cmd --direct --add-rule ipv4 \ filter INPUT_direct 0 -i eth0 -p tcp \ --dport 80 -j ACCEPT firewall-cmd --direct --add-rule ipv4 \ filter INPUT_direct 0 -i eth0 -p tcp \ --dport 9683 -j ACCEPT firewall-cmd --reload
Chef Manage GUI からスターター キットをダウンロード
Chef Manage GUI にログインし、上部の「管理」タブをクリックします。次に、リストから組織を選択します。この例では、組織名は「example」です。組織を選択したら、以下に示すように、左側のメニューから [スターター キット] をクリックします。
[ダウンロード] をクリックすると、次の警告メッセージが表示されます。よろしいですか?:ユーザーと組織のキーがリセットされます。これを実行してもよろしいですか?.
[続行] をクリックします。これにより、chef-starter.zip ファイルがローカル マシンにダウンロードされます。
スターター キットの解凍
以下に示すように、chef-starter.zip ファイルを Chef ワークステーションに転送し、ルートのホーム ディレクトリで解凍します。
# cd ~ # unzip chef-starter.zip Archive: chef-starter.zip creating: chef-repo/cookbooks/ creating: chef-repo/cookbooks/starter/ creating: chef-repo/cookbooks/starter/templates/ creating: chef-repo/cookbooks/starter/templates/default/ inflating: chef-repo/cookbooks/starter/templates/default/sample.erb creating: chef-repo/cookbooks/starter/files/ creating: chef-repo/cookbooks/starter/files/default/ inflating: chef-repo/cookbooks/starter/files/default/sample.txt creating: chef-repo/cookbooks/starter/recipes/ inflating: chef-repo/cookbooks/starter/recipes/default.rb creating: chef-repo/cookbooks/starter/attributes/ inflating: chef-repo/cookbooks/starter/attributes/default.rb inflating: chef-repo/cookbooks/starter/metadata.rb inflating: chef-repo/cookbooks/chefignore inflating: chef-repo/README.md inflating: chef-repo/.gitignore creating: chef-repo/.chef/ creating: chef-repo/roles/ inflating: chef-repo/.chef/knife.rb inflating: chef-repo/roles/starter.rb inflating: chef-repo/.chef/ramesh.pem inflating: chef-repo/.chef/example-validator.pem
手動でchef-repoフォルダを設定している場合は、上記のサブディレクトリを手動で作成し、knife.rbファイル、organization-validator.pemファイル(例:example-validator.pem)、およびusername.pem ファイル (例:ramesh.pem) を上記のディレクトリにコピーします。
Chef サーバーの SSL 証明書を取得
この段階で、knife client list を実行すると、次のようなエラー メッセージが表示されます。
# cd ~/chef-repo # knife client list ERROR: SSL Validation failure connecting to host: centos.example.com - SSL_connect returned=1 errno=0 state=error: certificate verify failed ERROR: Could not establish a secure connection to the server. Use `knife ssl check` to troubleshoot your SSL configuration. If your Chef Server uses a self-signed certificate, you can use `knife ssl fetch` to make knife trust the server's certificates. Original Exception: OpenSSL::SSL::SSLError: SSL Error connecting to https://centos.example.com/organizations/example/clients - SSL_connect returned=1 errno=0 state=error: certificate verify failed
Chef サーバーから SSL 証明書をまだダウンロードしていないため、証明書の検証に失敗しました。
このために、以下に示すように、次の「knife ssl fetch」コマンドを実行します。
# cd ~/chef-repo # knife ssl fetch WARNING: Certificates from centos.example.com will be fetched and placed in your trusted_cert directory (/root/chef-repo/.chef/trusted_certs). Knife has no means to verify these are the correct certificates. You should verify the authenticity of these certificates after downloading.
これにより、証明書が次の truster_certs ディレクトリにダウンロードされます。
# ls -l /root/chef-repo/.chef/trusted_certs -rw-r--r--. 1 root root 1379 Mar 20 20:17 centos_example_com.crt # cat /root/chef-repo/.chef/trusted_certs/centos_example_com.crt -----BEGIN CERTIFICATE----- MIIDzDCCArSgAwIBAgIBADANBgkqhkiG9w0BAQsFADBRMQswCQYDVQQGEwJVUzEQ MA4GA1UECgwHWW91Q29ycDETMBEGA1UECwwKT3BlcmF0aW9uczEbMBkGA1UEAwwS ZXJhdGlvbnMxGzAZBgNVBAMMEmNlbnRvcy5leGFtcGxlLmNvbTCCASIwDQYJKoZI .. .. WLyr2ORLMcck/OGsubabO/koMNTqhl2JJPECNiDJh06MeZ/2+BOwGZSpXDbw+vFE NJAsLfsTzihGWZ58einMFA== -----END CERTIFICATE-----
Chef ワークステーションの最終検証
シェフのワークステーションが正常に動作している場合、「ナイフ クライアント リスト」を実行すると、このワークステーションに接続されているすべてのクライアントが表示されます。インストールしたばかりなので、以下に示すように、組織のバリデータのみが表示されます。
# cd ~/chef-repo # knife client list example-validator
すでに複数のサーバーが接続されている既存のシェフ ワークステーション マシンでこのコマンドを実行すると、シェフによって管理されているすべてのサーバーのリストが表示されます。
次の例では、5 つのサーバーがこのシェフ ワークステーションに接続されています。
# knife client list example-validator node1 node2 node3 node4 node5