PUPPET 入門
2017.4
富田 章義
目次
 Puppetとは
 Puppetの基本動作
 Puppetのインストール方法(Puppet 4+Puppet DB)
 3つの基本リソースを覚えよう
 APPENDIX 1 . Puppet Quick Install
 APPENDIX 2 . Puppet User Group
自己紹介
自己紹介
 名前 富田 章義
 所属 株式会社ネットワールド SI技術本部 統合基盤技術部 データセンタソリューション課
 Puppetとの関係
Puppet Enterpriseの有償版のプリセールスを実施
 プライベート(趣味など)
D.I.Yなど、自分で作ることが好き
マイコンを使った電子工作からウッドデッキまで何でも自作します。
PUPPETとは
Puppetとは
 よく言われているのは?
自動化
構成管理ツール
 実際は、それ以上のことが出来ます。
サーバの状態収集(Fact機能)
レポート機能(コンプライアンスやセキュリティの補助)
ほかのシステムとの連携するAPI
などなど・・・実際に使ってみると、適用範囲は非常に広い
PUPPETの基本動作
Puppetの基本動作
Puppetエージェント
Puppetマスター
① Fact
(ファクト)
② Catalog
(カタログ)
③ Report
(レポート)
④ Report output
(レポート出力)
他のシステム
Puppetの基本動作
Puppetエージェント
Puppetマスター
① Fact
(ファクト)
② Catalog
(カタログ)
③ Report
(レポート)
④ Report output
(レポート出力)
他のシステム
①エージェントの情報を収集し、Factを作ります。
収集される情報は、CPUの種類、OSの種類、バー
ジョン、メモリ情報、IPアドレスなどが含まれます。
収集した情報は、yaml形式でFactとしてPuppetマ
スターに送られます。
Puppetの基本動作
Puppetエージェント
Puppetマスター
① Fact
(ファクト)
② Catalog
(カタログ)
③ Report
(レポート)
④ Report output
(レポート出力)
他のシステム
②Factを受け取ったPuppetマスターは、マニフェ
ストやPuppet DBなどを元に、yaml形式のCatalog
を作ります。
この中で、ファンクションなどのスクリプト動作は
ここで処理され、リソースのみに集約されます。
Puppet
DB
マニフェスト
Puppetの基本動作
Puppetエージェント
Puppetマスター
① Fact
(ファクト)
② Catalog
(カタログ)
③ Report
(レポート)
④ Report output
(レポート出力)
他のシステム
③カタログに記載されたリソースを元に、必要に
応じて変更を行います。この実行結果をReportとし
てyaml形式でPuppetマスターに送ります。
Puppetの基本動作
Puppetエージェント
Puppetマスター
① Fact
(ファクト)
② Catalog
(カタログ)
③ Report
(レポート)
④ Report output
(レポート出力)
他のシステム
④他のシステムへReportの結果を基にアクション
を行うことが出来ます。
具体的には、メール通知、Syslog送信、REST APIな
どの動作を行います。
PUPPET 4のインストール方法
Puppet 4のインストール
 Puppet OSS版
 Puppet社のリポジトリからインストール
Redhat系 yumリポジトリ : https://yum.puppetlabs.com/
Debian系 aptリポジトリ :https://apt.puppetlabs.com/
(注意) OS標準のリポジトリからダウンロードを行った場合は、Puppet3以下がインストールされることが多いので、
Puppet社のリポジトリからインストールすることが望ましい
 Puppet Enterprise(10ノードまでは無料)
 パッケージ化されたアーカイブファイルからインストール
https://puppet.com/download-puppet-enterprise
 Puppet Learning VM(学習専用)
 OVAパッケージとしてPuppetがインストール済みの環境を提供
(注意)
OSはCent OSで既にインストールされています。
https://puppetlabs.com/download-learning-vm
各インストール方法は、Appendixを参照
3つの基本リソースを覚えよう
3つの基本リソースを覚えよう
 サーバの構築するときの手順を見ると「パッケージソフトのインストール」「設定ファイルの編集」「サービ
スの起動(再起動)」に分割できます。これらの、作業をPuppetで行うため、Puppetは3つの基
本的リソースが用意されています。
 packageリソース
パッケージソフトをインストールすることが出来ます。他にも、バージョンアップやアンインストールなどが
出来ます。
 fileリソース
設定ファイルを作る(編集する)ことが出来ます。他にも、ディレクトリの操作やリンクの作成、ファイ
ルの削除などを行うことが出来ます。
 serviceリソース
サービスの起動(再起動)を行うことが出来ます。他にも、サービスの停止やOSの起動時の自動
起動設定変更などを行うことが出来ます。
3つの基本リソースを覚えよう
 使い方1(基本的な設定ファイルを作る、まずは定型文として覚えてください)
以下のファイルをPuppet Master上に作ろう
/etc/puppetlabs/code/environments/production/manifests/node1.pp
node "node1" { # Puppetエージェントの名前(node1を指定)
include role::basic
}
/etc/puppetlabs/code/environments/production/modules/role/manifests/basic.pp
class role::basic{
include profile::basic
}
/etc/puppetlabs/code/environments/production/modules/profile/manifests/basic.pp
class profile::basic{
class{"ntp":}
}
3つの基本リソースを覚えよう
 使い方2(NTPの定義を行おう)
/etc/puppetlabs/code/environments/production/modules/ntp/manifests/init.
pp
class ntp{
package { 'ntpd' :
ensure => installed,
}
file { '/etc/ntp.conf':
ensure => file,
sourece =>["puppet:///modules/ntp/ntp.conf/${facts['hostname']}.conf",
"puppet:///modules/ntp/ntp.conf/common.conf"],
notify => Service['ntpd']
}
service { 'ntpd' :
ensure => running,
}
}
3つの基本リソースを覚えよう
 使い方3(ntp.confの設定)
/etc/puppetlabs/code/environments/production/modules/ntp/files/ntp.conf/c
ommon.conf
restrict default ignore
restrict 127.0.0.1
server 192.168.1.11
authentication no
 /etc/puppetlabs/code/environments/production/modules/ntp/files/ntp.conf/n
ode1.conf
restrict default ignore
restrict 127.0.0.1
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap noquery
server 127.127.1.0
fudge 127.127.1.0 stratum 9
authentication no
3つの基本リソースを覚えよう
 使い方2(NTPの定義を行おう)
/etc/puppetlabs/code/environments/production/modules/ntp/manifests/init.
pp
class ntp{
package { 'ntpd' :
ensure => installed,
}
file { '/etc/ntp.conf':
ensure => file,
sourece =>["puppet:///modules/ntp/ntp.conf/${facts['hostname']}.conf",
"puppet:///modules/ntp/ntp.conf/common.conf"],
notify => Service['ntpd']
}
service { 'ntpd' :
ensure => running,
}
}
Package リソースの指定例、package の後にインストールするyumやaptリ
ポジトリのパッケージ名を入力することで、パッケージをインストールし
ます。
※ 緑色の部分を入れ替えます。
3つの基本リソースを覚えよう
 使い方2(NTPの定義を行おう)
/etc/puppetlabs/code/environments/production/modules/ntp/manifests/init.
pp
class ntp{
package { 'ntpd' :
ensure => installed,
}
file { '/etc/ntp.conf':
ensure => file,
sourece =>["puppet:///modules/ntp/ntp.conf/${facts['hostname']}.conf",
"puppet:///modules/ntp/ntp.conf/common.conf"],
notify => Service['ntpd']
}
service { 'ntpd' :
ensure => running,
}
}
file リソースの指定例、file の後に設定ファイルを絶対パスで指定します。
設定内容は、Puppetサーバからダウンロードするようにしています。
ノードごとに設定が異なる場合は、node名の設定ファイルを利用し、ない
場合はcommonという名前のファイルが適用されます。
3つの基本リソースを覚えよう
 使い方2(NTPの定義を行おう)
/etc/puppetlabs/code/environments/production/modules/ntp/manifests/init.
pp
class ntp{
package { 'ntpd' :
ensure => installed,
}
file { '/etc/ntp.conf':
ensure => file,
sourece =>["puppet:///modules/ntp/ntp.conf/${facts['hostname']}.conf",
"puppet:///modules/ntp/ntp.conf/common.conf"],
notify => Service['ntpd']
}
service { 'ntpd' :
ensure => running,
}
}
Service リソースの指定例、serviceの後の名前のサービスを起動を行うよう
に設定しています。
緑色の部分はsystemctl で指定するサービス名を指定します。
Service リソース名と一致させること
で、設定ファイルを変更したときに自
動的にサービスを再起動する
3つの基本リソースを覚えよう
 使い方3(ntp.confの設定)
/etc/puppetlabs/code/environments/production/modules/ntp/files/ntp.conf/c
ommon.conf
restrict default ignore
restrict 127.0.0.1
server 192.168.1.11
authentication no
 /etc/puppetlabs/code/environments/production/modules/ntp/files/ntp.conf/
node1.conf
restrict default ignore
restrict 127.0.0.1
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap noquery
server 127.127.1.0
fudge 127.127.1.0 stratum 9
authentication no
NTPの設定ファイルの場所
このファイルの内容がPuppetエー
ジェントにコピーされます。
共通設定ではなく、ノード名のファイ
ルを作ることで個別の設定ファイルを
指定可能
※ NTPサーバとしての動作を追加
3つの基本リソースを覚えよう
 リソースの詳細は、以下のURLで確認できます(英語)
https://docs.puppet.com/puppet/latest/type.html
(補足)
必要なリソースがない場合は、Rubyで独自にプログラムを行いカスタムリソースとして増やすことも
出来ます。いくつかのカスタムリソースは、Puppet Forge からダウンロードして使うことが可能です。
APPENDIX 1 : PUPPET QUICK
INSTALL
1. Redhat系 OSS
1. インストール前準備(Puppet Master/Puppet Agent共通)
Puppet社のYumリポジトリの登録
# rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-
7.noarch.rpm
※ elの後の数字は、OSのバージョンを指定、例ではRedhat 7.x 又はCentOS 7.xの場合
2. ホスト名の編集
デフォルトでは、ホスト名がノード名として利用されるため、事前に編集しておきます。
* ホスト名はDNSで名前解決又は、/etc/hostsに記載が必要です。
* 確認は、hostname –fで確認してください。
1. Redhat系 OSS
Puppet Master(Puppet Server)のインストール
3. yumからのインストール
# yum install puppetserver
* PATHを更新するため、シェルへ再ログインする
4. Puppet Serverの開始
# puppet resource service puppetserver ensure=running
* デフォルトでは、2GBのメモリを必要とするため、スモールスタートする場合は
[/etc/sysconfig/puppetserver]ファイルの]JAVA_ARGS=“-Xms2g –Xmx2g”]を
[JAVA_ARGS=“-Xms512m –Xmx512m”]に編集してください。
5. Puppet DBモジュールのダウンロード
# puppet module install puppetlabs-puppetdb
1. Redhat系 OSS
6. Puppet DB用 マニフェストの編集して、以下の行を追加
# vi /etc/puppetlabs/code/environment/production/manifest/site.pp
node <puppet masterのホスト名> {
class { ‘puppetdb‘ :}
class { ‘puppetdb::master::config’ : }
}
7. Puppet DBのインストール
# puppet config set server `hostname -f` --section agent
# puppet agent –t
(補足)
TCP 8140ポートがファイアウォールなどでブロックされている場合は、解除が必要です。
1. Redhat系 OSS
Puppet Agentのインストール
※ puppet masterと同じように
8. yumからのインストール
# yum install puppet-agent
* PATHを更新するため、シェルへ再ログインする
9. /etc/hostsファイルに、puppet masterのFQDN名とIPアドレスを登録する
10. puppet masterの名前を登録する
# puppet config set server <puppet masterのFQDN> --section agent
11. puppet masterに証明書のリクエストを送信する
# puppet agent –t
1. Redhat系 OSS
11. puppet master上で、Agentからの証明書リクエストを許可
# puppet cert list
<node名を確認>
# puppet cert sign <node名>
(補足)
puppet agentから強制的にリクエストを送る場合はpuppet agent上で
「puppet agent -t」と入力します。
2. Debian系 OSS
1. インストール前準備(Puppet Master/Puppet Agent共通)
Puppet社のAptリポジトリの登録
# wget https://apt.puppetlabs.com/puppetlabs-release-pc1-wheezy.deb
# dpkg -i puppetlabs-release-pc1-wheezy.deb
※whezzyは、OSの種類に対応するリポジトリ名に変更してください
2. ホスト名の編集
デフォルトでは、ホスト名がノード名として利用されるため、事前に編集しておきます。
* ホスト名はDNSで名前解決又は、/etc/hostsに記載が必要です。
* 確認は、hostname –fで確認してください
2. Debian系 OSS
Puppet Master(Puppet Server)のインストール
3. aptからのインストール
# apt-get install puppetserver
* PATHを更新するため、シェルへ再ログインする
4. Puppet Serverの開始
# puppet resource service puppetserver ensure=running
* デフォルトでは、2GBのメモリを必要とするため、スモールスタートする場合は
[/etc/default/puppetserver]ファイルの]JAVA_ARGS="-Xms2g –Xmx2g"]を
[JAVA_ARGS="-Xms512m –Xmx512m"]に編集してください。
5. Puppet DBモジュールのダウンロード
# puppet module install puppetlabs-puppetdb
2. Debian系 OSS
6. Puppet DB用 マニフェストの編集して、以下の行を追加
# vi /etc/puppetlabs/code/environment/production/manifest/site.pp
node <puppet masterのホスト名> {
class { ‘puppetdb‘ :}
class { ‘puppetdb::master::config’ : }
}
7. Puppet DBのインストール
# puppet agent –t
(補足)
TCP 8140ポートがファイアウォールなどでブロックされている場合は、解除が必要です。
2. Debian系 OSS
Puppet Agentのインストール
※ puppet masterと同じように
8. apt-getからのインストール
# apt-get install puppet-agent
* PATHを更新するため、シェルへ再ログインする
9. /etc/hostsファイルに、puppet masterのFQDN名とIPアドレスを登録する
10. puppet masterの名前を登録する
# puppet config set server <puppet masterのFQDN> --section agent
11. puppet masterに証明書のリクエストを送信する
# puppet agent –t
2. Debian系 OSS
11. puppet master上で、Agentからの証明書リクエストを許可
# puppet cert –list
<node名を確認>
# puppet cert sign <node名>
(補足)
puppet agentから強制的にリクエストを送る場合はpuppet agent上で
「puppet agent -t」と入力します。
3. Puppet Enterprise
Puppet Enterpriseのインストールは、Redhat系、Debian系共に共通です。
1. ホスト名の編集(Puppet Master/ Agent共通)
デフォルトでは、ホスト名がノード名として利用されるため、事前に編集しておきます。
確認は、host –fで確認してください
Puppet Masterのインストール
2. http://www.puppet.com/ja の無料で試すから、イメージをダウンロードしてPuppet
Masterをインストールするサーバへファイルをコピーする
3. ファイルの解凍
# tar –xf <puppet enterpriseのインストールイメージ>
4. インストーラーの起動
# ./puppet-enterprise-installer
3. Puppet Enterprise
5. 選択肢で1を選択して、GUIモードでウィザードを実行
6. PCなどのブラウザから、https://<puppet マスターのIP>:3000に接続して、ウィザードどおりに
インストールを実施
ウィザードが終了すれば、設定終了です。
https://<puppet マスターのIP> に接続することでPEコンソールが利用できます。
3. Puppet Enterprise
Puppet Agentのインストール
7. /etc/hostsファイルに、puppet masterのFQDN名とIPアドレスを登録する
8. エージェントサーバから、以下のコマンドを入力
# curl -k https://<MASTER
HOSTNAME>:8140/packages/current/install.bash | sudo bash
9. puppet master上で、Agentからの証明書リクエストを許可
# puppet cert –list
<node名を確認>
# puppet cert sign <node名>
* GUIでも実施可能
4. Puppet Learning VM
 内容はPuppet Enterpriseと同じですが、既にPuppet マスターがインストールされたOVAファイル
で提供されています。
「3.Puppet Enterprise」の「手順7」までが終了した状態です。
※ コンソールにログインパスワードが表示されます。
(補足)
httpでLearning VMアクセスすることでPuppetを学習するためのテキスト(英語)が表示されます。
APPENDIX 2 : PUPPET USER GROUP
Puppet User Group Tokyo
Puppet User Group 関連リンク集
 PUG Compass
https://japanpuppetusergroup.connpass.com
 Meetup
https://www.meetup.com/ja-JP/meetup-group-uKfObeFg/
 Slack
http://slack.puppet.com/
※ Joinの後にJapaneseのグループに参加

Puppet入門

Editor's Notes

  • #10 Chefでいう、Ohai
  • #11 Chefでいう、Ohai
  • #12 Chefでいう、Ohai
  • #13 Chefでいう、Ohai
  • #18 共通的な部分のため、