シェフのベストプラクティス/質問


48

私はパペットを使用しています。私は新しい会社に移り、シェフを採用しています。だから私はシェフを学ぼうとしていますが、まだPuppetで考える=)

これらは私の質問です:

  • Ruby DSL、JSON、または管理コンソールからロールをセットアップする方が良いでしょうか?同じことをする複数の方法があるのはなぜですか?
  • クックブックをサブディレクトリに整理できますか?例:クックブックを作成してそれを使いたいカスタムソフトウェアがあります:chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbookこれは良い習慣でしょうか?
  • 役割の種類ごとに、その役割を指定するクックブックを作成しますか?これらのクックブックには他のクックブックが含まれていますか(つまり、Webサーバーロールのクックブックにはapacheクックブックが含まれています)。クックブックの相互依存関係と継承がどのように処理されるかわかりません。
  • Puppetの外部ノード分類子のようなものがあり、ノードが自動的にロールを決定しますか?
  • ナイフまたは管理コンソール内で物事を構成できるように思われますか、JSONファイルを編集しますか?これは、物事を行う方法が非常に多い理由を私に非常に混乱させています、それは麻痺しています!どちらかを使用する理由はありますか?人形から来ると、これらのツールで何かを誤って設定するのは簡単だと思われます(つまり、何かを除外します)
  • 開発クラスターでChefを使用してノードを自動的にプロビジョニングするにはどうすればよいですか?Puppetを使用して、puppermasterに接続してpuppetの実行を開始し、それ自体をセットアップするVMを起動します(役割は外部ノード分類子によって決定されます)。Chefでこれを行うにはどうすればよいですか?chefサーバーに結び付けるpem / rbファイルを使用してchefをインストールし、ナイフでノードの役割を手動で指示するか、管理インターフェースでこれを編集してから、chef-clientの実行を開始してセットアップしますか?

入門チュートリアルを完了し、EC2チュートリアルがあることを確認しましたが、EC2を使用したことがないため、従うのが難しいです。この時点で、Chefの実行をホストし、単一ノードの構成をいじり始めています。ここからどこに行きますか?パブリッククックブックを見る必要がありますか?

Opscodeのドキュメントは大丈夫ですが、Puppetのドキュメントほどではありません。検索で不足している可能性のある他の優れたシェフリソースはありますか?


5
1つの投稿で質問が多すぎます。それぞれを独自のものに分割することを検討してください。コミュニティ全体にとっては良いことであり、また、より良い、より詳細な答えが得られます。
ウェズリー

回答:


84

編集この質問と回答は何年も前のものです。決定的なベストプラクティスは、Chef Software、Incが作成したLearn Chef Rallyセルフペーストレーニングモジュールを介して教えられます。元の答えの大部分は以下のとおりです。

この回答では、「Chef」または「chef-client」は通常、製品であるChef Infraを指します。Opscode は2013年にChef Software、Incに名前が変更されました20194月、Chefはすべての製品のソースコード公開し、一貫したブランド名を作成しました。

ruby DSL、JSON、または管理コンソールからロールを設定する方が良いかどうか不明ですか?同じことをする複数の方法があるのはなぜですか?

2019 Update:Policyfilesは、使用するのに最適なワークフローです。役割は劣った慣行であると考えられており、Chef Software、Inc.はPolicyfilesへの移行を推奨しています。

人々は異なるワークフローを持っているため、同じことを行うには複数の方法があります。環境に最適なワークフローを選択します。情報に基づいた意思決定を行えるように、違いを説明しましょう。

ロールのRuby DSLは、JSONの構文を知らなくてもロールを簡単に記述できるようにするために存在します。これは、ロールを開始する簡単な方法です。変更を行ったら、ナイフでそれらをChef Serverにアップロードします。

knife role from file myrole.rb

これにより、ロールがJSONに変換され、サーバーに保存されます。役割が真実のソースとして存在するChefリポジトリを実施する環境がある場合、これは非常にうまく機能します。

JSONはChef Serverが保存するものなので、管理コンソールでJSONを直接編集することもできます。Knifeがアップロードするために適切に認識するためには、Ruby DSLよりも多くのフィールドが必要です。これらの詳細は、Web UIを介してある程度隠されています。

ロールを編集するためにwebui / managementコンソールを使用することの欠点は、サーバーからダウンロードしない限り、ローカルバージョン管理システムにないことです。あなたはナイフでこれを行うことができます:

knife role show myrole -Fj

-Fj「JSON形式で表示。」にナイフを伝えます 必要に応じて、出力を.jsonファイルにリダイレクトできます。

年前の更新:ローカルchefリポジトリ内のファイルを操作するための追加のknifeコマンドがあります。現在、これらのコマンドはJSON形式のファイルのみをサポートしています。これらのプラグインに対するRuby DSLのサポートの追加に対応するコミュニティRFCが公開されています。ワークフローの概要は次のとおりです。

サーバーとローカルファイルのコンテンツの違いを確認します。

knife diff roles/myrole.json

JSON形式の役割ファイルをアップロードします。roles/パスが必要です。これは、サーバー上の同じAPIエンドポイントにマップされます。

knife upload roles/myrole.json

リポジトリ内のファイルのコンテンツを上書きするサーバーからコンテンツをダウンロードします。

knife download roles/myrole.json

これらのコマンドknife-essentialsは、chefクライアントパッケージに組み込まれているから取得されます。

クックブックをサブディレクトリに整理できますか?たとえば、クックブックを作成してそれを使いたいカスタムソフトウェアがあります:chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbookこれは良い習慣でしょうか?

いいえ。ナイフはAPIを使用してクックブックをサーバーにアップロードするため、クックブックがどこにあるべきかを期待しています。これはknife.rbwithで設定されcookbook_pathます。Chef Infraの古いバージョンでは、クックブックのパスの配列を指定できましたが、メンテナンスが必要でユーザーを混乱させるため、これは非推奨です。

慣例により、クックブックのディレクトリにプレフィックスを付けた名前で、顧客固有またはサイト固有のクックブックに名前を付けます。たとえば、次のようになります。

chef-repo/cookbooks/ourcompany_customsoftware

あなたがしていることに応じて、「当社」のための複数の異なる料理本があるかもしれません。

詳細なリファレンス:

役割の種類ごとに、その役割を指定するクックブックを作成しますか?これらのクックブックに他のクックブックが含まれていますか(つまり、Webサーバーロールのクックブックにはapacheクックブックが含まれています)。クックブックの相互依存関係と継承がどのように処理されるかわかりません。

ロールとクックブックの間に直接的な関係や依存関係はありません。

役割には実行リストがあり、そのリストは、その役割を持つノードに適用されるレシピと他の役割を指定します。ノードには、ロールまたはレシピを含むことができる実行リストがあります。ノードでChefが実行されると、Chefは含まれるすべてのロールとレシピの実行リストを展開し、必要なクックブックをダウンロードします。ノード実行リストで:

recipe[apache2]

Chefは、apache2このレシピを適用できるように、ノードのクックブックをダウンロードします。

インフラストラクチャ内のロールに固有のクックブックがある場合があります。より一般的には、apache2、mysql、redis、haproxyなどの特定のタイプのサービスを設定するためのクックブックがあります。その後、それらを適切なロールに配置します。ロールを実現するために必要なカスタムアプリケーション固有のものがある場合は、これをカスタムクックブックに書き込むことができます(上記で参照したように)。

詳細なリファレンス:

puppets外部ノード分類子のようなものがあり、ノードがその役割を自動的に決定しますか

"はい。" Chef Infra Serverはノードデータストレージ(JSON)を自動的に実行し、サーバーはすべてのノードデータを検索用に自動的にインデックス化します。

詳細なリファレンス:

ナイフまたは管理コンソール内で物事を構成できるように思われますか、JSONファイルを編集しますか?これは、物事を行う方法が非常に多い理由を私に非常に混乱させています、それは麻痺しています!どちらかを使用する理由はありますか?

Chef Infra Serverには、JSON応答を送受信するRESTful APIがあります。ナイフと管理コンソールは、管理の観点からAPIと対話するためのユーザーインターフェイスです。

管理コンソールにはナイフほど多くの機能はありませんが、好みのツールを使用できます。Chef Infraを使用するほとんどの人は、WindowsでChef Infraを使用している人でさえ、それが提供するパワーと柔軟性のためにコマンドラインインターフェイスを好みます。さらに、knife新しいプラグインを作成してChef Infra Serverまたはインフラストラクチャの他の部分とやり取りできるプラグインベースのツールです。

Chef Infraは、ライブラリ、プリミティブ、およびAPIのセットです。インフラストラクチャに最適な構成管理システムを柔軟に構築できます。

参考文献:

開発クラスターでchefを使用してノードを自動的にプロビジョニングするにはどうすればよいですか?puppetを使用して、puppermatserに接続し、パペットの実行を開始してそれ自体をセットアップするVMを起動します(役割は外部ノード分類子によって決定されます)。シェフでこれを行うにはどうすればよいですか?-chemサーバーに結び付けるpem / rbファイルを使用してchefをインストールし、ナイフでノードの役割を手動で指示するか、管理インターフェースでこれを編集してから、chef-clientの実行を開始してセットアップしますか?

knife bootstrapプラグインを使用する必要があります。これは、ナイフに付属の組み込みプラグインです。次のように呼び出します。

knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'

この意志:

  • SSH rootキーを使用するユーザーとしてターゲットシステム(10.1.1.112)にSSHで接続します(別のユーザーとしてsshしてからを使用できます--sudo)。
  • Rubyをインストールする
  • Chefをインストールする
  • ナイフの構成(.chef / knife.rb)を読み取り、ChefサーバーのChef構成ファイルを作成します。
  • ノードがChef Serverに自動的に登録するために使用する「検証」RSA秘密鍵をコピーします。
  • chef-client指定されたリストにあるコンマ区切りの実行を使用して実行します。この例では、webserver役割のみが適用されます。

これは、ターゲットシステムがプロビジョニングされ、IPアドレスがあり、ルートとしてSSHできることを前提としています。ローカルポリシーとプロビジョニングプロセスによっては、この仕組みを調整する必要がある場合があります。Wikiのナイフブートストラップページには、この仕組みの詳細が記載されています。

ナイフには、Amazon EC2やRackspace Cloudなど、多くのパブリッククラウドコンピューティングプロバイダー用のプラグインもあります。EucalyptusやOpenStackなどのプライベートクラウド環境で使用できるプラグインがあります。VMware、Vsphereなどのプラグインもあります。詳細については、ドキュメントをご覧ください。

参考文献:

検索で見つからない可能性のある他の優れたシェフリソースはありますか?

シェフのドキュメントドキュメントの主な源。

学びシェフラリーあなたがシェフインフラのさまざまな側面、および他のシェフの製品についてすべてを学ぶことができるというセルフガイドモジュールのシリーズです。

以前、私はChef Infraに関するヒント、コツ、ガイドを投稿したブログを維持していました:http : //jtimberman.housepub.org/。「クイックヒント」というシリーズがありました。実生活の状況やその他のコミットメントのため、サイトを維持する時間はもうありませんが、将来はサイトに戻る可能性があります。

Chefのお客様は、サポートサイトでヘルプとサポートを受けることができます。

Chefユーザーコミュニティは、追加ヘルプの優れた情報源です。

追加のリソースは、Chef Software、Inc.のWebサイトで入手できます。

これがお役に立てば幸いです。


2
これは貴重なリソースです。頻繁にリンクしてください。
プーヤンホスラビ

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