構成管理ツールについて考えるとき、頭に浮かぶのはPuppetです。 Puppetはオープンソースの構成管理ツールであり、中央の場所から数百のクライアントシステムの構成を展開および管理するのに役立ちます。
Puppetは、反復的なタスクに費やす時間を削減することでシステム管理者の作業を楽にし、他の生産的な作業に取り組むことを可能にします。また、すべての構成がインフラストラクチャ全体で一貫していることを保証します。
Puppetは、Linux、Mac、BSD、Solaris、およびWindowsベースのコンピューターシステムで使用でき、Apacheライセンスの下でリリースされ、「Ruby」言語で記述されています。
このガイドは、Ubuntu 18.04 /Ubuntu16.04およびDebian9にPuppetサーバーをインストールするのに役立ちます。
アーキテクチャ
エージェント/マスター
このアーキテクチャでは、1つ以上のサーバーがパペットマスターアプリケーションを実行し、パペットエージェントアプリケーションが管理対象ノード(クライアントサーバー)で、通常はバックグラウンドサービスとして実行されます。
人形エージェントは、事実を人形マスターに送信し、特定の間隔でカタログを要求します。パペットマスターは、アクセスできる情報のソースを使用して、その特定のノードのカタログをコンパイルして返します。
スタンドアロンアーキテクチャ
このアーキテクチャでは、クライアントノードは通常cronジョブとしてpuppetapplyアプリケーションを実行します。
環境
ここでは、マスター/エージェントアーキテクチャでパペットを構成し、以下に説明するように2つのシステムを使用します。
パペットマスター
ホスト名: server.itzgeek.local
IPアドレス: 192.168.1.10
パペットクライアント
ホスト名: client.itzgeek.local
IPアドレス: 192.168.1.20
前提条件
NTPのインストール
puppetマスターは、クライアントノードからの証明書に署名するための認証局として機能するため、時刻を正確に設定する必要があります。この目的でNTPを使用します。
NTPパッケージをインストールし、アップストリームNTPサーバーとのタイム同期を実行します。
sudo apt update sudo apt install -y ntp ntpdate sudo ntpdate -u 0.ubuntu.pool.ntp.org
タイムゾーン
を使用して、すべてのノードが同じタイムゾーンにあることを確認してください。
date
出力:
Tue Sep 4 22:28:34 EDT 2018
不一致がある場合は、それに応じて変更してください。利用可能なタイムゾーンを一覧表示します。
timedatectl list-timezones
次のコマンドを使用してタイムゾーンを設定します。
sudo timedatectl set-timezone America/New_York
DNS
Puppetエージェントはホスト名を使用してPuppetサーバーと通信します。したがって、エージェントノードがPuppetサーバーのホスト名を解決できることを確認してください。 /etc/hosts
を設定します ファイルまたはDNSサーバー。
/ etc / hostsファイル:
sudo nano /etc/hosts
以下の行のようなホストエントリを追加します。
192.168.1.10 server.itzgeek.local server
puppetマスター/エージェントをインストールするには、すべてのノードにpuppetリポジトリを設定する必要があります。
### Ubuntu 18.04 ### wget https://apt.puppetlabs.com/puppet6-release-bionic.deb sudo dpkg -i puppet6-release-bionic.deb sudo apt update ### Ubuntu 16.04 ### wget https://apt.puppetlabs.com/puppet6-release-xenial.deb sudo dpkg -i puppet6-release-xenial.deb sudo apt update ### Debian 9 ### wget https://apt.puppetlabs.com/puppet6-release-stretch.deb sudo dpkg -i puppet6-release-stretch.deb sudo apt update
Ubuntu 18.04で、PuppetServerに必要なパッケージを含むユニバースリポジトリを有効にします。
Puppetサーバーのインストール
Puppet Serverは、Puppetマスターノードで実行されるサーバーソフトウェアです。以下のコマンドを使用してPuppetサーバーをインストールします。
sudo apt install -y puppetserver
これでPuppetサーバーがインストールされました。まだPuppetサーバーサービスを開始しないでください。
Puppetサーバーの構成
メモリ割り当て(オプション)
デフォルトでは、PuppetサーバーのJVMは2GBのRAMを使用するように構成されています。マスターノードのメモリ量に応じて、メモリ使用量をいつでもカスタマイズできます。接続されているすべてのノードを管理するのに十分であることを確認してください。
メモリ割り当ての値を変更するには、以下のファイルを編集してください。
sudo nano /etc/default/puppetserver
以下のように値を変更してください。
差出人:
JAVA_ARGS="-Xms2g -Xmx2g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
宛先:
512MBの場合は、以下の設定を使用してください。
JAVA_ARGS="-Xms512m -Xmx512m -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
人形の構成
簡単な構成
Puppet Serverは設定を必要とせず、puppetserverサービスを開始するだけです。デフォルト設定を使用します。
例: dns_alt_names(puppet、<サーバーのホスト名>) 。
Puppetは、システムのホスト名とpuppetをPuppetServerのDNS代替名として使用します。したがって、puppet-agent構成ファイルでserver=詳細設定(オプション)
ここでは、要件に合わせてPuppetServerの設定を変更します。
sudo nano /etc/puppetlabs/puppet/puppet.conf
以下の行を配置します。環境に応じて変更してください。
[master] dns_alt_names = server.itzgeek.local,server [main] certname = server.itzgeek.local server = server.itzgeek.local environment = production runinterval = 15m
Puppetサーバーを起動する
PuppetServerのルートおよび中間署名CAを生成します。
sudo /opt/puppetlabs/bin/puppetserver ca setup
出力:
Generation succeeded. Find your files in /etc/puppetlabs/puppet/ssl/ca
Puppetサーバーを起動して有効にします。
sudo systemctl start puppetserver sudo systemctl enable puppetserver
PuppetAgentのインストール
前に示したようにエージェントノードにPuppetリポジトリをセットアップしてから、以下のコマンドを使用してpuppetエージェントをインストールします。
sudo apt install -y puppet-agent
Puppetエージェントは、デフォルト設定の一部を使用してマスターノードに接続します。ただし、パペット構成ファイルを編集し、パペットマスター情報を設定する必要があります。
sudo nano /etc/puppetlabs/puppet/puppet.confサーバーを設定します マスターホスト名と証明書名による値 クライアントのホスト名として。私の場合、サーバーはserver.itzgeek.localで、certnameはclient.itzgeek.localです。
[main] certname = client.itzgeek.local server = server.itzgeek.local environment = production runinterval = 15m
runintervalの値を変更できます 要件によって異なります。これは、エージェントが2つのカタログ要求間で待機する時間を制御します。
値は、秒(30秒または30)、分(30m)、または時間(1時間)で設定できます。ノードでパペットエージェントを起動し、システムの起動時に自動的に起動するようにします。
sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
以下のような出力が得られます。
Notice: /Service[puppet]/ensure: ensure changed 'stopped' to 'running' service { 'puppet': ensure => 'running', enable => 'true', }に変更
マスターサーバーでエージェントノード証明書に署名する
エージェント/マスター展開では、管理者は、各エージェントノードが構成をフェッチする前に、そのノードの証明書要求を承認する必要があります。エージェントノードは、初めて実行を試みるときに証明書を要求します。
puppetマスターサーバーにログインし、以下のコマンドを実行して未処理のリクエストを表示します。
sudo /opt/puppetlabs/bin/puppetserver ca list
出力:
Requested Certificates: client.itzgeek.local (SHA256) 07:B1:57:5B:DE:AF:9F:4A:DF:4A:D1:CD:C4:2A:F9:9F:D9:76:CD:C5:F1:60:09:9C:B4:BA:76:D6:7B:3C:6F:0D
以下のコマンドを実行して、リクエストに署名します。
sudo /opt/puppetlabs/bin/puppetserver ca sign --certname client.itzgeek.local
出力:
Successfully signed certificate request for client.itzgeek.local
1つのコマンドですべての証明書署名要求に署名します。
sudo /opt/puppetlabs/bin/puppetserver ca sign --all
場合によっては、特定のノードの証明書を取り消して、それらを読み戻す必要があります。
sudo /opt/puppetlabs/bin/puppetserver ca revoke --certname <AGENT_NAME>
署名されたリクエストと署名されていないリクエストをすべて一覧表示します。マスターサーバーで実行する必要があります。
sudo /opt/puppetlabs/bin/puppetserver ca list --all
出力:
Signed Certificates: server.itzgeek.local (SHA256) E5:A4:93:45:EF:82:3B:FF:6E:36:D2:9A:F0:75:15:67:94:33:06:2F:84:9F:D1:45:CE:C6:1C:86:D4:57:B8:25 alt names: ["DNS:server.itzgeek.local", "DNS:server", "DNS:server.itzgeek.local"] client.itzgeek.local (SHA256) AB:3B:F0:D0:62:69:50:DD:50:45:CE:AD:A5:2C:4F:9E:EB:19:D6:C6:9C:34:A3:C5:CD:84:8F:BA:50:04:4A:D0
PuppetAgentを確認する
Puppetマスターがクライアント証明書に署名したら、クライアントマシンで次のコマンドを実行してテストします。
sudo /opt/puppetlabs/bin/puppet agent --test
出力:
Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Retrieving locales Info: Caching catalog for client.itzgeek.local Info: Applying configuration version '1558888335' Notice: Applied catalog in 0.02 seconds
マニフェストを作成
マニフェストは、Puppetの宣言型言語またはRubyDSLで記述されたクライアント構成を含むデータファイルです。このセクションでは、クライアントマシン上にディレクトリとファイルを作成するための基本的なマニフェストについて説明します。
メインのパペットマニフェストファイルは、 / etc / puppetlabs / code / environment /production /manifestsにあります。 ディレクトリ。 新しいマニフェストファイルを作成します。
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp
次に、マニフェストに次の行を追加して、クライアントノードにディレクトリを作成します。
node 'client.itzgeek.local' { # Applies only to mentioned node. If nothing mentioned, applies to all. file { '/tmp/puppetdir': # Resource type file ensure => 'directory', # Create as a diectory owner => 'root', # Ownership group => 'root', # Group Name mode => '0755', # Directory permissions } }ノード変数が設定されていない場合、このマニフェストはパペットマスターに接続されているすべてのノードに適用されます。
次に、クライアントノードで次のコマンドを実行して構成を取得します。
sudo /opt/puppetlabs/bin/puppet agent --test
出力:
Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Retrieving locales Info: Caching catalog for client.itzgeek.local Info: Applying configuration version '1558888460' Notice: /Stage[main]/Main/Node[client.itzgeek.local]/File[/tmp/puppetdir]/ensure: created Notice: Applied catalog in 0.16 seconds
クライアントノードにディレクトリが作成されていることを確認します。
ls -ld /tmp/puppetdir/
出力:
drwxr-xr-x 2 root root 4096 May 26 22:03 /tmp/puppetdir/
コンテンツを含むファイルを作成するためのマニフェストを作成しましょう。
node 'client.itzgeek.local' { # Applies only to mentioned node. If nothing mentioned, applies to all. file { '/tmp/puppetfile': # Resource type file ensure => 'present', # Make sure it exists owner => 'root', # Ownership group => 'root', # Group Name mode => '0644', # File permissions content => "This File is created by Puppet Server" # Content of the file } }
前の例のようにクライアントマシンに移動してカタログを取得するか、15分待ってカタログを自動適用することができます。
結論
この投稿が、Ubuntu 18.04 / Ubuntu 16.04&Debian9にPuppetServerをインストールするのに役立つことを願っています。コメントセクションでフィードバックを共有してください。