最新のPuppetサーバーをゼロからセットアップする

最近、Ubuntu 12.04に新しいPuppetサーバーをゼロからインストールするプロセスを再考しました。これには、現代のホイッスルや偽物もすべて含まれます。 その結果、私はこのガイドを得ました。



まず、機能するネットワークと設定済みのDNSを備えたクリーンなUbuntuが必要です。



その結果、以下を取得する必要があります。





このマニュアルはかなり長いです すべての設定は手動で行われるため、後で結果を簡単に使用して自分で調整することができます。 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つの特徴的な機能があることに注意してください。

  1. 彼は裸です。
  2. 彼は共有されています。
  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つの重要なポイント:





次に、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ベース構成ができました。 頑張って



読むことをお勧めします







翻訳者の追加



操り人形マスターにジトリット + gitlistの束を設定します。 すべてのリポジトリはgitoliteにあり、変更はブラウザで簡単に表示できます( gitlabは、私の場合、多くの依存関係と不要な機能を備えているため、あまりにも怪しげに思えました)。 / etc / puppetディレクトリも別のgitリポジトリにあります( environments



.gitignore



追加され.gitignore





レポートを監視するには、 puppetexplorerを使用します。これは、 PuppetDBの非常に便利なクライアント側インターフェイス( AngularJS



CoffeeScript



記述されています)です。



参照:




All Articles