GNU/Linux >> Linux の 問題 >  >> Linux

Linux での例を含む Puppet 設定ファイルの紹介

Puppet は、いくつかの定期的な sysadmin 構成タスクを自動化するために使用されます。

エンタープライズ グレードの構成管理システムのパペット。

IT インフラストラクチャの状態を定義できます。定義されると、Puppet は継続的に正しい状態を自動的に適用します。

1.操り人形のアーキテクチャ

通常、Puppet には 1 つのサーバー コンポーネントと複数のエージェントがあります。ネットワーク上のサーバーを puppet マスターとして指定する必要があり、ネットワーク上の各ノードには puppet エージェントがインストールされます。

puppet 設定をクライアントに適用する最も一般的な方法は、puppet マスター デーモン (puppetmasterd) と puppet クライアント デーモン (puppetd) を使用することです。 puppet ツールを使用してマニフェストを手動で適用することもできます。

構成は puppet マスターで定義され、コンパイルされてから、接続時に puppet クライアントに自動的にプッシュされます。

Puppet は、さまざまなプラットフォームとオペレーティング システムを幅広くサポートしており、適切なコマンドを自動的に実行して、各環境にマニフェストを適用します。

マニフェストは、パペットが理解できる言語で記述されたファイル、パッケージ、構成操作に関する詳細にすぎません。

各 Puppet ノードは、デフォルトでは 30 分ごとに puppet マスターに連絡して、その構成が最新であることを確認します。構成が異なる場合、または新しい構成が利用可能な場合、再コンパイルされてから puppet ノードに適用されます。

このチュートリアルでは、いくつかの基本的なマニフェストを作成し、パペット ツールを使用してクライアントに適用する方法について説明します。

ほとんどのシステム構成は、puppet コマンド ライン ツールを使用して表示できます。すべての構成コンポーネントは、リソースに編成されています。リソースはコレクションにグループ化されます。リソースは、タイプ、タイトル、一連の属性で構成されています。

2. Puppet リソース ファイルの例

以下は、puppet リソースを表示する方法の基本的な例です。この場合、表示している puppet リソースはファイル (/etc/nsswitch) です。

# puppet resource file /etc/nsswitch.conf
file { '/etc/nsswitch.conf':
  ensure   => 'file',
  content  => '{md5}0d6009cdfd12646d251e86303bc0c48c',
  ctime    => 'Sun May 18 13:20:02 -0400 2014',
  group    => '0',
  mode     => '644',
  mtime    => 'Tue May 04 15:22:21 -0400 2010',
  owner    => '0',
  selrange => 's0',
  selrole  => 'object_r',
  seltype  => 'etc_t',
  seluser  => 'system_u',
  type     => 'file',
}

Puppet には、ファイル、サービス、パッケージ、cron ジョブ、ファイルシステムなどを管理するためのタイプなど、デフォルトで多数のリソース タイプが付属しています。

上記の例では、file がリソース タイプで、/etc/nsswitch.conf が管理対象のリソースのタイトルです。

それ以外はすべて、リソース タイプの属性と、属性に存在する値です。パペットを拡張して、独自のリソース タイプを追加することもできます。

利用可能なすべてのリソース タイプを表示するには、次のコマンドを使用します:

# puppet resource --types
augeas
computer
cron
exec
file
filebucket
group
host
nagios_hostdepend
..
..

3. Puppet マニフェスト ファイルの例

簡単なマニフェスト ファイルを作成し、puppet コマンドを実行して構成をサーバーに適用する方法を見てみましょう。

次の例では、/etc/puppet/manifests ディレクトリの下に単純なマニフェスト ファイル site.pp を作成し、/var/tmp の下にテストファイルを作成します。

最初は、以下に示すように、テスト ファイルがありません。

# ls -ld /var/tmp/testfile
ls: cannot access /var/tmp/testfile: No such file or directory

以下は、マニフェスト (site.pp) ファイル内のリソース宣言です:

# cat site.pp
file { "/var/tmp/testfile":
        ensure => "present",
        owner => "root",
        group => "root",
        mode => "664",
        content => "This is a test file created using puppet.
                    Puppet is really cool",
}

デモ目的で、パペット マスターとエージェントを同じノードで実行しています。

–noop オプションを指定して puppet apply コマンドを初めて実行すると、設定を実際に適用せずに予行演習が行われます。

# puppet apply site.pp --noop
Notice: Compiled catalog for pemaster.mydomain.com in environment production in 0.06 seconds
Notice: /Stage[main]/Main/File[/var/tmp/testfile]/ensure: current_value absent, should be present (noop)
Notice: Class[Main]: Would have triggered 'refresh' from 1 events
Notice: Stage[main]: Would have triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.03 seconds

上記は、ノードに実際に変更を加えることなく、新しい構成がどのように機能するかを確認するためのものです。

次に、–noop オプションを指定せずにコマンドを実行して、以下に示すように構成を実際に適用します。

# puppet apply site.pp
Notice: Compiled catalog for pemaster.mydomain.com in environment production in 0.07 seconds
Notice: /Stage[main]/Main/File[/var/tmp/testfile]/ensure: created
Notice: Finished catalog run in 0.05 seconds

正常に実行されると、新しい一時ファイルが /var/tmp/testfile の下に作成され、内容が site.pp で定義されていることがわかります。

# ls -ld /var/tmp/testfile
-rw-rw-r--. 1 root root 69 Jun 26 14:25 /var/tmp/testfile

# cat /var/tmp/testfile
This is a test file created using puppet.
  Puppet is really cool

4. Puppet を使用してリモート ノードでサービスを制御する

エージェント ノードでサービスを停止状態から実行状態に変更する例を次に示します。

この構成マニフェストがマスター サーバーの puppet 構成ディレクトリの下の特定の場所に保存されると、すべてのノードで実行されているエージェントがマスター ノードに接続し、構成を取得してすべてのクライアント ノードに適用するため、この方法でサービスが開始されます。 puppet 設定が正常に実行された後、すべてのエージェント ノードで。

# puppet resource service multipathd
service { 'multipathd':
  ensure => 'stopped',
  enable => 'false',
}

この例では、サービス multipathd を制御します。 puppet を使用して、システムで実行されているサービスを制御できます。たとえば、httpd、mysqld などです。

# puppet resource service multipathd > site.pp

site.pp に次の値があることを確認します。そうでない場合は、適宜編集してください。

# vi site.pp
service { 'multipathd':
  ensure => 'running',
  enable => 'true',
}

最初に予行演習を行って、期待どおりに機能することを確認してください。

# puppet apply site.pp --noop
Notice: Compiled catalog for pemaster.mydomain.com in environment production in 0.07 seconds
Notice: /Stage[main]/Main/Service[multipathd]/ensure: current_value stopped, should be running (noop)
Notice: Class[Main]: Would have triggered 'refresh' from 1 events
Notice: Stage[main]: Would have triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.06 seconds

最後に、まだ実行されていない場合は、サービス (この例では multipathd) を開始する構成ファイルを適用します。

# puppet apply site.pp
Notice: Compiled catalog for pemaster.mydomain.com in environment production in 0.07 seconds
Notice: /Stage[main]/Main/Service[multipathd]/ensure: ensure changed 'stopped' to 'running'
Notice: Finished catalog run in 0.28 seconds

# puppet resource service multipathd
service { 'multipathd':
  ensure => 'running',
  enable => 'true',
}

# chkconfig --list | grep multipath
multipathd      0:off   1:off   2:on    3:on    4:on    5:on    6:off

5. Puppet を使用してリモート ノードにパッケージをインストールする

puppet を使用して、リモートですべてのエージェント ノードにパッケージをインストールできます。

以下は、パッケージ インストール用のサンプル マニフェスト ファイルです。

# cat site.pp
package { 'httpd':
  ensure => 'present',
}

この例では、リモート サイトに存在しない場合、Apache パッケージ httpd をインストールします。以下に示すように、パッケージがインストールされました。

# puppet apply site.pp
Notice: Compiled catalog for pemaster.mydomain.net in environment production in 0.70 seconds
Notice: /Stage[main]/Main/Package[httpd]/ensure: created
Notice: Finished catalog run in 79.97 seconds

rpm コマンドを使用して、パッケージが正しくインストールされていることを確認してください。

# rpm -qa | grep -i httpd
httpd-2.2.15-39.el6.centos.x86_64
httpd-tools-2.2.15-39.el6.centos.x86_64

6. 2 種類のパペット コレクション

リソースは、ノード上の単一の構成アイテムの特性を構成できます。ただし、ほとんどのサービスとアプリケーションは複数のリソースで構成されています。

たとえば、Web サーバーは、ソフトウェア パッケージ、ソフトウェアを実行するユーザー、さまざまな構成、ログ、およびその他のファイルで構成されます。

リソース コレクションを使用すると、リソースを収集してコレクションに割り当て、コレクションをエージェント ノードに適用できます。

リソース コレクションには 2 つのタイプがあります:

<オール>
  • クラス
  • 定義
  • 7. Puppet クラス コレクションの例

    クラスはノード上の単一の構成アイテムを表すリソースのコレクションですが、定義はノード上に複数の表現を持つ構成アイテムのコレクションです。

    パッケージのインストール後の前の例では、サービスはデフォルトでは開始されません。パッケージをインストールし、インストール後にサービスを開始するためのクラスを含む単純なマニフェストを作成できます。

    次の例では、require 属性を使用して 2 つのリソース間の関係を指定しています。

    # cat site.pp
    class apache {
            package { 'httpd':
               ensure => 'present',
                    }
            service {'httpd':
               ensure => 'running',
               require => Package["httpd"],
               }
    }
    include apache
    

    これにより、リソースの変更が適用される前に条件が満たされるようになります。この場合、サービス httpd は、サービスを立ち上げようとする前に、最初に httpd パッケージをインストールする必要があります。

    # puppet apply site.pp
    Notice: Compiled catalog for pemaster.mydomain.net in environment production in 0.93 seconds
    Notice: /Stage[main]/Apache/Package[httpd]/ensure: created
    Notice: /Stage[main]/Apache/Service[httpd]/ensure: ensure changed 'stopped' to 'running'
    Notice: Finished catalog run in 32.82 seconds
    
    # chkconfig --list | grep http
    httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
    
    # rpm -qa | grep -i http
    httpd-2.2.15-39.el6.centos.x86_64
    httpd-tools-2.2.15-39.el6.centos.x86_64
    

    8.パペット定義コレクションの例

    定義は、パペット リソース コレクションの一種です。

    定義は、ノード上に複数のインスタンスを持つ構成アイテムに使用する必要があります。

    たとえば、httpd サーバーには複数の仮想ホストが定義されている場合があります。仮想ホストを構成するための定義を作成し、それぞれを構成するための適切な引数を渡すことができます。引数の各セットが異なる限り、puppet は定義が評価されるたびに新しい仮想ホストを構成します。

    以下は、クラスと定義を含む単純なマニフェストの例です。

    # cat site1.pp
    class testdefine {
        define testdefine ($data) {
          file {"$title":
            ensure  => file,
            content => $data,
          }
        }
    
        testdefine {'/var/tmp/puppetfile1':
          data => "The name of the file is puppetfile1 and it is created by puppet\n",
        }
    
        testdefine {'/var/tmp/puppetfile2':
          data => "The name of the file is puppetfile2 and it is created by puppet\n",
        }
        testdefine {'/var/tmp/puppetfile3':
          data => "The name of the file is puppetfile3 and it is created by puppet\n",
        }
    
    }
    
    include testdefine
    

    以下に示すように、上記の puppet クラスと定義マニフェストを実行します。

    # puppet apply site1.pp
    Notice: Compiled catalog for pemaster.mydomain.net in environment production in 0.24 seconds
    Notice: /Stage[main]/Testdefine/Testdefine::Testdefine[/var/tmp/puppetfile2]/File[/var/tmp/puppetfile2]/ensure: defined content as '{md5}9079bd9c7650ae7d503c7df1a68bb9f0'
    Notice: /Stage[main]/Testdefine/Testdefine::Testdefine[/var/tmp/puppetfile3]/File[/var/tmp/puppetfile3]/ensure: defined content as '{md5}75d495f0d3180b1f2dd052ac208d81fe'
    Notice: /Stage[main]/Testdefine/Testdefine::Testdefine[/var/tmp/puppetfile1]/File[/var/tmp/puppetfile1]/ensure: defined content as '{md5}1fa93f1f2b82f8358866d58b2cb2f0b4'
    Notice: Finished catalog run in 0.19 seconds
    
    # ls -l /var/tmp/puppetfile*
    -rw-r--r--. 1 root root 64 Jun 26 19:11 /var/tmp/puppetfile1
    -rw-r--r--. 1 root root 64 Jun 26 19:11 /var/tmp/puppetfile2
    -rw-r--r--. 1 root root 64 Jun 26 19:11 /var/tmp/puppetfile3
    
    # cat /var/tmp/puppetfile*
    The name of the file is puppetfile1 and it is created by puppet
    The name of the file is puppetfile2 and it is created by puppet
    The name of the file is puppetfile3 and it is created by puppet
    

    9. Puppet ノード構成ファイルの例

    これまで、クラスと定義の形式でリソースとリソースのコレクションを定義することを見てきました。

    次のステップは、これらのリソースとコレクションをクライアントに割り当てる方法です。

    node.pp でノードを定義する方法の例を次に示します。

    Puppet はこのファイルを使用して、どのクラス (リソースを含む) をどのサーバーに送信するかを決定します。 ngnix パッケージ、ngnix サービス、その他の ngnix 構成ファイルなどのリソースを含む ngnix。

    以下のサンプルの nodes.pp ファイルはこれを説明しています:

    node 'puppetclient1.mydomain.net' {
    include httpd_class
    }
    node 'puppetclient2.mydomain.net' {
    include ngnix_class
    }
    node default {
        package { "perl": 
           ensure => present }
    }
    

    ノード定義内で、リソース、クラス、および定義を追加できます。

    クラスは include 関数を使用して追加されます。

    puppetclient1.mydomain.net には httpd_class が含まれ、puppetclient2.mydomain.net には ngnix_class が含まれています。

    1 つの include 関数で複数のクラスを含めることもできます。一致するノード定義がない場合は、定義されたデフォルト値が使用されます。この場合、他にノードがあれば、存在しない場合は perl パッケージをインストールするだけです。

    10. Puppet マニフェスト ファイルのインポート

    リソース、クラス、および定義は、マニフェスト ファイルに格納されます。

    サイト マニフェストと呼ばれる特別なマニフェスト ファイルは、構成の中心にあります。

    Puppet マスター デーモンを開始するとき、デフォルトで /etc/puppet/manifests/site.pp にあるサイト マニフェスト ファイルが存在する必要があります。

    上記の例では、マニフェストの適用方法を説明するために site.pp を使用しました。

    実際の puppet 環境では、site.pp には以下のコンテンツのみが含まれ、このファイルから他のファイルがインポートされて実行されます。

    # cat site.pp
    import "templates.pp"
    import "nodes.pp"
    import "classes/*"
    import "groups/*"
    import "users/*"
    import "os/*"
    

    以下は、パペット マニフェストのディレクトリ構造です:

    • /manifests/classes/ – すべてのクラスを含むディレクトリ
    • /manifests/site.pp – プライマリ マニフェスト ファイル
    • /manifests/templates.pp – テンプレート ノードが含まれています
    • /manifests/nodes.pp – ノード定義が含まれています
    • /manifests/definitions/ – すべての定義が含まれています
    • /manifests/groups/ – グループを構成するマニフェストが含まれています
    • /manifests/os/ – 特定のオペレーティング システムでノードを構成するように設計されたクラスが含まれています
    • /manifests/users/ – ユーザーを構成するマニフェストが含まれています
    • /manifest/files/ – Puppet 配布可能ファイル用のファイル サーバー モジュールが含まれています

    Linux
    1. 例を含むLinuxTeeコマンド

    2. Linuxでファイルを解凍する方法(例付き)

    3. 実用的な例を含む Linux rsync コマンド

    1. 例を含むwcLinuxコマンド

    2. Linuxのソートコマンドと例

    3. LinuxでのJQコマンドと例

    1. Linuxでのエコーコマンド(例付き)

    2. Linuxでのmanコマンドと例

    3. LinuxでのAWKコマンドと例