序章
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エージェントノードになります。 それらを呼び出します db1
と web1
.
これらの3つのサーバーが配置されたら、開始する準備が整います。
ステップ1— / etc/hostsを設定する
Puppetマスターサーバーとそれらが管理するノードは、相互に通信できる必要があります。 ほとんどの場合、これは、外部でホストされているサービスまたはインフラストラクチャの一部として維持されている自己ホスト型DNSサーバーで構成されたDNSを使用して実現されます。
DNSは独自の専門分野ですが、ホストされたサービスでも専門知識があります。そのため、Puppet自体の基本に焦点を当て、学習中のトラブルシューティングの潜在的な複雑さを排除するために、このチュートリアルでは /etc/hosts
代わりにファイル。
すべてのマシンで
各マシンで、 /etc/hosts
ファイル。 ファイルの最後で、次のようにPuppetマスターサーバーを指定し、 yourPuppetマスターの代わりにIPアドレスを使用します。
- sudo nano /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コレクションリポジトリを有効にします。
- 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
完了しました。PuppetLabsリポジトリからプルすることを確認して、インストールします。 puppetserver
パッケージ:
- sudo apt-get install puppetserver
プレス Y
続行します。 インストールが完了したら、サーバーを起動する前に、少し時間を取ってメモリを構成します。
メモリ割り当てを構成する
デフォルトでは、Puppetサーバーは2GBのRAMを使用するように構成されています。 この設定は、マスターサーバーにある空きメモリの量と、マスターサーバーが管理するエージェントノードの数に基づいてカスタマイズできます。
カスタマイズするには、 /etc/default/puppetserver
:
- sudo nano /etc/default/puppetserver
次に、 JAVA_ARGS
行、および使用 -Xms
と -Xmx
メモリ割り当てを設定するためのパラメータ。 3ギガバイトに増やします。
JAVA_ARGS="-Xms3g -Xmx3g -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台のエージェントマシンにPuppetAgentをセットアップする準備が整いました。 db1
と web1
.
ステップ3—PuppetAgentのインストール
Puppetエージェントソフトウェアは、Puppetマスターが管理するすべてのサーバーにインストールする必要があります。 ほとんどの場合、これにはインフラストラクチャ内のすべてのサーバーが含まれます。
注: Puppetエージェントは、すべての主要なLinuxディストリビューション、一部のUNIXプラットフォーム、およびWindowsで実行できます。 インストール手順はOSごとに異なります。 CentOSにPuppetエージェントをインストールする手順はここにあり、インストールターゲットの完全なセットの手順はPuppetリファレンスマニュアルにあります。
PuppetLabsの公式リポジトリを有効にする
まず、次のコマンドを使用して、公式のPuppetLabsコレクションリポジトリを有効にします。
- 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—PuppetMasterで証明書に署名する
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
A +
証明書の前は、署名されていることを示します。 プラス記号がない場合は、新しい証明書がまだ署名されていないことを示しています。
リクエストに署名する
単一の証明書リクエストに署名するには、 puppet cert sign
コマンド。証明書要求に表示される証明書のホスト名を使用します。
たとえば、db1の証明書に署名するには、次のコマンドを使用します。
- 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
残りの証明書に署名するオプション:
- sudo /opt/puppetlabs/bin/puppet cert sign --all
すべての証明書が署名されたので、Puppetはインフラストラクチャを管理できます。 証明書の管理について詳しくは、Puppet4証明書の管理方法のチートシートをご覧ください。
ステップ5—インストールの確認
Puppetはドメイン固有言語を使用してシステム構成を記述し、これらの記述は「マニフェスト」と呼ばれるファイルに保存されます。 .pp
ファイル拡張子。 これらの詳細については、 Puppetコード入門:マニフェストとモジュールガイドを参照してください。ただし、ここでは、Puppetサーバーがエージェントを期待どおりに管理できることを確認するための簡単なディレクティブを作成します。
デフォルトのマニフェストを作成することから始めます。 site.pp
、デフォルトの場所:
- sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp
Puppetのドメイン固有言語を使用して、というファイルを作成します it_works.txt
にあるエージェントノード上 tmp
エージェントサーバーのパブリックIPアドレスを含み、アクセス許可をに設定するディレクトリ-rw-r--r--
:
- 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
- }
デフォルトでは、PuppetServerはデフォルトで30分ごとにマニフェストでコマンドを実行します。 ファイルが削除された場合、 ensure
ディレクティブにより、再作成されます。 The 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[environment second]
It works on 203.0.113.0!
これを繰り返します web1
または、必要に応じて、30分ほどでもう一度確認し、Puppetマスターが自動的に実行されていることを確認します。
注: Puppetマスターのログファイルをチェックして、Puppetがエージェントのカタログを最後にコンパイルした日時を確認できます。これは、必要な変更が適用されている必要があることを示しています。
- 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コード入門:マニフェストとモジュール。