最新の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蚘述されおいたすです。

参照

Source: https://habr.com/ru/post/J229867/


All Articles