Puppetは、中央の場所から数百のクライアントシステムの構成を管理するのに役立つオープンソースの構成管理ツールです。
Puppetは、反復的なタスクに費やす時間を削減することで管理者の作業を楽にし、他の作業に集中できるようにします。また、展開された構成がインフラストラクチャ全体で一貫していることを保証します。
Puppetは、Linux、Mac、BSD、Solaris、およびWindowsベースのコンピューターシステムで使用でき、Apacheライセンスの下でリリースされ、「Ruby」言語で記述されています。
このガイドは、CentOS 7 /RHEL7にPuppet6.xをインストールするのに役立ちます。
アーキテクチャ
エージェント/マスター
このアーキテクチャでは、管理対象ノードはバックグラウンドサービスとしてパペットエージェントソフトウェアを実行します。一方、1つ以上のサーバーがマスターアプリケーションを実行します。 Puppetサーバー。
人形エージェントは定期的に事実を人形マスターに送信し、カタログを要求します。マスターは、アクセスできる情報のソースを使用して、その特定のノードのカタログをコンパイルして返します。
スタンドアロンアーキテクチャ
このアーキテクチャでは、各管理対象ノードに構成情報のコピーがあり、カタログをコンパイルします。 puppetapplyアプリケーションをcronジョブとして実行します。
環境
ここでは、サーバー/エージェントアーキテクチャでパペットを構成します。
パペットマスター
ホスト名: server.itzgeek.local
IPアドレス: 192.168.1.10
オペレーティングシステム: CentOS 7.6
パペットクライアント
ホスト名: client.itzgeek.local
IPアドレス: 192.168.1.20
オペレーティングシステム: CentOS 7.6
前提条件
NTPのインストール
Puppetマスターサーバーマスターが認証局として機能するため、マスターノードとクライアントノードのタイミングはアップストリームタイムサーバーと正確に同期している必要があります。
(時間が間違っていると、他のノードが期限切れとして扱う、遠い過去または未来の日付からエージェント証明書を誤って発行する可能性があります。)
NTPパッケージをインストールし、アップストリームNTPサーバーとのタイム同期を実行します。
yum -y install ntpdate ntpdate 0.centos.pool.ntp.orgdate を使用して、すべてのノードが同じタイムゾーンにあることを確認します 指図。不一致がある場合は、それに応じて変更してください。
読む :CentOS 7 /RHEL7でタイムゾーンを変更する方法
DNS
Puppetエージェントはホスト名を使用してPuppetサーバーと通信します。したがって、エージェントノードが/etc/hosts
を使用してPuppetサーバーのホスト名を解決できることを確認してください。 ファイルまたはDNSサーバー。
Puppetリポジトリのセットアップ
Puppetサーバー/エージェントをインストールするには、すべてのノードにPuppetリポジトリを追加する必要があります。
マスターノードとエージェントノードの両方にPuppetのリポジトリを設定します。rpm -Uvh https://yum.puppet.com/puppet6-release-el-7.noarch.rpm
Puppetサーバーのインストール
Puppet Serverは、Puppetマスターノードで実行されるサーバーソフトウェアです。 Puppetmasterは、構成を管理対象ノード(puppet-agent)にプッシュします。
以下のコマンドを使用してPuppetサーバーをインストールします。
yum install -y puppetserver
これでPuppetサーバーがインストールされました。まだPuppetサーバーサービスを開始しないでください。
Puppetサーバーの構成
メモリ割り当て
デフォルトでは、PuppetサーバーのJVMは2GBのメモリを使用するように構成されています。マスターノードで使用可能なメモリの量に応じて、変更できます。接続されているすべてのノードを管理するのに十分であることを確認してください。
メモリ割り当ての値を変更するには、以下のファイルを編集してください。
vi /etc/sysconfig/puppetserver
値を変更します。
差出人:
JAVA_ARGS="-Xms2g -Xmx2g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
宛先:
512 MBの場合は、以下の設定を使用してください。
JAVA_ARGS="-Xms512m -Xmx512m -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
埋め込みWebサーバー
Puppet Serverは、サービスのJVMプロセスに組み込まれたJettyベースのWebサーバーを使用します。 Webサーバーを構成または有効にする必要はありません。箱から出して動作します。実稼働レベルの負荷の下で良好に機能します。
埋め込まれたWebサーバーの設定は、webserver.confで変更できます。外部CAを使用している場合、または非標準ポートでPuppet Serverを実行している場合は、このファイルを編集する必要がある場合があります。
人形の構成
簡単な構成
Puppetサーバーは構成を必要としません。 Puppetサーバーサービスを開始するだけです。デフォルト設定を使用します。
デフォルトのPuppetサーバーのホスト名(dns_alt_names)はpuppetであるため、puppet-agent構成ファイルでserver=puppetを使用する必要があります。パペットマスターのホスト名を変更する場合は、以下の手順に従ってください。
詳細設定(オプション)
ここでは、要件に合わせてPuppetMasterの設定を変更します。
vi /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 = 1h
Puppetサーバーを起動する
PuppetServerのルートおよび中間署名CAを生成します。
puppetserver ca setup
出力:
Generation succeeded. Find your files in /etc/puppetlabs/puppet/ssl/capuppetserver:コマンドが見つからない場合は、ターミナルでsource /etc/profile.d/puppet-agent.shを実行するか、現在のセッションからログアウトして再度ログインします。
Puppetサーバーを起動して有効にします。
systemctl start puppetserver systemctl enable puppetserver
ファイアウォール
Puppetマスターはポート8140でリッスンするため、管理対象ノードがマスターに接続できるようにファイアウォールを構成します。
firewall-cmd --permanent --add-port=8140/tcp firewall-cmd --reload
PuppetAgentのインストール
以下のコマンドを使用して、クライアントにpuppetエージェントをインストールします。
yum install -y puppet-agent
Puppetエージェントは、デフォルト設定の一部を使用してマスターノードに接続します。ただし、パペット構成ファイルを編集し、パペットマスター情報を設定する必要があります。
サーバーを設定します マスターノード名ごとの値。私の場合、サーバーは server.itzgeek.local 、および証明書名 私のクライアントのホスト名です( client.itzgeek.local )。vi /etc/puppetlabs/puppet/puppet.conf
以下のように設定します。
[main] certname = client.itzgeek.local server = server.itzgeek.local environment = production runinterval = 1h
runintervalの値を変更できます 要件によって異なります。値は秒(10または10秒)、分(10分)、時間(1時間)で設定できます。 この設定は、エージェントが2つのカタログ要求間で待機する時間を制御します。
ノードでパペットエージェントを起動し、システムの起動時に自動的に起動するようにします。
puppet resource service puppet ensure=running enable=true
出力:
Notice: /Service[puppet]/ensure: ensure changed 'stopped' to 'running' service { 'puppet': ensure => 'running', enable => 'true', }に変更 puppet:コマンドが見つからない場合は、ターミナルでsource /etc/profile.d/puppet-agent.shを実行するか、現在のセッションからログアウトして再度ログインします。
マスターサーバーでエージェントノード証明書に署名する
エージェント/マスターの展開では、管理者は各ノードからの証明書要求を承認して、構成をフェッチできるようにする必要があります。エージェントノードは、実行しようとすると初めて証明書を要求します。
puppetマスターサーバーにログインし、以下のコマンドを実行して未処理のリクエストを表示します。
puppetserver ca list
出力:
client.itzgeek.local (SHA256) A6:0E:93:51:FF:53:C8:FA:63:70:72:53:B6:1E:1B:A8:49:79:37:7E:57:00:02:AE:32:44:22:BE:97:F5:08:09
puppetcertsignコマンドを実行してリクエストに署名します。
puppetserver ca sign --certname client.itzgeek.local
出力:
Successfully signed certificate request for client.itzgeek.local
これで、パペットマスターはクライアントマシンと通信してノードを制御できるようになります。
ノードからの複数の署名要求がある場合は、1つのコマンドですべての要求に署名できます。
puppetserver ca sign --all
場合によっては、特定のノードの証明書を取り消して、それらを読み戻す必要があります。
<ホスト名>を置き換えます クライアントのホスト名を使用します。
puppetserver ca revoke --certname <AGENT_NAME>
以下のコマンドを使用して、署名されたリクエストと署名されていないリクエストをすべて一覧表示できます。
puppetserver ca list --all
出力:
server.itzgeek.local (SHA256) 6E:90:94:6F:31:4F:8C:2A:28:90:D5:C0:6D:71:18:65:5E:86:DE:1C:16:9C:7C:30:8F:BF:DA:87:2D:F7:2C:26 alt names: ["DNS:server.itzgeek.local", "DNS:server", "DNS:server.itzgeek.local"] client.itzgeek.local (SHA256) A6:08:36:5C:DB:73:0D:16:BA:5B:0D:72:76:FD:C7:31:DD:87:6F:EC:D4:4F:7A:87:E9:4F:73:70:D0:09:6E:61
Puppetクライアントを確認する
Puppetサーバーがクライアント証明書に署名したら、クライアントマシンで次のコマンドを実行してテストします。
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 '1558878523' Notice: Applied catalog in 0.03 seconds
最初のマニフェストの作成
マニフェストは、Puppetの宣言型言語またはRubyDSLで記述されたクライアント構成を含むデータファイルです。このセクションでは、管理対象ノードにディレクトリとファイルを作成するための基本的なマニフェストについて説明します。
メインのパペットマニフェストファイルは、/etc/puppetlabs/code/environments/production/manifests/site.ppにあります。
vi /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/puppetesttdir': # Resource type file ensure => 'directory', # Create as a diectory owner => 'root', # Ownership group => 'root', # Group Name mode => '0755', # Directory permissions } }
次に、クライアントノードで次のコマンドを実行して構成を取得します。
puppet agent --test
出力:
Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for client.itzgeek.local Info: Applying configuration version '1472165498' Notice: /Stage[main]/Main/Node[client.itzgeek.local]/File[/tmp/puppetesttdir]/ensure: created Notice: Applied catalog in 0.03 seconds
管理対象ノードにディレクトリが作成されていることを確認します。
[root@client ~]# ls -ld /tmp/puppetesttdir drwxr-xr-x. 2 root root 6 May 26 09:57 /tmp/puppetesttdir
コンテンツを含むファイルを作成するためのマニフェストを作成して、もう一度テストを行いましょう。
node 'client.itzgeek.local' { # Applies only to mentioned node; if nothing mentioned, applies to all. file { '/tmp/puppettestfile': # 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" } }
前の例に示すように、クライアントマシンに移動してカタログを取得するか、 runinterval に応じて、Puppetエージェントが定期的にPuppetServerからマニフェストを取得します。 構成ファイルで設定します。
結論
CentOS 7 / RHEL 7にPuppetサーバーとエージェントをインストールする方法を学んだことを願っています。また、クライアントノードにディレクトリを作成するための簡単なマニフェストファイルを作成することも学びました。コメントセクションでフィードバックを共有してください。