序章


構成管理ツールは、集中管理サーバーからさまざまなクライアントコンピューターに一貫性のある予測可能なコードと構成を展開するための手段を提供します。 Chef は、最も人気のある構成管理ツールの1つです。 Rubyを使用し、レシピと呼ばれるものに詳細をパックすることで構成を処理します。

Chefは、単一のアプリケーションだけでなく、環境全体を迅速にデプロイする方法を提供します。 ソフトウェアをインストールしてからその構成ファイルを変更する状況では、Chefを使用してこのプロセスを自動化できます。

このガイドでは、Chefがファイルを整理する方法と、Chefが目的を達成するために使用するツールとシステムの概要を説明します。

フォローしたい場合は、 Ubuntu14.04にChef12をインストールする方法に関するチュートリアルがここにあります。

シェフの用語


Chefを構成するさまざまなコンポーネントを理解することが重要です。

シェフのオペレーティングインフラストラクチャ

まず、高レベルの展開戦略を構成するさまざまなモデルについて説明します。

Chefシステムは、デプロイメントプロセスで各マシンまたはリソースが果たす役割によって定義されます。

  • Chef Server :これは、構成レシピ、クックブック、およびノードとワークステーションの定義を格納する中央の場所です。 これは、組織内の他のすべてのマシンが展開構成に使用する中央マシンです。

  • Chefノード:Chefノードは、Chefによって構成されるデプロイメントターゲットです。 各ノードは、物理ハードウェア上または仮想化可能な個別の封じ込められたマシン環境を表します。

    これらのオペレーティングシステム環境にはそれぞれ、ChefServerと通信できるChefクライアントアプリケーションが含まれています。

  • Chefワークステーション:Chefワークステーションは、Chef構成の詳細が作成または編集される場所です。 次に、構成ファイルはChefサーバーにプッシュされ、そこで任意のノードにデプロイできるようになります。

これらのさまざまなコンポーネントの構成により、複数のワークステーションとノードを使用できます。 ノードは、オンラインになってサーバーに接続されるとすぐに構成できます。

上記の概要は、これらが別個のエンティティであるという印象を与えますが、1台のマシンがこれらの役割の2つまたはすべてを果たすことは可能です。 chef-solo というプロジェクトがあり、サーバーを使用せずに、サーバーがインストールされているコンピューターを構成することで操作できます。

サーバーの詳細


サーバーは、クライアントまたはマネージャーとして、他のすべてのシェフマシンからアクセスされる中央制御ポイントです。 これは基本的に、すべての構成の詳細の大規模なリポジトリまたはデータベースです。

ノードとワークステーションからの接続とアクセス許可を処理し、クライアントが簡単にプルできるようにデータを整理します。 サーバーには、詳細を管理または構成するためのWebインターフェイスを含めることもできます。

ノードの詳細


上記のように、ノードは物理マシンまたは仮想マシンにすることができます。 その唯一の要件は、ネットワークにアクセスでき、chefサーバーと通信できることです。 chefソフトウェアを実行しているユーザーは、ソフトウェアをインストールしてシステムを変更できる必要もあります。

各ノードは、chef-clientと呼ばれるアプリケーションを使用して中央サーバーと通信します。 これは、サーバーからのデータのプルと、ノードを最終状態にするために必要な構成手順の実行を処理します。 chef-clientプログラムとchefサーバーは、RSAキーベースの認証を使用して通信します。

Chef-clientは、ohaiというツールを使用してノードに関する統計を取得します。 これらは、特定の構成の詳細を設定し、ファイルに含まれる変数を設定するために使用されます。

ワークステーションの詳細


ワークステーションには、使用可能なノードの構成の詳細を作成および変更するために必要なツールがあり、chefサーバーと通信してこれらを使用可能にすることができます。

ワークステーションでシェフを管理するための重要なツールは、ナイフと呼ばれます。 Knifeは、サーバーに保存されるものをすべて構成できるゲートウェイとして機能します。 ノードと構成を管理でき、通常、「シェフ固有」の方法でサーバーにアクセスするために使用できます。 SSHを使用してサーバーにログインし、サーバーが手動で処理するすべてのデータに変更を加えることは可能ですが、これはchefが実装するプロセスに実際には準拠していません。

ワークステーションで作成および変更された構成と定義は、バージョン管理にコミットされてからサーバーにプッシュされます。 リポジトリはchef-repoと呼ばれます。 これは、chefの構成に必要なすべてのデータを保持します。

ChefRepoのファイル構造


Chefは、指定されたディレクトリ構造内のワークステーションで構成および依存関係情報を処理します。 レシピを効果的に作成し、変更をプッシュするには、この階層を理解することが重要です。

前述のように、サーバー構成ファイルは、「chef-repo」と呼ばれるリポジトリのバージョン管理に保持する必要があります。 これは、chefファイルを含む通常のディレクトリです。

このディレクトリには、次のような構造があります。

  • certificates / :認証のためにクライアントに関連付けることができるSSL証明書が含まれています。

  • chefignore :サーバーへのプッシュに含めるべきではない構造内のファイルとディレクトリを一覧表示します。

  • config / :2つのリポジトリ構成ファイルのいずれかが含まれています

    • rake.rb :SSL証明書を作成するためのいくつかの変数宣言といくつかの一般的なオプションを定義します。
  • クックブック/:組織のインフラストラクチャを構成するクックブックが含まれています。

  • data_bags / :構成用のさまざまなデータバッグが含まれています。

    データバッグは、機密性の高い構成の詳細を含む保護されたサブディレクトリです。 これらは、一致するSSL証明書を持ち、構成の詳細を含むJSON形式のファイルを含むノードにのみアクセスできます。

  • environment / :環境を展開するための詳細を含む最上位の場所が含まれています。

    デフォルト環境から逸脱するすべての環境は、このディレクトリで定義する必要があります。

  • Rakefile :このファイルは、chefがその構成で実行できるタスクを定義します。

  • roles / :ノードに割り当てることができるロールを定義するファイルが含まれています。

シェフクックブックのファイル構造


chef-repoのcookbooksディレクトリ内で、サブディレクトリはアプリケーションの特定のクックブックを定義します。 それぞれの個別のアプリケーション構成ディレクトリ内には、このサービスのインストール方法と、サービスを正しく機能させるために行う必要のある変更を定義する構造があります。

アプリケーション内には、アプリケーションのインストール方法と構成方法を定義するファイルと定義があります。

metadata.rbまたはmetadata.jsonファイルには、サービスに関するメタデータ情報が含まれています。 これには、クックブックの名前やバージョンなどの基本情報が含まれますが、依存関係情報が保存される場所でもあります。 このクックブックがインストールされる他のクックブックに依存している場合、このクックブックをこのファイルにリストすることができ、シェフは現在のクックブックの前にそれらをインストールして構成します。

attributes ディレクトリには、このサービスを提供するノードの設定を上書きまたは定義するために使用できる属性定義が含まれています。

definitions ディレクトリには、リソースを宣言するファイルが含まれています。 これは、機能を1つの見出しの下にグループ化できることを意味します。

files ディレクトリは、chefがこのクックブックがデプロイされているノード全体にファイルを配布する方法を説明しています。

recipes ディレクトリには、サービスの構成方法を定義する「レシピ」が含まれています。 レシピは通常、大規模なシステムの特定の側面を構成する小さなファイルです。 クックブックを使用してWebサーバーをインストールおよび構成する場合、レシピによってモジュールが有効になるか、適切なファイアウォールのデフォルトが設定される場合があります。

templates ディレクトリは、より複雑な構成管理を提供するために使用されます。 埋め込まれたRubyコマンドを含む構成ファイル全体を提供できます。 印刷される変数は、他のファイルで定義できます。

結論


このガイドは、独自のChef構成の作成を開始するのに役立たない場合がありますが、複雑なデプロイメント環境での個々のコンポーネントの概要を説明する必要があります。 ノード、サーバー、ワークステーションの相互作用がどのように機能するかを理解し始め、chef-repoを回避する方法を見つけることができたら、利用可能なクックブックのいくつかがどのように動作するかを理解し始めることができます。

次のaricleでは、Ubuntu14.04サーバーでChef12をセットアップする方法について説明します。 後で、独自のクックブックを作成する方法と、ネットワーク内の他のマシンに展開できる環境を構成する方法についても説明します。

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