前書き

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

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

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

前提条件

このチュートリアルを実行するには、* 3つのUbuntu 16.04サーバー*が必要です。各サーバーには、 `+ sudo +`権限を持つ非ルートユーザーがいます。 Ubuntu 16.04での初期サーバー設定で、sudo権限を持つユーザーを設定する方法の詳細を確認できます]ガイド。

パペットマスター1人

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

  • 少なくとも4GBのメモリ

  • 少なくとも2つのCPUコア

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

2つのPuppetエージェント

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

これらの3台のサーバーが設置されたら、準備は完了です。

ステップ1-/ etc / hostsの構成

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

DNSは独自の専門分野ですが、ホストされたサービスについても同様であるため、Puppet自体の基礎に焦点を当て、学習中のトラブルシューティングの複雑さを排除するために、このチュートリアルでは「+ / etc代わりに/ hosts + `ファイル。

すべてのマシンで

各マシンで、 `+ / etc / hosts +`ファイルを編集します。 ファイルの最後で、次のようにPuppetマスターサーバーを指定し、your PuppetマスターをIPアドレスに置き換えます。

sudo nano /etc/hosts

/ etc / hosts

. . .
   puppet
. . .

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

ステップ2-Puppet Serverのインストール

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

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

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

「+ apt-get update」が完了し、Puppet Labsリポジトリから確実にプルできるようになったら、「+ puppet server」パッケージをインストールします。

sudo apt-get install puppetserver

続行するには、「+ Y +」を押します。 インストールが完了し、サーバーを起動する前に、少し時間をかけてメモリを構成します。

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

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

カスタマイズするには、 `+ / etc / default / puppetserver +`を開きます:

sudo nano /etc/default/puppetserver

次に、「+ JAVA_ARGS 」行を見つけ、「-Xms 」および「 -Xmx +」パラメーターを使用してメモリ割り当てを設定します。 3ギガバイトに増やします:

/ etc / default / puppetserver

JAVA_ARGS="-Xmsg -Xmxg -XX:MaxPermSize=256m"

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

ファイアウォールを開く

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

sudo ufw allow 8140

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

Puppetサーバーを起動します

`+ systemctl +`を使用してPuppetサーバーを起動します。

sudo systemctl start puppetserver

これを完了するには時間がかかります。

コマンドプロンプトに戻ったら、「+ systemctl +」はすべてのサービス管理コマンドの結果を表示しないため、成功したことを確認します。

sudo systemctl status puppetserver

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

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

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

sudo systemctl enable puppetserver

サーバーが実行されたら、2つのエージェントマシン、 `+ db1 `と ` web1 +`でPuppet Agentをセットアップする準備ができました。

ステップ3-Puppet Agentのインストール

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

公式のPuppet Labsリポジトリを有効にします

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

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

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

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

sudo apt-get install puppet-agent

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

sudo systemctl start puppet
sudo systemctl enable puppet

最後に、これらの手順を `+ web1 +`で繰り返します。

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

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

ステップ4-Puppet Masterで証明書に署名する

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

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

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

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の証明書に署名するには、次のコマンドを使用します。

sudo /opt/puppetlabs/bin/puppet cert sign

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

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

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

「+-all +」オプションを使用して、残りの証明書に署名します。

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

すべての証明書が署名されたので、Puppetはインフラストラクチャを管理できます。 証明書の管理の詳細については、https://www.digitalocean.com/community/tutorials/how-to-manage-puppet-4-certificates [Puppet 4証明書の管理方法]チートシートをご覧ください。

ステップ5-インストールの検証

Puppetはドメイン固有の言語を使用してシステム構成を記述します。これらの記述は「マニフェスト」と呼ばれるファイルに保存され、ファイルの拡張子は「+ .pp +」です。 これらの詳細については、https://www.digitalocean.com/community/tutorials/getting-started-with-puppet-code-manifests-and-modules [Puppet Code入門:マニフェストとモジュール]ガイドをご覧ください。ただし、ここでは、Puppet Serverが期待どおりにエージェントを管理できることを確認するための簡単なディレクティブを作成します。

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

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

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

site.ppの例

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

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

`+ puppet agent –test`を使用して、単一ノードでマニフェストをテストすることもできます。 `+-test +`は予行演習のフラグではないことに注意してください。成功すると、エージェントの構成が変更されます。

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

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

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

OutputInfo: 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

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

cat /tmp/it_works.txt
Output It works on !

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

おめでとうございます。 Puppetをマスター/エージェントモードで正常にインストールしました。

結論

基本的なエージェント/マスターPuppetのインストールが完了したので、Puppetを使用してサーバーインフラストラクチャを管理する方法について詳しく学ぶ準備ができました。 次のチュートリアルをご覧ください:https://www.digitalocean.com/community/tutorials/getting-started-with-puppet-code-manifests-and-modules[Puppetコードの開始:マニフェストとモジュール]。