Puppet Enterprise 2017.2

Puppetは一般的に、完全なシステム構成を構築するために使用されます。一定のシステム上で、すべてのソフトウェア、サービス、および重要なシステムを管理します。

特にシステム構成の構築は、管理対象のシステムが複雑な場合は困難が伴うことがあります。 その複雑さを抑えるため、再利用可能で設定しやすく、リファクタリングも容易に行えるコードを記述する必要があります。

ロールとプロファイル手法は、再利用、設定、リファクタリングが可能なシステム構成を最も確実に構築できる方法です。 しかし、これは決して単純な手段ではありません。インフラとチームの性質について熟考する必要があります。 また、これは最終的な状態でもありません。設定は時間をかけて調整していきます。 むしろ、インフラのインターフェースを設計するためのアプローチであると言えます。付帯的な複雑さを抑制し、重大な複雑さを明らかにして、データが予測可能な動作をするようにします。

ロールおよびプロファイル手法の概要

ロールとプロファイルは、ノード分類子とコンポーネントモジュール間にある、2つの追加的な間接レイヤです。 これにより、コードが次の3つのレベルに分けられます。

  • コンポーネントモジュール: 特定のテクノロジを管理する通常のモジュール(例: puppetlabs/apache)。
  • プロファイル: 複数のコンポーネントモジュールを使用し、レイヤ化されたテクノロジスタックを構成するラッパークラス。
  • ロール: 複数のプロファイルを使用し、完全なシステム構成を構築するラッパークラス。

これら2つの追加的な間接レイヤにより複雑さが増すように見えますが、実際には、非常に重要な設定に対して、実用的かつビジネスに特化したインターフェースを構築するスペースが与えられます。 優れたインターフェースがあれば、階層データが使いやすく、システム設定が読みやすく、リファクタリングが行いやすくなります。

Diagram: NC assigns one role to group of nodes; role declares several profiles; profiles declare resources and classes from component modules, as well as core resources and other profiles.</p> <p class=">

簡単に言うと、上から下に次のように行われます。

  • ノード分類子が、1つのロールクラスをノードのグループに割り当てます。ロールはシステム構成全体を管理するため、他のクラスは必要ありません。NCは、どのような方法であれロールを設定しません。
  • そのロールクラスは、includeを使用してプロファイルを宣言し、他のことは何も行いません。 例えば以下のようなものです。

    class role::jenkins::master {
      include profile::base
      include profile::server
      include profile::jenkins::master
    }
    
  • 各プロファイルは、複数のコンポーネントモジュールと内蔵のリソースタイプを使用し、レイヤ化されたテクノロジスタックを設定します(図では、profile::jenkins::masterはrtyler/jenkins、puppetlabs/apt、自作のバックアップモジュール、packageおよびfileリソースを使用します)。
  • プロファイルはHieraまたはPuppetルックアップから設定データを取り出します(図では、3つの異なる階層レベルがデータに寄与します)。
  • コンポーネントモジュールのクラスは常にプロファイル経由で宣言され、ノードには直接割り当てられません。
    • コンポーネントクラスにパラメータがある場合、プロファイルで指定します。HieraまたはPuppetルックアップを使用し、コンポーネントクラスパラメータをオーバーライドしないでください。

ロールとプロファイルを使用せずに構成を構築する

ロールとプロファイルがない場合、システム構成は一般的にノード分類子かmainマニフェストで構築されます。面倒な継承の問題については、Hieraを使用します。 標準的なアプローチとしては、類似ノードのグループを作成し、そのグループに対してクラスを割り当ててから、子グループを作成します。このとき、他にニーズがあるノードに対しては、クラスを余分に追加します。 もう1つの一般的なパターンとしては、インフラのすべてのバリエーションを反映する非常に大きな階層を使用して、すべてをHieraに格納するという方法もあります。

これが可能であれば問題ありません。 その場合はロールやプロファイルは必要ありません。 しかし、時間が経つにつれて直接的な構築はわかりづらく、かつメンテナンスも困難になることがほとんどです。

次の手順

ロールとプロファイルの手法がわかったところで、 適度に簡略化されたワークフローの例でその使い方を学びます。

Back to top