ウェブサイト検索

Ubuntu VPS インスタンスに Chef サーバー、ワークステーション、クライアントをインストールする方法


警告

このガイドはChef 11を対象としています。Chef 12プラットフォームは、いくつかの重要な構成の違いを導入しています。Chef 12サーバー、作業所、ノードのセットアップ方法についてのガイドはここにあります。

紹介

組織構造が成長し、環境を管理するために必要な各要素が拡大するにつれて、各サーバーやサービスの管理が手に負えなくなる可能性があります。

構成管理ソリューションは、システムとインフラストラクチャの管理を簡素化するように設計されています。構成管理ツールの目標は、インフラストラクチャをコードベースとして管理できるようにすることです。Chefは、大量のサーバーを簡単に管理できる構成管理ソリューションです。

前回のガイドでは、Chefコンポーネントの一般的な構造とシステムが概念的にどのように機能するかについて説明しました。いくつかの重要な用語や、さまざまなコンポーネント間の関係についても取り上げました。

このガイドでは、小さなChef 11のセットアップをインストールする作業を行います。これは、設定データを保存しアクセス権を管理するために使用される1つのChefサーバーになります。これは、他のマシンのハブとして機能します。

私たちは、サーバーと対話し、構成ポリシーを構築できるワークステーションも設置します。ここが、インフラ環境を管理するための作業を行う場所です。

最後に、私たちはノードをブートストラップします。これは、Chefを通じて管理される私たちの組織のサーバーの1つを表します。私たちは、設定したサーバーとワークステーションを使用してこれを行います。

これらの3台のマシンは、単純さのためにUbuntu 12.04 x86_64 VPSインスタンスを使用します。私たちは安定していて十分にテストされたChef 11リリースをターゲットにしています。

サーバーのインストール

最初にオンラインにする必要があるコンポーネントはChefサーバーです。これは他のコンポーネント間の通信の中心となるため、他のマシンがセットアップを完了するために利用できる必要があります。

これを行う前に、Chefサーバーのリクエストを正しく解決するためにドメイン名を設定することが重要です。ここにDigitalOceanでドメイン名を設定するためのガイドがあります。

ドメイン名がない場合は、使用するVPSインスタンスごとに/etc/hostsファイルを編集する必要があります。これにより、すべてのインスタンスがChefサーバーを名前で解決できるようになります。ドメイン名がある場合は、Chefサーバーとして使用するVPSでのみ必要です。Chefサーバーとして使用するVPSで次のコマンドを入力して実行できます:

sudo nano /etc/hosts

内部に、このコンピュータのIPアドレスと、サーバーに接続するために使用したい名前を追加します。その後、短い名前を追加することができます。以下のようなものです:

111.222.333.444 chef.domain.com chef

この111.222.333.444をあなたのChefサーバーのIPアドレスに変更し、他の2つの値もサーバーを参照するために好きなように変更します。ドメイン名を使用していない場合、使用する予定の各マシンのこのファイルにChefサーバーを指し示すこの行を追加してください。

これが正しく設定されているか確認するには、次のように入力してください:

ホスト名 -f

これは、このサーバーにアクセスするために使用される名前を教えてくれるはずです。

ウェブブラウザでこのページにアクセスすることで、シェフサーバーパッケージを取得できます。

「シェフサーバー」タブをクリックし、次に自分のオペレーティングシステムに合ったメニューを選択します。

右側から利用可能な最も最近のChef 11サーバーのバージョンを選択してください:

debファイルへのリンクが表示されます。これを右クリックし、「リンクの場所をコピー」というようなオプションを選択します。

使用するサーバーとしてのVPSインスタンスで、あなたのユーザーのホームディレクトリに移動し、wgetユーティリティを使ってdebファイルをダウンロードします。この文を書いている時点で、最新のリンクは次のとおりです:

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

これは、次のようにインストールできるインストールパッケージをダウンロードします。

sudo dpkg -i chef-server*

これにより、このマシンにサーバーコンポーネントがインストールされます。

その後、次のコマンドを実行して、特定のマシンに合わせてサービスを実際に構成する必要があると画面に表示されます。これにより、すべてが自動的に構成されます:

sudo chef-server-ctl reconfigure

このステップが完了すると、サーバーは稼働しているはずです。サーバーのドメイン名またはIPアドレスの前にhttps://を入力することで、すぐにWebインターフェースにアクセスできます。

https://サーバーのドメインまたはIP

SSL証明書があなたのブラウザがデフォルトで認識していない権威によって署名されたため、警告メッセージが表示されます:

「とにかく進む」ボタンをクリックして、この画面をバイパスし、ログイン画面にアクセスします。画面は次のようになります:

デフォルトのログイン認証情報は以下の通りです:

 デフォルトのユーザー名: admin デフォルトのパスワード: p@ssw0rd1 

初めてログインすると、すぐにパスワードを変更するように促されます。新しいパスワードを選択し、下の「ユーザーを保存」ボタンをクリックしてください。

サーバーの設定が完了し、私たちはそれを離れて作業ステーションの設定を始めることができる状態になりました。

ワークステーションのインストール

私たちの作業用コンピュータは、インフラ環境を決定する実際のポリシーを作成および編集するために使用するVPSです。このマシンには、私たちのマシンとサービスを説明するChefリポジトリのコピーがあり、それをChefサーバーにアップロードして実装します。

まずはバージョン管理のためにgitをインストールすることから始めます:

sudo apt-get update
sudo apt-get install git

これは実際に二つの目的があります。一つ目は、変更を追跡するために設定をバージョン管理下に置くという明白な使用法です。二つ目の目的は、次のコマンドが機能するように、一時的にsudoでパスワードをキャッシュすることです。

これからChefのウェブサイトからクライアントインストールスクリプトをダウンロードして実行します。これらすべての手順を完了するには、このコマンドを入力してください:

curl -L https://www.opscode.com/chef/install.sh | sudo bash

私たちのシェフワークステーショコンポーネントは現在インストールされています。しかし、設定はまだ遠いです。

次のステップは、GitHubから適切にフォーマットされたChefリポジトリの「chef-repo」ディレクトリ構造を取得することです。この構造をホームディレクトリにクローンするには、次のように入力します:

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

これにより、ホームディレクトリに chef-repo という名前のディレクトリが作成されます。ここには、あなたのセットアップに関する全ての設定が含まれます。

このディレクトリ内にChefツール自体のための設定ディレクトリを作成します:

mkdir -p ~/chef-repo/.chef

このディレクトリ内に、私たちのChefサーバーからいくつかの認証ファイルを置く必要があります。具体的には、2つの秘密鍵が必要です。

サーバーからキーを生成しコピーする

ウェブブラウザでChefサーバーに戻ってください:

https://サーバーのドメインまたはIP

adminユーザーの資格情報を使用してログインします。これらは以前に変更したものです。

上部のナビゲーションバーの「クライアント」タブをクリックしてください。 chef-validatorとchef-webuiという2つのクライアントが表示されます:

「chef-validator」クライアントに関連付けられた「編集」ボタンをクリックします。そのボックスを選択して「クライアントを保存」をクリックすることで、秘密鍵を再生成します:

新しく生成されたキーファイルの値が表示される画面に移動します。

注意: このキーは一度しか取得できませんので、このページから離れないでください! もし離れた場合は、再度キーを生成する必要があります。

プライベートキーフィールドの値をコピーしてください(下にあるものです)。

あなたのワークステーションマシンで、リポジトリで作成したChef設定ディレクトリに移動します:

cd ~/chef-repo/.chef

新しく作成したバリデーターキーのために新しいファイルを開きます:

nano chef-validator.pem

このファイルには、サーバーのウェブインターフェースからコピーしたキーの内容を貼り付けてください(簡潔さのためにいくつかの行は削除されています):

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA6Np8f3J3M4NkA4J+r144P4z27B7O0htfXmPOjvQa2avkzWwx
oP28SjUkU/pZD5jTWxsIlRjXgDNdtLwtHYABT+9Q5xiTQ37s+eeJgykQIifED23C
aDi1cFXOp/ysBXaGwjvl5ZBCZkQGRG4NIuL7taPMsVTqM41MRgbAcLCdl5g7Vkri
. . .
. . .
xGjoTVH1vBAJ7BG1RHJZlx+T9QnrK+fQu5R9mikkLHayxi13mD0C
-----END RSA PRIVATE KEY-----

キーの上や下に余分な空白行がないことを確認してください。ファイルを保存して閉じてください。

管理者ユーザーのキーファイルを再生成して保存するために、同じ手順に従います。今回は、キーはユーザー用のものなので、上部の「ユーザー」タブをクリックしてください。

再度、管理者ユーザーに関連付けられた「編集」ボタンをクリックし、「プライベートキーを再生成」ボックスにチェックを入れ、「ユーザーを保存」ボタンをクリックしてください。

次の画面で秘密鍵の値をコピーしてください。もう一度言いますが、これは再表示されませんので、初めて正しくコピーしてください。

ワークステーションのコンピュータに戻ると、同じディレクトリ内に管理者ユーザー用の別のファイルを作成する必要があります:

nano admin.pem

サーバーのインターフェースからコピーしたキーの内容を貼り付けてください(繰り返しますが、これは短縮版です):

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA/apu0+F5bkVtX6qGYcfoA6sIW/aLFUEc3Bw7ltb50GoZnUPj
0Ms1N1Rv/pdVZXeBa8KsqICAhAzvwSr0H9j+AoURidbkLv4urVC9VS4dZyIRfwvq
PGvAKop9bbY2WJMs23SiEkurEDyfKaqXKW687taJ9AKbH2yVx0ArPI2RwS3Sze3g
. . .
. . .
VTkNpg3lLRSGbQkvRUP6Kt20erS2bfETTtH6ok/zW4db8B/vnBlcZg==
-----END RSA PRIVATE KEY-----

貼り付けたキー行の上または下に余分な行がないことを確認してください。ファイルを保存して閉じてください。

ナイフコマンドを設定する

私たちは今、knifeコマンドを設定する必要があります。このコマンドは、サーバーおよび設定するノードとの通信の中心的な方法です。私たちはそれに、どのように認証するかを教え、その後、Chefサーバーにアクセスするためのユーザーを生成する必要があります。

幸運なことに、私たちは適切な認証ファイルを取得することでこのステップの基盤を築いてきました。設定を始めるには、次のように入力します:

knife configure --initial

これはあなたに一連の質問をします。それらを一つずつ進めていきましょう:

警告: ナイフの構成ファイルが見つかりません。構成ファイルはどこに置くべきですか? [/home/あなたのユーザー/.chef/knife.rb]

角括弧([])内の値は、値を選択しなかった場合にナイフが使用するデフォルト値です。

私たちは、これまで使用してきた隠しディレクトリにナイフの設定ファイルを置きたいです。

/home/your_user/chef-repo/.chef/knife.rb

次の質問では、Chefサーバーにアクセスするために使用するドメイン名またはIPアドレスを入力してください。これはhttps://で始まり、:443で終わる必要があります。

 https://サーバーのドメインまたはIP:443 

新しいユーザーを作成するための名前を求められます。 説明的なものを選んでください:

新しいユーザーの名前を入力してください: [root] station1

次に、管理者名を尋ねられます。これはデフォルト値を受け入れるために単にエンターを押すことができます(管理者名は変更していません)。

その後、既存の管理者キーの場所を尋ねてきます。これが必要です:

/home/your_user/chef-repo/.chef/admin.pem

検証者に関する類似の質問をするようになります。私たちは検証者の名前も変更していないので、それをchef-validatorとして保持できます。この値を受け入れるにはEnterキーを押してください。

その後、検証キーの場所を尋ねられます。それは次のようなものである必要があります:

/home/あなたのユーザー/chef-repo/.chef/chef-validator.pem

次に、リポジトリのパスを尋ねられます。これは、私たちが操作していたchef-repoフォルダーです:

/home/your_user/chef-repo

最後に、新しいユーザーのパスワードを選択するように求められます。好きなものを選んでください。

これで私たちのナイフ設定が完了するはずです。chef-repo/.chefディレクトリを見てみると、ナイフ設定ファイルと新しいユーザーの資格情報が見えるはずです:

ls ~/chef-repo/.chef
admin.pem  chef-validator.pem  knife.rb  station1.pem

作業台の清掃とテスト

私たちのワークステーションの設定はほぼ完了しています。接続が正常に機能することを確認し、整理するためにいくつかの作業を行う必要があります。

まず、シェフのリポジトリをバージョン管理に置くべきです。シェフの設定はソースコードとして機能するため、他のプログラムのファイルと同じように扱うことができます。

まず、Gitの名前とメールアドレスを初期化する必要があります。入力してください:

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

私たちの「chef-repo」ディレクトリ構造はGitHubからそのまま引き出されたため、すでにgitバージョン管理下にあります。

しかし、私たちはこのバージョン管理に「chef-repo/.chef」ディレクトリを含めたくありません。ここには私たちのプライベートキーとナイフ設定ファイルが含まれています。これらは私たちが設計したいインフラストラクチャには何の関係もありません。

このディレクトリを無視リストに追加するには、.gitignoreファイルを開いてください:

nano ~/chef-repo/.gitignore

ファイルの一番下に、ディレクトリ全体を含めるために.chefと入力してください。

 .rake_test_cache

Chefのキーファイルとシークレットを無視してください

.chef/*.pem .chef/encrypted_data_bag_secret .chef

ファイルを保存して閉じてください。

さて、現在の状態をコミットできます(おそらく、先程修正した.gitignoreファイル以外は変更がないでしょう)。次のように入力します:

git add .
git commit -m 'Finish configuring station1'

私たちはまた、ユーザーが私たちのChefインストールに付属しているRubyのバージョンを使用していることを確認したいと考えています。そうしないと、Chefによって行われた呼び出しがシステムのRubyインストールによって解釈される可能性があり、他のツールとの互換性がないかもしれません。

私たちは、.bash_profileファイルの下部に行を追加することで、単にパスを変更できます。

これを入力して行を追加してください:

echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bash_profile

さて、これらの変更を現在の環境に実装するために、次のように入力できます:

source ~/.bash_profile

knifeコマンドを使用してサーバーから情報を要求することで、Chefサーバーに成功裏に接続できるかどうかをテストできます。

これにより、すべてのユーザーのリストが返されます:

knife user list
admin
station1

これが成功すれば、私たちのワークステーションはサーバーと正常に通信できるようになります。

クライアントノードのブートストラップ

Chefサーバーとワークステーションがオンラインになったので、サンプルノードにChefクライアントをブートストラップしてみましょう。別のUbuntuインスタンスを使用します。

ブートストラッピングプロセスは、ノード上にChefクライアントを設定することを含みます。Chefクライアントは、サーバーと通信して自分自身の構成の指示を受け取るためのソフトウェアの一部です。クライアントは、インストールされているノードをサーバーから与えられたポリシーに沿った状態にします。

このプロセスは、私たちの新しいVPSインスタンスをChef管理システムの傘下に配置するだけです。その後、私たちはワークステーションでポリシーを作成し、それをサーバーにアップロードすることで、好きなように設定できます。

このプロセスを完了するために、クライアントソフトウェアをインストールしたいVPSに関する3つの情報だけを知っていれば十分です:

  • IPアドレスまたはドメイン名
  • ユーザー名(SSHを介してアクセス可能で、sudo権限を持つ)
  • パスワード

これらの情報をもとに、ワークステーションのナイフツールを使用して適切なパッケージをインストールできます。

このようなコマンドを入力したい:

 knife bootstrap node_domain_or_IP -x username -P password -N name_for_node --sudo 

これを少し分解しましょう。ドメイン名/IPアドレスはナイフにどのサーバーに接続するかを示します。ユーザー名とパスワードはログイン資格情報を提供します。

もし使用しているユーザーがrootでない場合、リモートコンピュータにソフトウェアを正常にインストールするためには、--sudoオプションが必要です。sudoコマンドを使用するためにログインすると、パスワードの入力を求められます。

ノードの名前は、Chefによって内部的に使用されるあなたが選択した名前です。これは、ポリシーを作成したり、ナイフを使用したりする際に、このマシンを参照する方法です。

コマンドが実行されると、クライアントソフトウェアがリモートノードにインストールされます。それは、Chefサーバーと通信して指示を受け取るように設定されます。

クライアントのリストを照会するには、次のように入力します:

knife client list
chef-validator
chef-webui
client1

私たちは、Chefサーバーのインストール中にデフォルトで設定される2つのクライアント(chef-validatorとchef-webui)と、私たちが作成したクライアントを見ることができます。

他のノードを設定して、Chefシステムの構成管理の下に置くことも同様に簡単です。

結論

あなたは今、Chefサーバー、構成を作成するための別のワークステーション、そして例のノードを持っているはずです。

現時点では、Chefを使用してノードの実際の構成は行っていませんが、このプロセスを開始する準備が整っています。今後のチュートリアルでは、ポリシーを実装し、ノードを管理するためのレシピやクックブックを作成する方法について説明します。

ジャスティン・エリングウッドによる

関連記事: