開発者ドキュメント

Ubuntu14.04サーバーでChef12構成管理システムをセットアップする方法

序章

インフラストラクチャの要件が拡大するにつれて、各サーバーを手動で管理することはますます困難な作業になります。 この難しさは、再現性の要件によってさらに複雑になります。再現性は、ノードに障害が発生した場合、または水平スケーリングが必要な場合に必要になります。

構成管理ソリューションは、インフラストラクチャ管理をコードベースに変えることで、これらの問題に対処するように設計されています。 これらのツールを使用すると、多数のマシンで個々のタスクを実行する代わりに、各コンポーネントを接続し、構成をプルダウンして適用できる中央の場所に要件をコミットできます。

以前のガイドでは、Chefコンポーネントの一般的な構造と、管理者の目的を達成するためにそれらが相互作用する方法について、概念レベルで説明しました。 関連する用語について話し合い、各部分の責任について話し合いました。

このガイドでは、実際のソフトウェアをインストールします。 構成手順とノードプロファイリング情報を保存して提供する一元化されたChefサーバーをセットアップします。 また、管理者がコードベースを操作してインフラストラクチャの特性を変更できるワークステーションをセットアップします。 これをフォローアップするために、新しいノードをブートストラップして、Chefエコシステムの管理下に置きます。

前提条件と目標

このガイドでは、Chefのバージョン12を設定します。 構成はバージョン間で大幅に異なる可能性があるため、最良の結果を得るには、このガイドと同じメジャーバージョン番号内で操作していることを確認してください。

Chefのドキュメントには、Chefサーバーに少なくとも4つのコアと4GBのRAMが必要であると記載されています。 また、64ビットオペレーティングシステムが必要です。 このガイドでは、64ビットのUbuntu14.04で4コア/8GBのDigitalOceanドロップレットを使用します。

ワークステーションとノードの要件はほとんどありません。 一貫性を保つために、これらにもUbuntu14.04を使用します。

完了すると、構成データを保存して提供する一元化されたChefサーバーができます。 私たちのワークステーションは、変更を加え、それらをサーバーにアップロードし、新しいノードをブートストラップして管理するために使用されます。 ノードは、インフラストラクチャ内の単一のサーバーを表します。

Chefサーバーを構成する

まず、Chefサーバーをセットアップします。 Chefは、このサーバーに少なくとも4コアと4 GBのRAMを推奨しているため、それに応じて計画することを忘れないでください。

サーバーがホスト名でアクセス可能であることを確認します

Chefサーバーのインストールを計画しているサーバーにログインしたら、最初に実行する必要のあるタスクは、サーバーのホスト名が解決可能な完全修飾ドメイン名(FQDN)またはIPアドレスであることを確認することです。 次のように入力して、これを確認できます。

hostname -f

結果は、サーバーに到達できるアドレスになります。 そうでない場合は、次のファイルを編集して、サーバーにアクセスできるドメイン名またはIPアドレスに設定できます。

sudo nano /etc/hosts

ファイルは次のようになります。

127.0.1.1 current_hostname current_hostname_alias
127.0.0.1 localhost

. . .

完全修飾ドメイン名またはIPアドレスを反映するように一番上の行を変更し、その後にスペースとホストに使用するエイリアスを追加します。 の下に、最初の列にサーバーのパブリックIPアドレスが表示されている2行と、最後に変更した情報を追加します。 127.0.1.1 最後まで行。 次のようになります。

127.0.1.1 fqdn_or_IP_address host_alias
127.0.0.1 localhost
IP_address fqdn_or_IP_address host_alias

したがって、にドメイン名がない場合、パブリックIPアドレスは次のようになります。 123.123.123.123、ホスト名「chef」でホストに到達できるようにしたい場合は、次のようなファイルを作成できます。

127.0.1.1 123.123.123.123 chef
127.0.0.1 localhost
123.123.123.123 123.123.123.123 chef

一方、このサーバーの完全修飾ドメイン名が chef.example.com およびのIPアドレス 234.234.234.234、私のファイルは代わりに次のようになります。

127.0.1.1 chef.example.com chef
127.0.0.1 localhost
234.234.234.234 chef.example.com chef

終了したら、ファイルを保存して閉じます。 次のように入力すると、値が正しく設定されていることを確認できます。

hostname -f

結果は、インフラストラクチャのどこからでもChefサーバーに到達するために使用できる値になるはずです。

Chef12サーバーソフトウェアをダウンロードしてインストールします

次に、Chef12サーバーソフトウェアをダウンロードします。 Chefサイトにアクセスすると、インストールする必要のあるパッケージを見つけることができます。 具体的には、Ubuntuのインストールの場合、このリンクをたどることができます。

「UbuntuLinux14.04」ヘッダーの下で、ダウンロードリンクを右クリックし、リンクの場所をコピーします。

サーバーに戻り、ホームディレクトリに移動します。 コピーしたリンクを貼り付けて、 wget パッケージをダウンロードするコマンド。 この記事の執筆以降にマイナーバージョンの更新があった場合、コピーしたリンクは以下のリンクとは異なる場合があります。

cd ~
wget https://web-dl.packagecloud.io/chef/stable/packages/ubuntu/trusty/chef-server-core_12.0.5-1_amd64.deb

ダウンロードが完了したら、次のように入力してパッケージをインストールします。

sudo dpkg -i chef-server-core_*.deb

これにより、ベースChef12システムがサーバーにインストールされます。 推奨量よりも強力でないハードウェアを備えたサーバーを選択した場合、この手順は失敗する可能性があります。

インストールが完了したら、 reconfigure コマンド。特定の環境で連携するようにサーバーを構成するコンポーネントを構成します。

sudo chef-server-ctl reconfigure

管理者ユーザーと組織を作成する

次に、管理者ユーザーを作成する必要があります。 これは、作成する組織のインフラストラクチャコンポーネントに変更を加えるためのアクセス権を持つユーザー名になります。

これは、 user-create のサブコマンド chef-server-ctl 指図。 このコマンドでは、作成プロセス中にいくつかのフィールドを渡す必要があります。 一般的な構文は次のとおりです。

chef-server-ctl user-create USERNAME FIRST_NAME LAST_NAME EMAIL PASSWORD

この情報を含め、さらに追加します -f、追加のフラグ。新しいユーザーの秘密RSAキーを出力するファイル名を指定します。 を使用して認証するには、これが必要になります knife 後で管理コマンド。

この例では、次の情報を使用してユーザーを作成します。

この情報を使用してユーザーを作成するために必要なコマンドは次のとおりです(情報、特にパスワードを反映するようにこれを変更する必要があります)。

sudo chef-server-ctl user-create admin admin admin admin@example.com examplepass -f admin.pem

これで、という秘密鍵が必要になります admin.pem 現在のディレクトリにあります。

ユーザーができたので、次のコマンドを使用して組織を作成できます。 org-create サブコマンド。 組織とは、Chef内のインフラストラクチャと構成をグループ化したものにすぎません。 このコマンドの一般的な構文は次のとおりです。

chef-server-ctl org-create SHORTNAME LONGNAME --association_user USERNAME

短縮名は、Chef内から組織を参照するために使用する名前です。 ロングネームは組織の実際の名前です。 The --association_user 組織を管理するためのアクセス権を持つユーザー名を指定します。 繰り返しますが、 -f フラグを立てて、秘密鍵を配置するファイルの名前を指定できるようにします。 作成されるキーは、独自のクライアントキーを取得できるようになるまで、組織の一部として新しいクライアントを検証するために使用されます。

私たちは、以下の資質を備えた組織を作ります。

上記の品質を備えた組織を作成するには、次のコマンドを使用します。

sudo chef-server-ctl org-create digitalocean "DigitalOcean, Inc." --association_user admin -f digitalocean-validator.pem

これに続いて、2つあるはずです .pem ホームディレクトリ内のキーファイル。 私たちの場合、それらは呼び出されます admin.pemdigitalocean-validator.pem. このサーバーに接続し、これらのキーをワークステーションに一時的にダウンロードする必要があります。 今のところ、Chefサーバーのインストールは完了しています。

Chefワークステーションを構成する

Chefサーバーが稼働しているので、次のアクションはワークステーションを構成することです。 実際のインフラストラクチャの調整と構成は、Chefサーバーでは行われません。 この作業はワークステーションで実行され、ワークステーションはデータをサーバーにアップロードしてChef環境に影響を与えます。

シェフリポジトリのクローンを作成する

インフラストラクチャのChef構成は、総称してChefリポジトリと呼ばれる階層ファイル構造で維持されます。 この一般的な構造は、Chefチームが提供するGitHubリポジトリにあります。 我々は使用するだろう git このリポジトリをワークステーションに複製して、インフラストラクチャのChefリポジトリの基盤として機能させます。

まず、インストールする必要があります git を通って apt パッケージングツール。 パッケージインデックスを更新し、次のように入力してツールをインストールします。

sudo apt-get update
sudo apt-get install git

あなたが持ったら git インストールすると、Chefリポジトリをマシンに複製できます。 このガイドでは、ホームディレクトリにクローンを作成します。

cd ~
git clone https://github.com/chef/chef-repo.git

これにより、基本的なChefリポジトリ構造が次のディレクトリにプルダウンされます。 chef-repo ホームディレクトリにあります。

Chefリポジトリをバージョン管理下に置く

Chefリポジトリ内で作成された構成は、コードを管理するのと同じ方法でバージョン管理システム内で管理するのが最適です。 上記のリポジトリのクローンを作成したので、 git リポジトリはすでに初期化されています。

ワークステーションを新しいコミット用に設定するには、いくつかのことを行う必要があります。

まず、名前とメールアドレスを設定します git コミットをタグ付けするために使用します。 これはの要件です git コミットを受け入れる。 これをグローバルに設定し、 git 作成するリポジトリは次の値を使用します。

git config --global user.name "Your Name"
git config --global user.email "username@domain.com"

次に教えます git に含まれる情報を無視する ~/chef-repo/.chef ディレクトリ。 機密情報を保存するために、このディレクトリを数分で作成します。 今のところ、この場所を .gitignore そのようにファイル git 他の人に公開してはならないデータを保存しません:

echo ".chef" >> ~/chef-repo/.gitignore

に変更を加えたので .gitignore ファイル、先に進んで、バージョン管理システムへの最初の新しいコミットを行うことができます。 まず、変更したすべてのファイルを現在のステージング領域に追加します。

cd ~/chef-repo
git add .

次に、変更をコミットします。 を使用します -m 行っている変更を説明するインラインコミットメッセージを指定するフラグ:

git commit -m "Excluding the ./.chef directory from version control"

Chefリポジトリは現在バージョン管理下にあります。 インフラストラクチャの構成を作成するときに、上記の2つのコマンドを使用して git 最新のリポジトリ。

ChefDevelopmentKitをダウンロードしてインストールします

次に、Chefワークステーション用に設計されたソフトウェアスイートであるChefDevelopmentKitをインストールする必要があります。 これには、インフラストラクチャの構成を設計するときに役立つ多くのユーティリティが含まれています。 この時点で関心のあるツールはバンドルされています knife コマンド。ChefサーバーとChefクライアントの両方と通信して制御できます。

Chef 12開発キットは、ChefのWebサイトにあります。 ワークステーションとしてUbuntu14.04を使用しているため、こちらのページに最新のダウンロードリンクが含まれています。 この記事の執筆時点では、ダウンロードリンクはUbuntu12.04とUbuntu13.10のみを参照していますが、Ubuntu14.04には問題なくインストールされるはずです。

「UbuntuLinux」の下にあるダウンロードボタンを右クリックして、リンクの場所をコピーします。

ワークステーションに戻り、ホームディレクトリに移動します。 コピーしたリンクを貼り付けて、 wget パッケージをダウンロードするコマンド。 新しい開発キットバージョンがリリースされている場合、コピーしたリンクは以下のリンクとは異なる場合があります。

cd ~
wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.4.0-1_amd64.deb

一度 .deb パッケージがダウンロードされました。次のように入力してインストールできます。

sudo dpkg -i chefdk_*.deb

インストール後、すべてのコンポーネントが新しいを通じて期待される場所で利用可能であることを確認できます chef 指図:

chef verify

ワークステーションが主にインフラストラクチャのChefの管理に使用される場合は、デフォルトでChefとともにインストールされるRubyのバージョンを使用することをお勧めします。 あなたはあなたのを変更することによってこれを行うことができます .bash_profile ChefのRubyが優先されるように:

echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile

その後、あなたはあなたの .bash_profile 現在のセッションの正しい環境変数を設定するファイル:

source ~/.bash_profile

Rubyのバージョンを個別に管理する場合は、上記の手順をスキップできます。

ワークステーションに認証キーをダウンロードします

この時点で、ワークステーションには、Chefサーバーと対話してインフラストラクチャ構成を構成するために必要なすべてのソフトウェアがあります。 ただし、Chefサーバーおよび環境と対話するようにまだ構成されていません。 このセクションでは、Chefサーバーで作成したクレデンシャルをダウンロードします。

を使用します scp Chefサーバーで作成したユーザーキーと組織バリデーターキーをダウンロードするユーティリティ。 その前に、これらのファイルを保存する隠しディレクトリを作成します。

mkdir ~/chef-repo/.chef

Chefサーバーへの接続に使用する方法によって、キーのダウンロードがどの程度正確に行われるかが決まります。 設定に一致する以下の方法に従ってください。

パスワードを使用してChefサーバーに接続するときにキーをダウンロードする方法

パスワードベースの認証を使用してSSH経由でChefサーバーに接続する場合、 scp コマンドは大幅な変更なしで機能します。

ワークステーションで、Chefサーバーへの接続に使用するユーザー名とドメイン名またはIPアドレスを指定します。 すぐにコロン(:)とダウンロードしたいファイルへのパスを続けてください。 スペースを追加した後、ダウンロードを配置するローカルコンピューター上のディレクトリを指定します(~/chef-repo/.chef 私たちの場合には)。

を使用してChefサーバーにログインする場合 root ユーザーアカウントの場合、コマンドは次のようになります。 ドメイン名またはIPアドレスと、ダウンロードしようとしているキーファイルの名前の両方を環境に合わせて変更することを忘れないでください。

scp root@server_domain_or_IP:/root/admin.pem ~/chef-repo/.chef
scp root@server_domain_or_IP:/root/digitalocean-validator.pem ~/chef-repo/.chef

root以外のユーザーを使用してChefサーバーに接続する場合、コマンドは次のようになります。

scp username@server_domain_or_IP:/home/username/admin.pem ~/chef-repo/.chef
scp username@server_domain_or_IP:/home/username/digitalocean-validator.pem ~/chef-repo/.chef

SSHキーを使用してChefサーバーに接続するときにキーをダウンロードする方法

代わりに、SSHキーを使用してChefサーバーに接続する場合(推奨)、いくつかの追加手順を実行する必要があります。

まず、ワークステーションとのSSHセッションを終了します。 新しいパラメータで一時的に再接続する必要があります。

exit

ローカルコンピューターに戻ったら、Chefサーバーへの接続に使用するSSHキーをSSHエージェントに追加する必要があります。 標準のSSHスイートであるOpenSSHには、次のように入力して開始できるSSHエージェントが含まれています。

eval $(ssh-agent)

次のような出力が表示されます(数値は異なる可能性があります)。

Agent pid 13881

エージェントが起動したら、SSHキーを追加できます。

ssh-add
Identity added: /home/demo/.ssh/id_rsa (rsa w/o comment)

これにより、SSHキーがメモリに保存されたままになります。 これで、を使用して接続するときに、保存されているキーをワークステーションに転送できます。 -A オプション付き ssh. これにより、ローカルコンピュータから接続しているかのように、ワークステーションから任意のコンピュータに接続できます。

ssh -A username@workstation_domain_or_IP

これで、転送されたSSHクレデンシャルを使用して、パスワードを必要とせずにChefサーバーに接続できます。 Chefサーバーのキーがrootユーザーから利用できる場合、必要なコマンドは次のようになります。 必要に応じて、Chefサーバーのドメイン名またはIPアドレスとキー名を変更することを忘れないでください。

scp root@server_domain_or_IP:/root/admin.pem ~/chef-repo/.chef
scp root@server_domain_or_IP:/root/digitalocean-validator.pem ~/chef-repo/.chef

代わりに、Chefサーバー用に構成されたSSHキーを使用して通常のユーザーアカウントへの認証を行う場合、コマンドは代わりに次のようになります。

scp username@server_domain_or_IP:/home/username/admin.pem ~/chef-repo/.chef
scp username@server_domain_or_IP:/home/username/digitalocean-validator.pem ~/chef-repo/.chef

Chef環境を管理するためのKnifeの構成

ワークステーションでChefクレデンシャルを使用できるようになったので、次の設定を行うことができます。 knife Chefインフラストラクチャに接続して制御するために必要な情報を使用してコマンドを実行します。 これは、 knife.rb に配置するファイル ~/chef-repo/.chef 私たちのキーと一緒にディレクトリ。

というファイルを開きます knife.rb テキストエディタのそのディレクトリ:

nano ~/chef-repo/.chef/knife.rb

このファイルに、次の情報を貼り付けます。

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "name_for_workstation"
client_key               "#{current_dir}/name_of_user_key"
validation_client_name   "organization_validator_name"
validation_key           "#{current_dir}/organization_validator_key"
chef_server_url          "https://server_domain_or_IP/organizations/organization_name"
syntax_check_cache_path  "#{ENV['HOME']}/.chef/syntaxcache"
cookbook_path            ["#{current_dir}/../cookbooks"]

次の項目は、インフラストラクチャに合わせて調整する必要があります。

私たちのガイドのために、 knife.rb ファイルは次のようになります。 次の場合は、サーバーのドメイン名またはIPアドレスを調整する必要があります。

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "admin"
client_key               "#{current_dir}/admin.pem"
validation_client_name   "digitalocean-validator"
validation_key           "#{current_dir}/digitalocean-validator.pem"
chef_server_url          "https://server_domain_or_IP/organizations/digitalocean"
syntax_check_cache_path  "#{ENV['HOME']}/.chef/syntaxcache"
cookbook_path            ["#{current_dir}/../cookbooks"]

終了したら、保存して閉じます knife.rb ファイル。

次に、簡単な方法を試して、構成ファイルをテストします。 knife 指図。 私たちは私たちの中にいる必要があります ~/chef-repo 構成ファイルを正しく読み取るためのディレクトリ:

cd ~/chef-repo
knife client list

この最初の試行は、次のようなエラーで失敗するはずです。

ERROR: SSL Validation failure connecting to host: server_domain_or_IP - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: 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_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

これは、ワークステーションにChefサーバーのSSL証明書がないために発生します。 これは、次のように入力することで取得できます。

knife ssl fetch

これにより、Chefサーバーの証明書ファイルがリストに追加されます。 ~/chef-repo/.chef ディレクトリ:

WARNING: Certificates from server_domain_or_IP will be fetched and placed in your trusted_cert
directory (/home/demo/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.

Adding certificate for server_domain_or_IP in /home/demo/chef-repo/.chef/trusted_certs/server_domain_or_IP.crt

SSL証明書がフェッチされた後、前のコマンドが機能するはずです。

knife client list
digitalocean-validator

上記のコマンドが正しく返されると、ワークステーションはChef環境を制御するように設定されています。

ナイフを使用した新しいノードのブートストラップ

Chefサーバーとワークステーションを構成したら、Chefを使用してインフラストラクチャ内に新しいサーバーを構成できます。

これは、「ブートストラップ」と呼ばれるプロセスを通じて発生します。このプロセスでは、Chefクライアントの実行可能ファイルが新しいコンピューターにインストールされ、組織の検証キーも渡されます。 次に、新しいノードはバリデーターキーを使用してChefサーバーに接続し、その代わりに、独自の一意のクライアントキーとそれに割り当てられている構成を受け取ります。 このプロセスにより、新しいサーバーが初期状態になり、将来の管理用にセットアップされます。

新しいサーバーに接続するには、新しいノードに関するいくつかの情報が必要になります。

コマンドの一般的な構文は次のとおりです。

knife bootstrap node_domain_or_IP [options]

最終的に使用する可能性のある一般的なオプションは次のとおりです。

使用する場合 -A オプションの場合、ローカルコンピューターでSSHエージェントを起動し、新しいノードへの接続に使用できるSSHキーを追加し、に接続してその情報をワークステーションに転送する必要があります。 -A 最初にフラグを立てます。 これを行う方法の詳細については、Chefサーバーからのキーのダウンロードに関するワークステーション構成のセクションを参照してください。

上記の情報を使用して、さまざまな状況に対応する正しいブートストラップコマンドを作成することができます。

たとえば、ユーザー名を使用して「testing」という名前のノードをブートストラップするには demo、で構成されています sudo 特権、およびSSHとのパスワードが必要です sudo 検証、次のように入力できます。

knife bootstrap node_domain_or_IP -N testing -x demo -P password --sudo --use-sudo-password

を使用してブートストラップしたい場合 root ユーザー、ワークステーションで使用可能なキーを使用したSSHキー認証を使用し、ノードのホスト名をChefノード名として引き続き使用したい場合は、次のように入力できます。

knife bootstrap node_domain_or_IP -x root -A

SSHキーを使用して認証する場合 sudo ユーザーの場合でも、を使用してパスワードを入力する必要があります -P 旗、 --sudo フラグ、および --use-sudo-password プロンプトを回避するためのフラグ:

knife bootstrap node_domain_or_IP -x demo -A -P password --sudo --use-sudo-password -N name

あなたが上記のシナリオにいるが、 sudo パスワードの場合は、代わりに次のように入力できます。

knife bootstrap node_domain_or_IP -x demo -A --sudo -N name

新しいノードがブートストラップされると、新しいクライアントが必要になります。

knife client list
digitalocean-validator
name

同じ名前の新しいノードも必要です。

knife node list
name

上記の手順を使用して、任意の数の新しいサーバーに新しいChefクライアントを簡単にセットアップできます。

新しいDigitalOceanドロップレットを既存のChefインフラストラクチャに、それぞれをブートストラップせずに自動的に追加する方法について知りたい場合は、このチュートリアルを確認してください。

結論

このガイドに従うと、インフラストラクチャ用に完全に機能するChefサーバーが構成されているはずです。 また、Chefがインフラストラクチャに適用する構成を管理および保守するために使用できるワークステーションをセットアップしました。 使用方法を示しました knife Chefによって構成されるサーバーをブートストラップするコマンド。

次のガイドでは、いくつかのChefコンストラクトを使用してノードの構成を設計する方法を示します。 宣言型構成を使用してインフラストラクチャを制御する方法として、Chefレシピとクックブックの基本について説明します。

モバイルバージョンを終了