序章

Puppetは、システム管理者がサーバーインフラストラクチャのプロビジョニング、構成、および管理を自動化するのに役立つ構成管理ツールです。 事前に計画を立て、Puppetなどの構成管理ツールを使用すると、基本的なタスクの繰り返しに費やす時間を削減し、インフラストラクチャ全体で構成の一貫性と正確性を確保できます。

Puppetには、PuppetEnterpriseとオープンソースのPuppetの2種類があります。 どちらも、ほとんどのLinuxディストリビューション、さまざまなUNIXプラットフォーム、およびWindowsで実行されます。

このチュートリアルでは、Ubuntu16.04のマスターエージェントセットアップにオープンソースのPuppet4をインストールする方法を示します。 このセットアップでは、 Puppetマスターサーバー(Puppetサーバーソフトウェアを実行)を使用して、Puppetエージェントノードと呼ばれる他のすべてのサーバーを制御できます。

前提条件

このチュートリアルに従うには、3台のUbuntu16.04サーバーが必要です。 sudo 特権。 sudo権限を持つユーザーを設定する方法の詳細については、 Ubuntu16.04を使用したサーバーの初期設定ガイドを参照してください。

1人の人形マスター

1台のサーバーはPuppetマスターになります。 PuppetマスターはPuppetサーバーを実行します。これはリソースを大量に消費し、以下を必要とします。

  • 少なくとも4GBのメモリ
  • 少なくとも2つのCPUコア

より大規模なインフラストラクチャを管理するには、Puppetマスターはより多くのリソースを必要とします。

2つの人形エージェント

他の2つのサーバーは、Puppetマスターによって管理されるPuppetエージェントノードになります。 それらを呼び出します db1web1.

これらの3つのサーバーが配置されたら、開始する準備が整います。

ステップ1— / etc/hostsを設定する

Puppetマスターサーバーとそれらが管理するノードは、相互に通信できる必要があります。 ほとんどの場合、これは、外部でホストされているサービスまたはインフラストラクチャの一部として維持されている自己ホスト型DNSサーバーで構成されたDNSを使用して実現されます。

DNSは独自の専門分野ですが、ホストされたサービスでも専門知識があります。そのため、Puppet自体の基本に焦点を当て、学習中のトラブルシューティングの潜在的な複雑さを排除するために、このチュートリアルでは /etc/hosts 代わりにファイル。

すべてのマシンで

各マシンで、 /etc/hosts ファイル。 ファイルの最後で、次のようにPuppetマスターサーバーを指定し、 yourPuppetマスターの代わりにIPアドレスを使用します。

  1. sudo nano /etc/hosts
/ etc / hosts
 . . .
puppet_ip_address    puppet
 . . .

完了したら、保存して終了します。

注:デフォルトでは、PuppetエージェントはPuppetマスターを次の場所で検索します。 puppet Puppetのセットアップを簡単にするため。 これは、必ずという名前を使用する必要があることを意味します puppet/etc/hosts. もしも puppet がPuppetマスターに解決されない場合、エージェントはエージェントのpuppet.confでサーバー値を構成しないと連絡をとることができません。

ステップ2—Puppetサーバーをインストールする

Puppet Serverは、Puppetマスターから他のサーバーに構成をプッシュするソフトウェアです。 Puppetマスターでのみ実行されます。 他のホストはPuppetAgentを実行します。

注: UbuntuパッケージマネージャーにはPuppetのパッケージが含まれていますが、多くの管理者は複数のオペレーティングシステムとバージョンを管理する必要があります。 この場合、公式のPuppet Labsリポジトリを使用すると、すべてのシステムで同じPuppetバージョンを維持できるため、管理が簡素化されます。

次のコマンドを使用して、公式のPuppetLabsコレクションリポジトリを有効にします。

  1. curl -O https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
  2. sudo dpkg -i puppetlabs-release-pc1-xenial.deb
  3. sudo apt-get update

いつ apt-get update 完了しました。PuppetLabsリポジトリからプルすることを確認して、インストールします。 puppetserver パッケージ:

  1. sudo apt-get install puppetserver

プレス Y 続行します。 インストールが完了したら、サーバーを起動する前に、少し時間を取ってメモリを構成します。

メモリ割り当てを構成する

デフォルトでは、Puppetサーバーは2GBのRAMを使用するように構成されています。 この設定は、マスターサーバーにある空きメモリの量と、マスターサーバーが管理するエージェントノードの数に基づいてカスタマイズできます。

カスタマイズするには、 /etc/default/puppetserver:

  1. sudo nano /etc/default/puppetserver

次に、 JAVA_ARGS 行、および使用 -Xms-Xmx メモリ割り当てを設定するためのパラメータ。 3ギガバイトに増やします。

/ etc / default / puppetserver
JAVA_ARGS="-Xms3g -Xmx3g -XX:MaxPermSize=256m"

完了したら、保存して終了します。

ファイアウォールを開く

Puppet Serverを起動すると、ポート8140を使用して通信するため、次のように開いていることを確認します。

  1. sudo ufw allow 8140

次に、Puppetサーバーを起動します。

Puppetサーバーを起動します

使用します systemctl Puppetサーバーを起動するには:

  1. sudo systemctl start puppetserver

これが完了するまでに少し時間がかかります。

コマンドプロンプトに戻ったら、それ以降に成功したことを確認します systemctl すべてのサービス管理コマンドの結果を表示するわけではありません。

  1. sudo systemctl status puppetserver

「アクティブ(実行中)」という行が表示され、最後の行は次のようになります。

Output
Dec 07 16:27:33 puppet systemd[1]: Started puppetserver Service.

サーバーが実行されていることを確認したので、起動時に開始するようにサーバーを構成します。

  1. sudo systemctl enable puppetserver

サーバーが実行されているので、2台のエージェントマシンにPuppetAgentをセットアップする準備が整いました。 db1web1.

ステップ3—PuppetAgentのインストール

Puppetエージェントソフトウェアは、Puppetマスターが管理するすべてのサーバーにインストールする必要があります。 ほとんどの場合、これにはインフラストラクチャ内のすべてのサーバーが含まれます。

注: Puppetエージェントは、すべての主要なLinuxディストリビューション、一部のUNIXプラットフォーム、およびWindowsで実行できます。 インストール手順はOSごとに異なります。 CentOSにPuppetエージェントをインストールする手順はここにあり、インストールターゲットの完全なセットの手順はPuppetリファレンスマニュアルにあります。

PuppetLabsの公式リポジトリを有効にする

まず、次のコマンドを使用して、公式のPuppetLabsコレクションリポジトリを有効にします。

  1. wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
  2. sudo dpkg -i puppetlabs-release-pc1-xenial.deb
  3. sudo apt-get update

Puppetエージェントパッケージをインストールします

次に、をインストールします puppet-agent パッケージ:

  1. sudo apt-get install puppet-agent

エージェントを起動し、起動時に起動できるようにします。

  1. sudo systemctl start puppet
  2. sudo systemctl enable puppet

最後に、これらの手順を繰り返します web1:

  1. wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
  2. sudo dpkg -i puppetlabs-release-pc1-xenial.deb
  3. sudo apt-get update
  4. sudo apt-get install puppet-agent
  5. sudo systemctl enable puppet
  6. sudo systemctl start puppet

両方のエージェントノードがPuppetエージェントソフトウェアを実行しているので、Puppetマスターで証明書に署名します。

ステップ4—PuppetMasterで証明書に署名する

Puppetがエージェントノードで初めて実行されると、証明書署名要求がPuppetマスターに送信されます。 Puppet Serverがエージェントノードと通信して制御できるようになる前に、その特定のエージェントノードの証明書に署名する必要があります。

現在の証明書要求を一覧表示します

署名されていないすべての証明書要求を一覧表示するには、Puppetマスターで次のコマンドを実行します。

  1. sudo /opt/puppetlabs/bin/puppet cert list

設定したホストごとに1つのリクエストがあり、次のようになります。

Output:
"db1.localdomain" (SHA256) 46:19:79:3F:70:19:0A:FB:DA:3D:C8:74:47:EF:C8:B0:05:8A:06:50:2B:40:B3:B9:26:35:F6:96:17:85:5E:7C "web1.localdomain" (SHA256) 9D:49:DE:46:1C:0F:40:19:9B:55:FC:97:69:E9:2B:C4:93:D8:A6:3C:B8:AB:CB:DD:E6:F5:A0:9C:37:C8:66:A0

A + 証明書の前は、署名されていることを示します。 プラス記号がない場合は、新しい証明書がまだ署名されていないことを示しています。

リクエストに署名する

単一の証明書リクエストに署名するには、 puppet cert sign コマンド。証明書要求に表示される証明書のホスト名を使用します。

たとえば、db1の証明書に署名するには、次のコマンドを使用します。

  1. sudo /opt/puppetlabs/bin/puppet cert sign db1.localdomain

次の例のような出力は、証明書要求が署名されていることを示しています。

Output:
Notice: Signed certificate request for db.localdomain Notice: Removing file Puppet::SSL::CertificateRequest db1.localdomain at '/etc/puppetlabs/puppet/ssl/ca/requests/db1.localdomain.pem'

これで、Puppetマスターは、署名された証明書が属するノードと通信して制御できるようになります。 現在のすべてのリクエストに一度に署名することもできます。

を使用します --all 残りの証明書に署名するオプション:

  1. sudo /opt/puppetlabs/bin/puppet cert sign --all

すべての証明書が署名されたので、Puppetはインフラストラクチャを管理できます。 証明書の管理について詳しくは、Puppet4証明書の管理方法のチートシートをご覧ください。

ステップ5—インストールの確認

Puppetはドメイン固有言語を使用してシステム構成を記述し、これらの記述は「マニフェスト」と呼ばれるファイルに保存されます。 .pp ファイル拡張子。 これらの詳細については、 Puppetコード入門:マニフェストとモジュールガイドを参照してください。ただし、ここでは、Puppetサーバーがエージェントを期待どおりに管理できることを確認するための簡単なディレクティブを作成します。

デフォルトのマニフェストを作成することから始めます。 site.pp、デフォルトの場所:

  1. sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp

Puppetのドメイン固有言語を使用して、というファイルを作成します it_works.txt にあるエージェントノード上 tmp エージェントサーバーのパブリックIPアドレスを含み、アクセス許可をに設定するディレクトリ-rw-r--r--:

site.ppの例
  1. file {'/tmp/it_works.txt': # resource type file and filename
  2. ensure => present, # make sure it exists
  3. mode => '0644', # file permissions
  4. content => "It works on ${ipaddress_eth0}!\n", # Print the eth0 IP fact
  5. }

デフォルトでは、PuppetServerはデフォルトで30分ごとにマニフェストでコマンドを実行します。 ファイルが削除された場合、 ensure ディレクティブにより、再作成されます。 The mode ディレクティブはファイルのパーミッションを設定し、 content ディレクティブディレクティブにコンテンツを追加します。

を使用して、単一ノードでマニフェストをテストすることもできます puppet agent --test. ご了承ください --test ドライランのフラグではありません。 成功すると、エージェントの構成が変更されます。

Puppetマスターが変更を適用するのを待つのではなく、マニフェストを今すぐ適用します db1:

  1. sudo /opt/puppetlabs/bin/puppet agent --test

出力は次のようになります。

Output
Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Loading facts Info: Caching catalog for db1.localdomain Info: Applying configuration version '1481131595' Notice: /Stage[main]/Main/File[/tmp/it_works.txt]/ensure: defined content as '{md5}acfb1c7d032ed53c7638e9ed5e8173b0' Notice: Applied catalog in 0.03 seconds

完了したら、ファイルの内容を確認します。

  1. cat /tmp/it_works.txt
Output
[environment second] It works on 203.0.113.0!

これを繰り返します web1 または、必要に応じて、30分ほどでもう一度確認し、Puppetマスターが自動的に実行されていることを確認します。

注: Puppetマスターのログファイルをチェックして、Puppetがエージェントのカタログを最後にコンパイルした日時を確認できます。これは、必要な変更が適用されている必要があることを示しています。

  1. tail /var/log/puppetlabs/puppetserver/puppetserver.log
Output excerpt
. . . 2016-12-07 17:35:00,913 INFO [qtp273795958-70] [puppetserver] Puppet Caching node for web1.localdomain 2016-12-07 17:35:02,804 INFO [qtp273795958-68] [puppetserver] Puppet Caching node for web1.localdomain 2016-12-07 17:35:02,965 INFO [qtp273795958-68] [puppetserver] Puppet Compiled catalog for web1.localdomain in environment production in 0.13 seconds . . .

おめでとう! これで、Puppetがマスター/エージェントモードで正常にインストールされました。

結論

基本的なエージェント/マスターPuppetのインストールが完了したので、Puppetを使用してサーバーインフラストラクチャを管理する方法についてさらに学習する準備が整いました。 次のチュートリアルを確認してください: Puppetコード入門:マニフェストとモジュール