chef-soloではなくchef-serverを実行する利点は何ですか?


33

私は自分のチームの自動展開ソリューションを検討しており、過去数日間Chefで遊んでいます。chef-soloを使用して、ベースのRed Hat VMから実行するシンプルなWebアプリを取得できました。

最終的な目標は、Chef(または別のシステム)を使用して、ビルドを実行するときにクラウドにアプリケーショントポロジを自動的に展開することです。プロセスは基本的に次のように実行されます。

  1. Webアプリのコード、依存関係、およびシェフクックブックはSCMに保存されます
  2. ビルドが実行され、イメージを取得してテストするための単一のパッケージが作成されます
  3. 次に、ビルドエンジンは、シェフクライアントを実行してパッケージをインストールする新しいクラウドイメージをデプロイします。
  4. イメージは、SCMまたはChefサーバーからクックブックを取得し、すべてをインストールして起動して実行します

Chef Serverを実行するための利点や使用例は何ですか?

chef-soloを使用し、SCMからクックブックをプルするスクリプトを使用する場合と比べて、Chef ServerがSCMからクックブックを保持して取得することには大きな利点がありますか?

回答:


67

質問が「シェフソロの利点は何か」であるかのように、この答えの方向を決めます。なぜなら、それがアプローチ間の違いをカバーするための最良の方法だからです。

私の要約の推奨事項は、他の人と一致しています。ノードを頻繁に追加および削除する動的な仮想化環境を管理する必要がある場合は、chef-serverを使用します。chefサーバーも必要な場合、優れたCMDBです。ノードがあまり頻繁に変更されず、ロールとレシピが変更される、あまり動的ではない環境がある場合は、chef-soloを使用します。環境のサイズと複雑さは、大体無関係です。どちらのアプローチも非常にうまく拡張できます。

chef-soloをデプロイする場合、rsync、「git pull」、またはその他のdem等ファイル転送メカニズムを備えたcronjobを使用して、各ノードでchefリポジトリの完全なコピーを維持します。cronjobは、(a)まったく実行しない、(b)実行するが、ローカルリポジトリを同期しないように簡単に構成できる必要があります。各ノードのjsonファイルを使用して、chefリポジトリにnodes /ディレクトリを追加します。cronジョブは、適切なノードファイルを識別するという点で、望みどおりに洗練することができます(ただし、$(hostname -s).jsonを推奨します。ナイフを使用してコミュニティクックブックをダウンロードし、スケルトンを作成できる以外に理由はありません。

このアプローチには、明らかな「サーバーを管理する必要がない」ことに加えて、いくつかの利点があります。ソース管理はすべての構成変更の最終的な調停者になり、リポジトリにはすべてのノードとランリストが含まれ、各サーバーは完全に独立しているため、便利なテストシナリオが容易になります。

Chef-serverは、「ナイフアップロード」を使用してクックブックを更新するホールを導入します。このホールに自分でパッチを適用する必要があります(ポストコミットフックなど)。 sラップトップの古いローカルリポジトリからの古いレシピ。すべての変更がマスターリポジトリからサーバーに直接同期されるため、chef-soloでこれが発生する可能性は低くなります。ここでの問題は、規律と協力者の数です。あなたがソロ開発者または非常に小さなチームの場合、APIを介してクックブックをアップロードすることはそれほど危険ではありません。大規模なチームでは、適切なコントロールを適切に配置しない場合があります。

さらに、chef-soloを使用すると、すべてのノードのロール、カスタム属性、およびランリストをnode.jsonファイルとしてメインchefリポジトリに保存できます。chef-serverでは、APIを使用してロールとランリストがオンザフライで変更されます。chef-soloを使用すると、リビジョン管理でこの情報を追跡できます。これは、静的環境と動的環境の競合が明確に見られる場所です。ノードのリスト(どれだけ長くても)が頻繁に変更されない場合、このデータをリビジョン管理に入れると非常に便利です。一方、頻繁に新しいノードを作成し、古いノードを破棄する場合(ホスト名やfqdnを再度表示することはありません)、すべてをリビジョン管理に維持するのは不必要な面倒な作業であり、変更を行うAPIがあれば非常に便利です。Chef-serverには、ノードを識別するデフォルトの方法としてfqdnを置き換えることができる「knife bootstrap」の名前オプションなど、動的なクラウド環境の管理に向けた機能全体が備わっています。しかし、静的な環境では、これらの機能は、特に他のすべての機能でリビジョン管理のロールとランリストを持つことに比べて、価値が限られています。

最後に、追加の作業をほとんど行わずに、レシピテスト環境をオンザフライで設定できます。サーバーで実行されているcronjobsを無効にし、ローカルリポジトリに直接変更を加えることができます。chef-soloを実行して変更をテストすると、サーバーが本番環境でどのように設定されるかを正確に確認できます。すべてをテストしたら、変更をチェックインして、ローカルcronjobを再度有効にすることができます。ただし、レシピを作成する場合、「検索」APIを使用することはできません。つまり、動的なレシピ(ロードバランサーなど)を作成する場合、この制限を回避し、jsonファイルからデータを収集する必要があります。 nodes /ディレクトリ。これは利便性が低く、完全なCMDBで利用可能なデータの一部が不足している可能性があります。繰り返しますが、より動的な環境ではデータベース駆動型のアプローチが好まれ、ローカルディスク上のjsonファイルを使用すると、動的性の低い環境でも問題ありません。chefの実行が中央データベースに対してAPI呼び出しを行う必要があるサーバー環境では、そのデータベース内のすべてのテスト環境の管理に依存します。

最後は緊急時にも使用できます。本番サーバーで重大な問題をトラブルシューティングし、構成を変更して解決する場合、サーバーのリポジトリですぐに変更を加えてから、マスターにアップストリームにプッシュできます。

これらがシェフソロの主な利点です。サーバーを管理したり、ホストされているシェフにお金を払ったりする必要がないなど、他にもいくつかありますが、それらは比較的小さな懸念です。

要約すると:動的で高度に仮想化されている場合、chef-serverは多くの優れた機能(他の場所で説明)を提供し、chef-soloの利点のほとんどは目立たなくなります。しかし、特に従来の環境では、シェフソロには明確で、しばしば言及されていない利点がいくつかあります。クラウドにデプロイされているからといって、必ずしも動的な環境があるとは限らないことに注意してください。たとえば、ソフトウェアの新しいバージョンをリリースせずにシステムにノードを追加できない場合、おそらく動的ではありません。最後に、高レベルの観点から、CMDBは、チーム間のアカウンティングや情報共有など、システム管理と構成に正接的に関連する多くの事柄に役立ちます。chef-serverを使用することは、その機能だけで価値があります。


chef-soloを使用して機密データ(秘密鍵/パスワード)をどのように保存/配布しますか?平文として保存せずにリビジョン管理で追跡するにはどうすればよいですか?
リンボー鵬

@LimboPeng Chefリポジトリに暗号化されたデータバッグを保存できます。ただし、暗号化キーは外部に保存する必要があります。
ウィリーウィーラー14年

27

開示:Opscodeで働いています。

Soloに対するChef Serverの主な利点は、インフラストラクチャで検索を使用できることです。典型的な例は、Webサーバーを備えたロードバランサーです。ロードバランサは、Webサーバーを検索するだけで、インフラストラクチャにWebサーバーが追加および削除されると、構成を自動的に更新できます。Soloは単一のマシンであり、Chef Serverは「4ギガバイト以上のRAMを持つすべてのマシン」や「データベースマスター」などのクエリを実行できます。

Chef Serverでは、tarballをコピーすることなくインフラストラクチャを管理したり、インフラストラクチャを管理コンソールで視覚化したり、環境でどのバージョンのクックブックを実行しているマシンを管理したりすることができます。他にも利点がありますが、それらは私の頭の上のものです。インストールせずにChef Serverを試してみたい場合は、Opscode Hosted Chefアカウントにサインアップするだけで、最初の5つのノードは無料です。


1
mrayに感謝します。その情報はTONに役立ちます。Chefサーバーを使用するときに、DevOpsの哲学をどのように受け入れるかを知っていますか?つまり、すべてのクックブックをSCMで公開するということです。新しいコードを配信するときにChefサーバーに最新のクックブックを取得させる簡単な方法はありますか?
linusthe3rd

2
@ strife25あなたは間違いなくあなたの料理本をバージョン管理システムに入れるべきです。もしあなたがそれに甘んじていなければ、OpscodeはGitを推奨します。分散したチームのためにブランチやロックを簡単に操作できるからです。クックブックをChefサーバーにアップロードするコミット後フックを作成できます。API経由でクックブックをアップロードするため、Chefサーバーでクックブックを複製するだけではありません。これは、意図的に非常に意図的なものです。
jtimberman

1

chef-serverは、ノードのクックブックと構成データを管理します。

knifeツールを使用してクックブックをchef-serverに追加し、各ノードにレシピの実行リストを与えて、chef-clientを使用してノード自体をセットアップするときに必要なクックブックを取得します。chef-clientはバックグラウンドで実行されるため、ノードはchef-serverに更新されたクックブックがあるかどうかを定期的にチェックします。

chef-serverは構成データと変数も保持するため、ノードの設定を変更して自動的に取得することができます。これは、レシピにハードコーディングすべきでない、またはハードコーディングできない、より動的な設定に適しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.