初心者向けのパペットチュートリアル: パペットとは何ですか?使用方法?

Puppet について学ぶ前に、次のことを理解しましょう。

構成管理とは

構成管理は、ソフトウェアおよびコンピュータ システム (サーバー、ストレージ、ネットワークなど) を既知の望ましい一貫した状態に維持するプロセスです。 また、プロジェクト管理や監査の目的で、システム状態の正確な履歴記録にアクセスできるようになります。

システム管理者は主に、サーバーのインストールやサーバーの構成などの反復的なタスクを実行します。これらの専門家は、スクリプトを作成することでこのタスクを自動化できます。

しかし、大規模なインフラストラクチャに取り組んでいる場合、それは困難な作業です。 このような問題を解決するために、Puppet のような構成管理ツールが導入されました。

パペットとは何ですか?

人形 は、構成管理プロセスを一元化および自動化するためのシステム管理ツールです。 Puppet はソフトウェア展開ツールとしても使用されます。 これは、組織のインフラストラクチャ全体にわたるさまざまなアプリケーションやサービスのサーバー構成、管理、展開、およびオーケストレーションに広く使用されているオープンソースの構成管理ソフトウェアです。

Puppet は、Linux の構成を管理するために特別に設計されており、 Windows システム。 Ruby で書かれており、独自の機能を使用しています。 Dオマイン S特異的な Lシステム構成を記述する言語 (DSL)。

パペットのバージョンは何ですか?

Puppet には XNUMX つのバージョンがあります。

  • オープンソースのパペット: これは、オープンソース Puppet としても知られる Puppet 構成管理ツールの基本バージョンです。 Puppet の Web サイトから直接入手でき、Apache 2.0 システムに基づいてライセンスが付与されています。
  • パペットエンタープライズ: コンプライアンスレポート、オーケストレーション、ロールベースのアクセス制御、GUI、API、ノードを効果的に管理するためのコマンドラインツールなどの機能を提供する商用バージョン。

パペットって何ができるの?

たとえば、約 100 台のサーバーを備えたインフラストラクチャがあるとします。 システム管理者の役割は、これらすべてのサーバーが常に最新の状態にあり、完全な機能で実行されていることを確認することです。

システム管理者によるサーバーでの手動作業
システム管理者がサーバー上で手動で作業する

これを実現するには、Puppet を使用します。Puppet を使用すると、これらのサーバーに自動的にデプロイできる簡単なコードを記述できます。これにより、人的労力が軽減され、開発プロセスが迅速かつ効率的になります。

Puppet によるサーバー管理の自動化
Puppet はサーバー管理を自動化します

Puppet は次の機能を実行します。

  • Puppet を使用すると、ホストごとに個別の構成を定義できます。
  • このツールを使用すると、サーバーを継続的に監視して、必要な構成が存在するかどうか、変更されていないかを確認できます。 構成が変更されると、Puppet ツールはホスト上の事前定義された構成に戻ります。
  • また、構成されたすべてのシステムを制御できるため、一元的な変更が自動的に反映されます。
  • ソフトウェアをシステムに自動的に展開するため、展開ツールとしても使用されます。 それは、 ポリシーと構成はコードとして記述されるため、コードとしてのインフラストラクチャ。

Puppet DSL とプログラミング パラダイム

Puppet DSL を学ぶ前に、プログラミング パラダイムを理解しましょう。

プログラミング パラダイムは、コンピューター プログラミングで使用しているスタイルです。

パラダイムには次の XNUMX つのタイプがあります。

  • 命令。
  • 宣言的。
  • 関数型 (宣言型パラダイムのサブセットとみなされます)
  • オブジェクト指向。

命令型と宣言型に焦点を当てます。

命令的パラダイム

このプログラミング パラダイムは、計算のロジック (何を行うか) を表現し、その制御フロー (どのように行うか) を記述します。

例:

オフィスに行くと仮定して、タクシーを予約し、ドライバーにオフィスに到着するまで段階的に指示を出し始めます。 何をどのように行うかを指定するのは、命令型のスタイルです。

宣言的パラダイム

このプログラミング パラダイムは、制御フロー (どのように行うか) を記述せずに、計算のロジック (何を行うか) を表現します。

例:

オフィスに行く場合、Uber タクシーを予約し、最終目的地 (オフィス) を指定するとします。 何をどのように行うかではなく、何を行うかを指定するのは宣言型スタイルです。

パラダイム 何をすべきか 実行する方法
命令 あり あり
宣言的 あり いいえ

Puppet は宣言型プログラミング パラダイムを使用します

Puppet は宣言型プログラミング アプローチを使用します。

例: システム上にユーザーを作成します。

これは、シェル スクリプトによる命令型プログラミング パターンを使用して実行できます。ここでは、ユーザーの作成方法と、ユーザーで使用するコマンドを指定します。 オペレーティングシステム.

宣言的パラダイム

ただし、数行の Puppet コードを使用した宣言型プログラミング パターン、Puppet ドメイン固有言語 (DSL) を使用して実行しても、同じ結果を達成できます。

宣言的パラダイム

構成管理ツールの導入モデル

には XNUMX つの導入モデルがあります 構成管理ツール :

  • プッシュベースの導入モデル: マスター ノードによって開始されます。
  • プルベースの展開モデル: エージェントによって開始されます。

プッシュベースの導入モデル

この展開モデルでは、マスター サーバーが構成とソフトウェアを個々のエージェントにプッシュします。 安全な接続を確認した後、マスターはエージェント上でリモートからコマンドを実行します。 例えば、 Ansible そしてソルトスタック。

プルベースの導入モデル。

この展開モデルでは、個々のサーバーがマスター サーバーに接続し、安全な接続を確認して確立し、構成とソフトウェアをダウンロードして、それに応じて自身を構成します (Puppet や Chef など)。

パペットはどのように機能しますか?

Puppet はプル展開モデルに基づいており、エージェント ノードは毎回の実行後に定期的にチェックインします。 1800 マスター ノードで数秒待って、エージェント内で何か更新する必要があるかどうかを確認します。 何かを更新する必要がある場合、エージェントはマスターから必要なパペット コードを取得し、必要なアクションを実行します。

例を挙げて説明しましょう。

例: マスター – エージェントのセットアップ:

マスター

Puppet マスター ソフトウェアがインストールされた Linux ベースのマシン。 これは、Puppet コードの形式で構成を維持する責任を負います。 マスター ノードには Linux のみを使用できます。

エージェントたち

ターゲット マシンは、Puppet エージェント ソフトウェアがインストールされた Puppet によって管理されます。

エージェントは、Linuxや Windows or Solaris またはMac OS。

マスターとエージェント間の通信は、安全な証明書を通じて確立されます。

Puppet マスターエージェントの通信
Puppet マスターエージェントの通信

マスターとエージェント間の通信

ステップ1) エージェントとマスター間の接続が確立されると、Puppet エージェントは自身の状態に関するデータを Puppet マスター サーバーに送信します。これらはファクトと呼ばれます。この情報には、ホスト名、カーネルの詳細、IP アドレス、ファイル名の詳細などが含まれます。

マスターとエージェント間の通信
エージェントがファクトをマスターに送信

ステップ2) Puppet Master はこのデータを使用して、エージェントに適用する設定のリストを作成します。 エージェント上で実行されるこの構成リストは、 カタログ。 パッケージのインストール、アップグレードまたは削除、ファイル システムの作成、ユーザーの作成または削除、サーバーの再起動、IP 構成の変更などにより、変更される可能性があります。

マスターとエージェント間の通信
マスターがエージェントにカタログを送信します

ステップ3) エージェントはこの構成リストを使用して、必要な構成変更をノードに適用します。

構成にドリフトがない場合、エージェントは構成変更を実行せず、ノードを同じ構成で実行したままにします。

マスターとエージェント間の通信
エージェントは構成を適用します

ステップ4) それが完了すると、ノードは Puppet マスターに報告を返し、設定が適用され完了したことを示します。

パペットブロック

Puppet は、Puppet API を使用してレポートをサードパーティ ツールと統合する柔軟性を提供します。

Puppet ビルディングブロックは XNUMX 種類あります。

  1. その他情報
  2. クラス
  3. マニフェスト
  4. モジュール

パペットのリソース

Puppet リソースは Puppet の構成要素です。

リソースとは、 組み込み関数 バックエンドで実行され、Puppet で必要な操作を実行します。

人形教室

さまざまなリソースの組み合わせを、クラスと呼ばれる XNUMX つの単位にグループ化できます。

パペットマニフェスト

マニフェストは、Puppet DSL ファイルを含むディレクトリです。 これらのファイルには .pp 拡張子が付いています。 .pp 拡張子は、Puppet プログラムを表します。 Puppet コードは、Puppet クラスの定義または宣言で構成されます。

パペットモジュール

モジュールは、マニフェスト、クラス定義などのファイルとディレクトリのコレクションです。 これらは、Puppet の再利用可能および共有可能なユニットです。

例えば、 MySQL インストールして構成するモジュール MySQL または、Jenkins を管理するための Jenkins モジュールなど。

パペットモジュール
パペットモジュール

Puppet リソースの種類

一般に、システムはファイル、ユーザー、サービス、プロセス、パッケージなどで構成されます。Puppet では、これらをリソースと呼びます。 リソースは、システムの基本的な構成要素です。

Puppet。Puppet エージェントのすべての操作は、Puppet リソースの助けを借りて実行されます。

Puppet リソースは、サポートされているプラ​​ットフォーム上でさまざまなタスクや操作を実行するために使用される既製のツールです。単一の Puppet リソースを使用して特定のタスクを実行することも、複数の Puppet リソースを一緒に使用して複雑なアプリケーション構成のデプロイメントを実行することもできます。

リソースにはさまざまなタイプを含めることができます。 人形の使い方 リソース   リソースタイプ システムの構成を説明するため。

リソース タイプには次の XNUMX 種類があります。

  1. Puppet コアまたは組み込みリソース タイプ。
  2. Puppet で定義されたリソースタイプ。
  3. Puppet のカスタム リソース タイプ。

Puppet コアまたは組み込みリソース タイプ

コアまたは組み込みリソースタイプは、Puppet ソフトウェアに同梱される事前構築済みの Puppet リソースタイプです。 すべてのコアまたは組み込みの Puppet リソース タイプは、Puppet チームによって作成および保守されます。

Puppet で定義されたリソースタイプ

定義されたリソース タイプは、既存のリソース タイプの組み合わせを使用して Puppet 宣言言語で記述された軽量のリソース タイプです。

Puppet のカスタム リソース タイプ

カスタム リソース タイプは、Ruby で記述された完全にカスタマイズされたリソース タイプです。

Puppet リソースタイプについて調べてみましょう…

ターミナルで次のコマンドを入力して、Puppet 関連のサブコマンドのリストを表示します。

Puppet --help

Puppet のカスタム リソース タイプ

私たちの場合、サブコマンドに興味があります。リソースを追加する。これを使用して、組み込みの Puppet リソース タイプに関する情報を検索します。

ターミナルで、以下のコマンドのいずれかを入力して、 行動 puppet サブコマンドに関連付けられている「リソースを追加する。"

Puppet help resource		
Puppet resource --help		

Puppet のカスタム リソース タイプ

この場合、 リソースを追加する。 サブコマンドとして、 -種類 アクションとして。

Puppet には 49 の組み込みコア リソース タイプがあります。

ターミナルで次のコマンドを入力して、使用可能な組み込み Puppet リソース タイプの一覧を表示します。

puppet resource –types

Puppet のカスタム リソース タイプ

各タイプは次のリストをサポートします。 属性。 これらの属性は、Puppet がリソースを管理するために使用する詳細な説明を提供します。

puppet リソース タイプに関連付けられているすべての属性を確認するには、次のコマンドを使用します。

puppet describe <resource type name>	

パラメータには、そのリソース タイプで使用可能なすべての属性がリストされます。

パペット記述パッケージ

Puppet のカスタム リソース タイプ

初心者にとって、管理されていない多数の Puppet コード ファイルを理解して関連付けることは困難です。ここで、操作を結び付けるためにグループ化が必要になります。目的は、サーバーまたは NTP サービスで SSH を構成するために必要なすべての操作、または完全な Web サーバーまたはデータベース サーバーを最初から構成するために必要なすべての操作など、単一の問題を解決することです。

パペットクラスとは何ですか?

Puppet クラスは、XNUMX つのユニットとしてバンドルされた Puppet リソースのコレクションです。

Puppet は、構造を再利用可能で整理できるようにするクラスを導入しました。

まず、クラス定義構文を使用してクラスを定義する必要があります。 クラスは一意である必要があり、同じ名前で宣言できるのは XNUMX 回だけです。

class <class-name> {
<Resource declarations>
}

例:

class ntpconfig {
    file {
        "/etc/ntp.conf": 
     ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}

ここまではクラスを定義しただけで、どこにも使用していません。 つまり、このクラスを他の場所で宣言しない限り、私たちが書いたこのコードは決して実行されません。

クラス宣言

定義されたクラスをコードで使用するには、 include キーワード。

class ntpconfig {
    file {
        "/etc/ntp.conf": 
      ensure=> "present", 
      content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}
include ntpconfig

これを実際のケースシナリオで理解してみましょう。

NTP のデモインストール

まず、NTP パッケージがサーバー上に存在しないことを確認します。サーバー上に telnet が存在しない場合、次のコマンドは何も返しません。

rpm -qa | grep -i ntp

デモ NTP のインストール

見てわかるように、NTP パッケージはサーバー上にすでに存在しています。 既存の NTP パッケージを削除しましょう。

yum remove ntp

パッケージを削除した後、ntp.conf ファイルが存在しないことを確認します。

ls -lrt /etc/ntp.conf

デモ NTP のインストール

次のコマンドを実行して、ntp サービスが存在しないことを確認します。

systemctl status ntp

デモ NTP のインストール

新しい .pp ファイルを作成してコードを保存します。 コマンドラインから:

vi demontp.pp

キーボードから i を押して挿入モードに変更します。

新しいファイルを作成するには、次のコードを入力します。

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

編集が完了したら、escを押します。

ファイルを保存するには、:wq! を押してください。

次のステップは、 PowerSchoolで、緊急連絡先情報を定期的にチェックし、 コードに構文エラーがあるかどうかを確認します。次のコマンドを実行します。

puppet parser validate demontp.pp

に切り替えたことを確認してください。 ルート エラーなしでテストを完了するには、次のコマンドを実行します。

su root

ホイール試乗 コード作成プロセスの次のステップです。スモーク テストを実行するには、次のコマンドを実行します。

Puppet applies demontp.pp --noop

最後のステップは、 ラン パペットをリアルモードで実行し、出力を確認します。

puppet apply demontp.pp

デモクラスは単に実行されただけなので、Puppet は何も実行しませんでした。 定義済みの はなく、 宣言された.

したがって、Puppet クラスを宣言するまで、コードは適用されません。

レッツ 宣言する 同じコード内のデモクラスを使用して クラス名を含める コードの最後に:

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

# Class Declaration 
include ntpconfig

再び PowerSchoolで、緊急連絡先情報を定期的にチェックし、 コードに構文エラーがあるかどうかを確認します。次のコマンドを実行します。

puppet parser validate demontp.pp

に切り替えたことを確認してください。 ルート エラーなしでテストを完了するには、次のコマンドを実行します。

su root

テスト コード作成プロセスの次のステップです。スモーク テストを実行するには、次のコマンドを実行します。

Puppet apply demontp.pp --noop

最後のステップは、 ラン パペットをリアルモードで実行し、出力を確認します。

puppet apply demontp.pp

今回は、クラスが定義されてから宣言されたため、コードが適用されます。

デモ NTP のインストール

ntp.conf が存在していることを確認します。

ls -lrt /etc/ntp.conf

次のコマンドを実行して、ntp サービスが開始されていることを確認します。

systemctl status ntpd

デモ NTP のインストール