開発者ドキュメント

Ubuntu16.04にPuppet4をインストールする方法

序章

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

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

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

前提条件

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

1人の人形マスター

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

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

2つの人形エージェント

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

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

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

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

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

すべてのマシンで

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

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

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

注:デフォルトでは、PuppetエージェントはpuppetでPuppetマスターを検索し、Puppetのセットアップを容易にします。 つまり、/etc/hostspuppetという名前を使用する必要があります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が完了したら、Puppet Labsリポジトリからプルすることを確認して、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台のエージェントマシンdb1web1にPuppetAgentをセットアップする準備が整いました。

ステップ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

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

リクエストに署名する

単一の証明書要求に署名するには、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のドメイン固有言語を使用して、tmpディレクトリにあるエージェントノードにit_works.txtというファイルを作成します。このファイルには、エージェントサーバーのパブリック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ディレクティブによってファイルが再作成されます。 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コード入門:マニフェストとモジュール

モバイルバージョンを終了