まず、機能するネットワークと設定済みのDNSを備えたクリーンなUbuntuが必要です。
その結果、以下を取得する必要があります。
- どこにでもインストールされたPuppet 3rdバージョン
- git共有リポジトリの構成
- r10kによって制御される動的環境
- PuppetDBのサポート
- Hieraのサポート
このマニュアルはかなり長いです すべての設定は手動で行われるため、後で結果を簡単に使用して自分で調整することができます。 1つの例外はPuppetDBです。PuppetDBは、手動ではなく、Puppet Labsの独自のモジュールを使用して簡単にインストールできます。
特に指定のない限り、すべてのコマンドはPuppetサーバーでrootとして実行されると想定されています。
Puppetをインストールする
パッケージをインストールして、Puppet Labsリポジトリを追加します。
source /etc/lsb-release wget https://apt.puppetlabs.com/puppetlabs-release-$DISTRIB_CODENAME.deb dpkg -i puppetlabs-release-$DISTRIB_CODENAME.deb rm puppetlabs-release-$DISTRIB_CODENAME.deb
PuppetおよびPuppet Masterをインストールします。
apt-get update apt-get install puppet puppetmaster
翻訳者からのメモ:Puppet Labsのドキュメントでは 、puppetmaster-passengerのインストールを推奨しています。
パペットのセットアップ
環境設定を配置するディレクトリを作成し、
puppet
グループに書き込み権限を付与します。
mkdir /etc/puppet/environments chgrp puppet /etc/puppet/environments chmod 2775 /etc/puppet/environment
このディレクトリの内容を直接編集することはありません
r10k
はgitフックを使用して編集します。
ここで、
/etc/puppet/puppet.conf
ファイルでいくつかの設定を行う必要があります。 良い例を次に示します:
[main] environment = production confdir = /etc/puppet logdir = /var/log/puppet vardir = /var/lib/puppet ssldir = $vardir/ssl rundir = /var/run/puppet factpath = $vardir/lib/facter templatedir = $confdir/templates pluginsync = true [agent] environment = production report = true show_diff = true [master] environment = production manifest = $confdir/environments/$environment/manifests/site.pp modulepath = $confdir/environments/$environment/modules:$confdir/environments/$environment/site # Passenger ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY
翻訳者からの注意:バージョン3.6以降、変数
manifest
/
modulepath
/
config_version
は非推奨になりました 。
DNSで「
puppet
」という名前の定義をまだ構成していない場合は、
server = your.server.com
を
[main]
セクションに追加でき
server = your.server.com
。
Hieraセットアップ
Hieraにはいくつかの設定も必要です。 ファイル
/etc/puppet/hiera.yaml
作成します。
--- :hierarchy: - "nodes/%{::fqdn}" - "manufacturers/%{::manufacturer}" - "virtual/%{::virtual}" - common :backends: - yaml :yaml: :datadir: "/etc/puppet/environments/%{::environment}/hieradata"
Hieraのデバッグを少し簡単にし、後で混乱を避けるために、
/etc/hiera.yaml
ファイル(Puppetが疑わない)を
/etc/puppet/hiera.yaml
へのシンボリックリンクに
/etc/puppet/hiera.yaml
ことを
/etc/puppet/hiera.yaml
ます。
ln -sf /etc/puppet/hiera.yaml /etc/hiera.yaml
Puppet Health Check
次は、Puppet Masterサービスを再起動するときです。
/etc/init.d/puppetmaster restart
Puppetエージェントの機能を確認します。
puppet agent --test
その結果、同様の結果が得られます。
Info: Retrieving plugin Error: /File[/var/lib/puppet/lib]: Could not evaluate: Could not retrieve information from environment production source(s) puppet://testpm.qix.no/plugins Info: Caching catalog for testpm.qix.no Info: Applying configuration version '1384949455' Info: Creating state file /var/lib/puppet/state/state.yaml Notice: Finished catalog run in 0.03 seconds
唯一の間違いは無視できます。 まだ設定やプラグインはありません。
続行する前に、このコマンドが機能することを確認してください。 この段階での問題は、おそらくDNSに関連しています。
R10kインストール
Peerless Adrien Theboは 、Puppetの動的環境と外部モジュールの効率的な使用を管理するための比類のないユーティリティを作成しました-Puppet Forgeでそれらを見つけても、独自のリポジトリに保存してもかまいません。
詳細については、 GitHubページを参照してください。 インストールするには、次のコマンドを実行します。
apt-get install rubygems gem install r10k
R10kのセットアップ
r10k
がモジュールのコピーを保存するキャッシュを含むディレクトリを作成する必要があります。
mkdir /var/cache/r10k chgrp puppet /var/cache/r10k chmod 2775 /var/cache/r10k
そしてもちろん、
r10k
は独自の設定ファイルがあります。 次の内容で
/etc/r10k.yaml
を作成します。
# location for cached repos :cachedir: '/var/cache/r10k' # git repositories containing environments :sources: :base: remote: '/srv/puppet.git' basedir: '/etc/puppet/environments' # purge non-existing environments found here :purgedirs: - '/etc/puppet/environments'
Gitインストール
残念ながら、Ubuntu 12.04に同梱されているgitバージョンは、 このバグの影響を受けます。 このバグは 、すべての新しいPuppet環境に対して誤ったアクセス権(0755)を設定します。 これにより、複数のユーザー間でリポジトリを共有することはできません。
gitサポートチームからPPAを追加します。
apt-get install python-software-properties add-apt-repository ppa:git-core/ppa
Gitの最新の安定バージョンをインストールします。
apt-get update apt-get install git
gitリポジトリを作成する
次に、サーバーのPuppet設定のメインソースとなる新しいgitリポジトリを作成します。
すべての管理者はこのリポジトリを使用し、
r10k
はこのリポジトリから更新され、Puppet環境を自動的に作成(または削除)します。
/srv/puppet.git
新しいリポジトリを作成します。
git init --bare --shared=group /srv/puppet.git chgrp -R puppet /srv/puppet.git cd /srv/puppet.git git symbolic-ref HEAD refs/heads/production
このリポジトリには次の3つの特徴的な機能があることに注意してください。
- 彼は裸です。
- 彼は共有されています。
- masterブランチは本番に名前が変更されました。
権限を設定する
gitリポジトリーでPuppetの構成を開始します。
rootユーザーの下からgitリポジトリーを操作しないでください。そのため、リポジトリーへのアクセスを制限するために使用される
puppet
グループにユーザーを追加します。
adduser <myuser> puppet
ログインして、変更を有効にします。
通常のユーザーから次のコマンドを実行して、グループメンバーシップを再度確認します。
id | grep puppet
gitフックを作成する
通常のユーザーとして作業を続けます。
ファイル
/srv/puppet.git/hooks/post-receive
作成します。これは、リポジトリーへのプッシュごとに
r10k
を実行します。
#!/bin/bash umask 0002 while read oldrev newrev ref do branch=$(echo $ref | cut -d/ -f3) echo echo "--> Deploying ${branch}..." echo r10k deploy environment $branch -p # sometimes r10k gets permissions wrong too find /etc/puppet/environments/$branch/modules -type d -exec chmod 2775 {} \; 2> /dev/null find /etc/puppet/environments/$branch/modules -type f -exec chmod 664 {} \; 2> /dev/null done
スクリプトを実行可能にすることを忘れないでください:
chmod 0775 /srv/puppet.git/hooks/post-receive
最初の環境を作成する
通常のユーザーとしてホームディレクトリに移動し、空のリポジトリのクローンを作成します。
cd git clone /srv/puppet.git cd puppet
必要なディレクトリをいくつか作成します。
mkdir -p hieradata/nodes manifests site
modules
フォルダーは作成しません。
r10k
で制御され
r10k
。 ローカルモジュール(つまり、このパペットマスターサーバー専用のモジュール)は、
site
ディレクトリに配置されます。
それでは、
r10k
セットアップを始めましょう。 リポジトリのルートに次の内容の
Puppetfile
を作成します。
# Puppet Forge mod 'puppetlabs/ntp', '3.0.0-rc1' mod 'puppetlabs/puppetdb', '3.0.0' mod 'puppetlabs/stdlib', '4.1.0' mod 'puppetlabs/concat', '1.0.0' mod 'puppetlabs/inifile', '1.0.0' mod 'puppetlabs/postgresql', '3.2.0' mod 'puppetlabs/firewall', '0.4.2' # A module from your own git server #mod 'custom', # :git => 'git://git.mydomain.com/custom.git', # :ref => '1.0'
Puppetfile
ファイル
Puppetfile
は、最初にTim Sharpeによってlibrarian-puppetでの使用が提案されたため、ドキュメントのソースとして使用してください。
Puppetfile
に関する2つの重要なポイント:
-
puppet module
コマンドとは異なり、r10k
は自動依存関係処理をサポートしていません(バージョン1.1.0の場合)。 すべての依存関係を手動で有効にする必要があります。 - タグをgitハッシュに置き換えることで、gitコミットを参照できます。 テストのために、
ref
をmaster
ようなものに設定してブランチを切り替えることもできますが、これはおそらく戦闘環境ではお勧めできません。
次に、2つのモジュールを
Hiera
介して接続して構成します。
すべてのホストには
ntp
モジュールが必要であるため、次の内容で
hieradata/common.yaml
を作成し
hieradata/common.yaml
。
--- classes: - ntp ntp::servers: - 0.pool.ntp.org - 1.pool.ntp.org - 2.pool.ntp.org - 3.pool.ntp.org
puppetマスターサーバーにはpuppetdbモジュールが必要なので、ファイル
hieradata/nodes/$(hostname -f).yaml
を作成し、デフォルト設定で必要なクラスを追加します。
--- classes: - puppetdb - puppetdb::master::config
最後に、
manifests/site.pp
で定義したすべてのクラスを含む非常に単純な
manifests/site.pp
を作成します。
hiera_include('classes')
コミットしてプッシュ
gitリポジトリにとどまる-それは、 本番環境の最初のバージョンをコミットしてプッシュするときです。
gitでは空のディレクトリを保存できないため、ローカルモジュールがまだないため、
site
ディレクトリにダミーファイルを追加します。
touch site/.keep
正しいブランチがあることを確認し、すべてのファイルを追加して、コミットとプッシュを実行します。
git checkout -b production git add * git commit -a -m "initital commit" git push -u origin production
その結果、次のようになります。
Counting objects: 11, done. Compressing objects: 100% (5/5), done. Writing objects: 100% (11/11), 867 bytes | 0 bytes/s, done. Total 11 (delta 0), reused 0 (delta 0) remote: remote: --> Deploying production... remote: To /srv/puppet.git * [new branch] production -> production Branch production set up to track remote branch production from origin.
メッセージ
--> Deploying production...
に注意してください
--> Deploying production...
これは、gitフックが機能したことを意味します。
/etc/puppet/environments/production
ディレクトリが作成され、その
modules
フォルダの内容に
Puppetfile
リストされているPuppet Forgeモジュールが含まれていることも確認できます。
Puppetを起動する
root
戻り、puppetエージェントを実行します。
puppet agent --test
PuppetDBに必要なPostgreSQLデータベースを含む、NTPおよびPuppetDBサービスのインストールと設定の進捗状況を説明する黒と緑のテキスト出力画面が表示されます。
サービスが実行されていることを確認します。
/etc/init.d/ntp status /etc/init.d/puppetdb status
PuppetDBを確認する
再びpuppetを実行して、postgresqlにデータを入力します。
puppet agent --test
その後、次のコマンドを実行します。
puppet node status $(hostname -f)
次のようなものが得られるはずです。
testpm.qix.no Currently active Last catalog: 2013-11-20T13:22:05.036Z Last facts: 2013-11-20T13:22:00.437Z
役立つヒント:次のコマンドを試して、puppetdbがフォーマットされたjsonに保存しているホストに関するすべての情報を確認します。
puppet node find $(hostname -f) | python -mjson.tool
これで、puppetdbが完全に構成され、すべてのホストにsshキーを配布するなどの目的でリソースエクスポートを使用できます。
ヒエラチェック
このステップに到達した場合、Hieraはすでに動作していますが、開発中にコマンドラインからHieraをテストする必要がある場合があります。
私のアドバイスに従って、/ etc / hiera.yamlファイルを/etc/puppet/hiera.yamlへのシンボリックリンクにしたことを願っています。 次に、次のコマンドは、実稼働環境の現在のホストに適用されるすべてのクラスをリストします。
hiera -a classes ::environment=production ::fqdn=$(hostname -f)
その結果、以下を取得する必要があります。
["puppetdb", "puppetdb::master::config", "ntp"]
Puppetマスタープロセス
gitでブランチを作成するのに多くの労力は必要ないため、開発プロセスは次のようになります。
# git checkout -b new_feature vim somefile git add somefile git commit -m "best feature ever" # == git push --set-upstream origin new_feature # ( , ?) puppet agent --test --noop --environment new_feature puppet agent --test --environment new_feature # diff and merge git checkout production git diff ..new_feature git diff --name-only new_feature git merge new_feature # production git push # git branch -d new_feature # == git push origin :new_feature
モジュールを使用するプロセス
複数のPuppet Masterサーバーで使用したいモジュールを使用している場合(ただし、
Puppetfile
しないでください)、これを行う1つの方法は、それを内部gitサーバーにアップロードし、
Puppetfile
作業しているブランチを構成することです:
mod 'my_app', :git => 'git://git.mydomain.com/my_app.git', :ref => 'master'
このモジュールは、リポジトリ
/srv/puppet.git
をプッシュするたびに、
master
ブランチの最後のコミットで更新されます。 しかし、このリポジトリに変更を加えなかった場合はどうなりますか? その場合は、
r10k
明示的に行うだけです。 このコマンドは、すべての環境のすべてのモジュールを更新します。
r10k deploy environment -p
テスト環境のみを更新するには:
r10k deploy environment testing -p
この方法で
r10k
を起動するときの唯一の問題は、権限が
/etc/puppet/environments
に移動できることです。これにより、共有リポジトリで問題が発生します。 これを回避するには、スクリプト
/usr/local/bin/deploy
を作成し、実行権限を付与します。
#!/bin/sh umask 0002 r10k deploy environment $1 -p find /etc/puppet/environments -mindepth 1 -type d -exec chmod 2775 {} \; find /etc/puppet/environments -type f -exec chmod 0664 {} \;
これで、特定のブランチで構成されているモジュールを更新するときに、次のコマンドを実行できます。
# deploy # deploy testing
モジュールの作業が終了したら、そのタグを作成することを忘れないでください。
git tag -a 1.0 -m "finally no error messages" git push --tags
...そして、ブランチ名ではなくタグ名で参照するようにPuppetfileを更新します。 少し後、あなたはこのことに感謝します。
おわりに
これで、堅牢で最新の(しばらくの間)Puppetベース構成ができました。 頑張って
読むことをお勧めします
- gitおよびPuppet環境での作業プロセス (Puppet Labs)
- Puppetデプロイメントの再考 (Adrien Thebo)
翻訳者の追加
操り人形マスターにジトリット + gitlistの束を設定します。 すべてのリポジトリはgitoliteにあり、変更はブラウザで簡単に表示できます( gitlabは、私の場合、多くの依存関係と不要な機能を備えているため、あまりにも怪しげに思えました)。 / etc / puppetディレクトリも別のgitリポジトリにあります(
environments
は
.gitignore
追加され
.gitignore
)
レポートを監視するには、 puppetexplorerを使用します。これは、 PuppetDBの非常に便利なクライアント側インターフェイス(
AngularJS
と
CoffeeScript
記述されています)です。
参照: