[ Chef](http://www.chef.io/)は、「インフラストラクチャモデルをコード形式に変換できる」自動化プラットフォームであり、ユーザーは複数のサーバー(または複数のノード)間でリソースを管理および展開できます。 。 Chef自動化プラットフォームでは、ユーザーが「クックブック」を作成およびダウンロードすることもできます(「クックブック」は「クッキングマニュアル」クックブックに保存されます)
それらの中で)、「レシピ」の役割は、これらのノードのコンテンツと戦略を自動化することです。
Chefは、Chefサーバー、構成する1つ以上のワークステーションサーバー、および各ノードにインストールされたChefクライアントによって管理される多くのノードで構成されます。
![]( /img/3d355bede2e20fe10663ae8172cc8cf5/erkng4g95r.png)シェフのアーキテクチャ図
このガイドでは、Chefサーバー、Linode(VPSサービスプロバイダー)ホスト上の仮想ワークステーションを作成および構成する方法、およびブートノードを介してChefクライアントを実行する方法を紹介します。
注このガイドは、root以外のユーザーを対象としています。昇格する必要のあるコマンドにプレフィックス
sudo
を追加できます。sudo
コマンドに慣れていない場合は、[ユーザーとグループ](https://www.linode.com/docs/tools-reference/linux-users-and-groups/#understanding-sudo)ガイドを確認してください。
Chefサーバーをホストするために使用され、4GBのRAMを必要とし、Ubuntu18.04オペレーティングシステムを実行するホスト
ワークステーションとノードホストをそれぞれホストするために使用される、それぞれがUbuntu18.04オペレーティングシステムを実行する小さなコンテンツを持つ2つのLinodeホスト
[Linode入門](https://www.linode.com/docs/getting-started/)と[サーバーを保護する方法](https://www.linode.com/docs/security/securing-your-server/)の2つの記事の紹介に従って、各Linodeホストを構成してください。
各Linodeホストは、有効なFQDN(完全修飾ドメイン名)で構成する必要があります
すべてのホストのソフトウェアが最新であることを確認してください。
sudo apt update && sudo apt upgrade
Chefサーバーは、すべてのChefワークステーションとChefノード間の対話センターです。ワークステーションで行われた構成変更をChefサーバーにアップロードしてから、ChefクライアントからChefサーバーにアクセスし、構成変更を各ノードに同期させることができます。
[最新のChefサービスコアインストールパッケージ](https://downloads.chef.io/chef-server/#ubuntu)をダウンロードします。
wget https://packages.chef.io/files/current/chef-server/12.17.54+20180531095715/ubuntu/18.04/chef-server-core_12.17.54+20180531095715-1_amd64.deb
Chefサービスをインストールします。
sudo dpkg -i chef-server-core_*.deb
ダウンロードしたファイルを削除します。
rm chef-server-core_*.deb
Chefサーバーには、 chef-server-ctl
という名前のコマンドラインユーティリティが含まれています。 chef-server-ctl
を実行して、Chefサーバーサービスを開始します。
sudo chef-server-ctl reconfigure
多数のワークステーションとサイトをシェフサーバーにリンクするには、管理者とユーザーグループを作成し、RSA秘密鍵を使用して2つを関連付ける必要があります。
/ home
ディレクトリの下に、秘密鍵を保存するための .chef
ディレクトリを作成します。
mkdir .chef
chef-server-ctl
コマンドを実行してユーザーを作成します。この例では、コマンド内の次のキーワードにいくつかの調整を加える必要があります: USER_NAME
、 FIRST_NAME
、 LAST_NAME
、 EMAIL
、および PASSWORD
。 USER_NAME.pemを調整するときは、USERNAME
を変更するだけでよく、そのサフィックス名 .pem
を保持する必要があります。
sudo chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD'--filename ~/.chef/USER_NAME.pem
次に、ユーザーグループを作成し、前の手順で作成した管理者ユーザーをセキュリティユーザーグループにバインドします。 ORG_NAME
をユーザーグループの短い識別子に変更し、 ORG_FULL_NAME
をユーザーグループのフルネームに変更し、 USER_NAME
を前の手順で作成したユーザーのユーザー名に変更し、最後に ORG_NAME.pem
の を変更します。 ORG_NAMEG
はユーザーグループの短い識別子に変更され、そのサフィックス名 .pem
は保持されます。
sudo chef-server-ctl org-create ORG_NAME "ORG_FULL_NAME"--association_user USER_NAME --filename ~/.chef/ORG_NAME.pem
Chefサーバーがインストールされ、RSAキーが生成されたら、各ワークステーションの構成を開始できます。これにより、Chefノードのすべての主要なタスクが実行されます。
Chefワークステーションでは、「クックブック」、「クッキングマニュアル」、属性、およびその他の変更を作成および構成できます。これらはすべてワークステーションで有効です。ローカルホストは任意のオペレーティングシステムを実行できますが、リモートサーバーをワークステーションホストとして使用する利点は、どこからでもアクセスできるため明らかです。
[ 最新のシェフ開発キット(シェフ開発キット)をダウンロード](https://downloads.chef.io/chef-dk/ubuntu/):
wget https://packages.chef.io/files/stable/chefdk/3.1.0/ubuntu/18.04/chefdk_3.1.0-1_amd64.deb
ChefDK(Chef Development Kitの略)をインストールします。
sudo dpkg -i chefdk_*.deb
インストールされたファイルを削除します。
rm chefdk_*.deb
chef-repo
を生成し、新しく作成されたディレクトリに移動します。
chef generate app chef-repo
cd chef-repo
.chef
ディレクトリを作成して knife.rb
( "cookbook"構成ファイル)、 ORGANIZATION-validator.pem
、および USER.pem
ファイルを保存します。
mkdir .chef
Chefサーバーをセットアップするときは、生成されたRSA秘密鍵をワークステーションに配置する必要があります。この背後にある特定のプロセスは、linodeホストにログインするときにSSHキー認証を使用するかどうかによって異なります。
キー認証を使用するログイン方法がない場合は、Chefサーバーから直接ファイルをコピーしてください。次のコマンドでは、ユーザーをChefサーバーのユーザー名に変更し、IPをChefサーバーのIPまたはChefサーバーのURLアドレスに変更する必要があります。
scp [email protected]:~/.chef/*.pem ~/chef-repo/.chef/
RSAキーペア認証ログイン方式を使用する場合は、ローカル端末から scp
コマンドを使用して、拡張子が .pem
のファイルをサーバーからワークステーションにコピーする必要があります。 user
を対応するユーザー名に変更し、次のコマンドの 192.0.2.0
と 203.0.113.0
をそれぞれ実際のChefサーバーIPとサイトサーバーIPに変更します。
scp -3 [email protected]:~/.chef/*.pem [email protected]:~/chef-repo/.chef/
ls
を使用して .chef
ディレクトリ内のファイルの内容を一覧表示し、ファイルが正常にコピーされたことを確認します。
ls ~/chef-repo/.chef
これにより、ディレクトリ内の拡張子が .pem
のすべてのファイルが表示されます。
Chefワークステーションは通常、「cookbook」「cookbook」およびその他の構成ファイルを作成および編集するために使用され、ワークステーションでの何らかの形式のバージョン制御は非常に便利です。 ChefDKは、ワークステーションにGitコンポーネントをインストールし、Chefリポジトリリポジトリを作成するときにGitリポジトリを初期化します。その前に、GITでユーザー名と電子メールアドレスをグローバルに構成し、上記の手順で生成された新しいファイルを追加して送信する必要があります。
gitのユーザー名とメールアドレスをグローバルに設定します。実際の状況に応じて、次の値を変更してください。
git config --global user.name yourname
git config --global user.email [email protected]
.chef
ディレクトリを .gitignore
ファイルに追加します。
echo ".chef">.gitignore
既存のすべてのファイルを追加して送信します。
git add .
git commit -m "initial commit"
作業ディレクトリがクリーンであることを確認してください。
git status
次のように出力されます。
On branch master
nothing to commit, working directory clean
〜/ chef-repo / .chef
フォルダーに移動し、テキストエディターを使用して knife.rb
構成ファイルを作成します。
次のコードをknife.rbファイルにコピーします
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
node_name 'node_name'
client_key "USER.pem"
validation_client_name 'ORG_NAME-validator'
validation_key "ORGANIZATION-validator.pem"
chef_server_url 'https://example.com/organizations/ORG_NAME'
cache_type 'BasicFile'cache_options(:path =>"#{ENV['HOME']}/.chef/checksums")
cookbook_path ["#{current_dir}/../cookbooks"]
以下の対応する値を変更してください
node_name
をシェフサーバーで作成したユーザー名に変更します。
client_key
に対応する USER.pem
を、シェフサーバー上のユーザーが作成した USER.pem
に変更して、マッピング関係を確立します。
validation_client_name
に対応する ORG_NAME-validator
を ORG_NAME
に変更し、 -validator
でスプライシングします
validation_key
に対応する ORGANIZATION-validator.pem
を ORG_NAME
スプライシング-validator.pem
に変更します
最後に、 chef_server_url
を独自のサーバーの完全修飾ドメイン名に変更し、最後にユーザーグループの短い識別子 ORG
を追加します
chef-repoディレクトリに入り、必要なSSL証明書ファイルをサーバーからディレクトリにコピーします
cd ..
knife ssl fetch
注これらのSSL証明書は、Chefサーバーのインストール時に自動的に生成されます。明らかに、このタイプの証明書は自己署名されています。これは、サードパーティの署名証明書機関(CA)サービスを使用する必要がないことも意味します。ワークステーションがSSL証明書を取得して検証できるように、Chefサーバーのホスト名とFQDNは同じである必要があります。 Chefサーバーのホスト名とFQDNは、それぞれ
hostname
とhostname-f
を実行することで確認できます。 SSL証明書の再生成の詳細については、[Chef Documentation](https://docs.chef.io/server_security.html#regenerate-certificates)を参照してください。
クライアントでコマンド knife.rb
を実行して、クライアントが正しく構成されていることを確認してください。
knife client list
このコマンドは、バリデーター名を出力する必要があります。
サーバーとワークステーションを構成した後、ノードを起動できます。
クライアントノードの起動プロセス中に、Chefクライアントが自動的にインストールされ、ノードの有効性が検証されます。起動プロセス中に、ノードはChefサーバーから関連情報を読み取ることができます。将来的には、chefクライアントは必要に応じて関連する構成情報を変更することもできます。
ワークステーションから 〜/ chef-repo / .chef
ディレクトリにインポートします。
cd ~/chef-repo/.chef
クライアントノードのrootユーザーまたは昇格された特権を持つユーザーを使用して、クライアントノードをガイドします。
ノードルート権限を持つユーザーとして、必要に応じてルートパスワードとクライアントノードノード名の名前を変更してください。クライアントノードのデフォルトのホスト名を使用する場合は、クライアントノード名を変更するオプションを省略できます。
knife bootstrap 192.0.2.0-x root -P password --node-name nodename
sudo権限を持つユーザーとして、必要に応じてユーザー名ユーザー名、ユーザーパスワードパスワード、クライアントノードノード名の名前を変更してください。クライアントノードのデフォルトのホスト名を使用する場合は、クライアントノード名を変更するオプションを省略できます。
knife bootstrap 192.0.2.0-x username -P password --sudo --node-name nodename
キーペア認証権限を持つユーザーとして、必要に応じてホストユーザー名usernameとクライアントノード名nodenameを変更してください。クライアントノードのデフォルトのホスト名を使用する場合は、クライアントノード名を変更するオプションを省略できます。
knife bootstrap 192.0.2.0--ssh-user username --sudo --identity-file ~/.ssh/id_rsa.pub --node-name hostname
クライアントノードを一覧表示して、ノードがすべて起動されていることを確認します。
knife client list
リストには、最新のクライアントがすべて含まれている必要があります。
Chefサービスを使用する場合は、Chefクライアントをノードで定期的に実行し、すべての構成変更をChef中央サーバーにプッシュする必要があります。セキュリティ上の理由から、ノードの起動時にノードクライアントがChefサーバーにアップロードした検証ファイル validation.pem
も削除する必要があります。これらの手順は手動で実行できますが、「レシピ」として設定した後の方が簡単で効率的です。
コンテンツのこの部分はオプションです。ワークステーションに「レシピ」をダウンロードする方法と、サーバーにプッシュする方法についてのみ説明します。コンテンツのこの部分には、拡張可能でテスト可能な基本的な「レシピ」フレームワークの両方が含まれます。
ワークステーションから 〜/ chef-repo / .chef
ディレクトリに入力*します。
cd ~/chef-repo/.chef
クックブックとその依存関係をダウンロードします。
knife cookbook site install cron-delvalidate
default.rbファイルを開いて、デフォルトのクックブック「レシピ」を確認します。
#
# Cookbook Name:: cron-delvalidate
# Recipe:: Chef-Client Cron & Delete Validation.pem
#
#
cron "clientrun"do
minute '0'
hour '*/1'
command "/usr/bin/chef-client"
action :create
end
file "/etc/chef/validation.pem"do
action :delete
end
cron "clientrun" do
はタイミング操作を定義します。これは、毎時( * / 1
は毎日午前1時ではなく毎時を意味します)を意味し、chef-client(/ usr / bin / chef-client)
コマンドを使用して、アクションに対応する作成識別子を使用して新しいスケジュール済みジョブを作成します。
`" 「/etc/chef/validation.pem」ファイルは「validation.pem」ファイルによって呼び出されます。条件が満たされると、対応する操作「deletecommand」が実行されてファイルが削除されます。
Rubyでは、これらは2つの非常に基本的な操作です。Chefの「調理マニュアル」クックブックを作成するときに、最も基本的なコード構造の例が提供されます。これらのサンプルコードは、必要に応じて編集および拡張できます。
ノードの実行リストにレシピを追加し、 nodename
をノードの名前に置き換えます。
knife node run_list add nodename 'recipecron-delvalidate::default'
レシピクックブックをChefサーバーにプッシュします。
knife cookbook upload cron-delvalidate
このコマンドは、クックブックを更新するときにも使用されます。
セルフチェック(サーバーのクックブックを自動的にプルする)クライアントノードに切り替えて、最初の chef-client
コマンドを実行します。
chef-client
このコマンドをroot以外のユーザーとして実行する場合は、コマンドの前に sudo
を追加してください。
リスト内のレシピクックブックが実行されると、ノードは対応するプログラムをサーバーからプルして実行します。この場合、この種のレシピには通常、 cron-delvalidate
タイミングジョブが含まれています。このようにして、サーバーからプルされたレシピが完全に生成されることが保証され、Chefサイトとノードが変更された構成をChefサーバーにプッシュでき、情報がノードリストに同期され、各ノードとワークステーションが1時間ごとに自動的にプルします。クックブック「クッキングマニュアル」を独自のノードに。この自動化された手順により、将来ノードに接続するときにクライアントの操作を手動で変更する必要がなくなります。
Recommended Posts