Puppetで行うLinuxシステムの自動設定と設定管理 3ページ

puppetサーバーを構築して複数台サーバーを管理する

 さて、続いてはクライアント/サーバー構成でpuppetを利用し、複数のクライアントをサーバーで集中管理する方法について説明しよう。

サーバー側の設定

 マニフェストファイルを配置するサーバー側にはpuppetmasterサービスが必要となる。puppetmasterサービスはpuppet-serverパッケージに含まれているので、これをインストールしておく。

# yum install puppet-server

 インストール後、seviceコマンドでpuppetmasterサービスを起動できる。

# service puppetmaster start
puppetmaster を起動中:                                     [  OK  ]

 なお、puppetmasterサービスの設定は/etc/puppet/puppet.confファイルに記述されているが、とくに設定を変更せずともサーバーの起動は可能だ。また、puppetmasterサービスは8140番ポートでTCPを使って待ち受けを行うので、このポートを利用できるようファイアウォールなどの設定を行っておこう。

クライアント側の設定

 クライアント側では、スタンドアロンでの運用と同じくpuppetパッケージで提供されているpuppetコマンドが必要だ。適宜このパッケージをインストールしておく。

# yum install puppet

 クライアントからサーバーに接続してマニフェストを取得・実行するには、「puppet agent」コマンドを利用する。たとえば、example.comというサーバーで稼働しているpuppetmasterサービスに接続してmanifestを実行するには、以下のようにする。

# puppet agent --test --server example.com

 「–test」オプションはサーバーに接続してマニフェストを実行するオプションで、「–server」は接続するサーバーを指定するオプションだ。ただし、コマンドの初回実行時には以下のように「証明書がない」とのエラーが表示されるはずだ。

# puppet agent --test --server example.com
Info: Caching certificate for ca
Info: Creating a new SSL certificate request for centos01
Info: Certificate Request fingerprint (SHA256): BB:E4:1D:04:5E:68:5C:C3:A9:20:CF:7F:36:DE:94:D8:3F:97:36:42:D3:F0:C3:A4:3A:29:33:75:8C:51:D2:76
Exiting; no certificate found and waitforcert is disabled

 puppetではクライアント/サーバー間での通信でSSLによる暗号化を利用しており、これらの設定を行う必要があるためだ。先のようにpuppet agentコマンドを実行してクライアントからサーバーへの通信を行うと、自動的にサーバー側にクライアントの証明書が登録されるので、サーバー側で次のように実行して署名を行えば良い。まず、「puppet cert list」コマンドで送信された証明書を確認する。

# puppet cert list
  "centos01" (SHA256) BB:E4:1D:04:5E:68:5C:C3:A9:20:CF:7F:36:DE:94:D8:3F:97:36:42:D3:F0:C3:A4:3A:29:33:75:8C:51:D2:76

 この例の場合、「centos01」というサーバーから証明書が送信されていることが分かる。この証明書に署名をして有効にするには、「puppet cert sign <サーバー名>」コマンドを実行して署名を有効にすれば良い。たとえば「centos01」というサーバーの証明書を有効にするには、以下のようにする。

# puppet cert sign centos01
Notice: Signed certificate request for centos01
Notice: Removing file Puppet::SSL::CertificateRequest centos01 at '/var/lib/puppet/ssl/ca/requests/centos01.pem'

 サーバー側で証明書を有効にしたら、クライアント側で以下の様に再度puppet agentコマンドを実行してみよう。エラーが表示されなければ、サーバー側の「/etc/puppet/manifests/site.pp」マニフェストファイルで指定された設定処理がクライアント側で実行されるているはずだ。

# puppet agent --test --server example.com
Info: Caching certificate for centos01
Info: Caching certificate_revocation_list for ca
Info: Retrieving plugin
Info: Caching catalog for centos01
Info: Applying configuration version '1374498730'
Notice: Finished catalog run in 0.02 seconds

 なお、問い合わせとマニフェストの確認のみを行い、実際の設定処理は行わせたくない場合、「–noop」(no operation)オプションを追加で指定すれば良い。

puppetクライアントを定期的に実行させる

 puppetパッケージには、puppetクライアントをサービスとして常駐させ、定期的にマニフェストを実行させるためのpuppetサービスが用意されている。puppetサービスを利用するには、/etc/puppet/puppet.confファイルの「[agent]」セクション内にpuppetmasterサービスの稼働しているホスト名とマニフェストの実行間隔を記述したうえで、puppetサービスを起動すればよい。

server = example.com  ←puppetmasterサービスが稼働しているホストを指定する
runinterval = 1800  ←マニフェストの実行間隔を秒で指定する。この場合30分(30×60秒=1800)