æè¿ãUbuntu 12.04ã«æ°ããPuppetãµãŒããŒããŒãããã€ã³ã¹ããŒã«ããããã»ã¹ãåèããŸãããããã«ã¯ãçŸä»£ã®ãã€ãã¹ã«ãåœç©ããã¹ãŠå«ãŸããŸãã ãã®çµæãç§ã¯ãã®ã¬ã€ããåŸãŸããã
ãŸããæ©èœãããããã¯ãŒã¯ãšèšå®æžã¿ã®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
翻蚳è
ããã®æ³šæïŒããŒãžã§ã³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
ãäœæããŸãã
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
ãå®è¡ããŸãã
ã¹ã¯ãªãããå®è¡å¯èœã«ããããšãå¿ããªãã§ãã ããïŒ
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
ãäœæããŸãã
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ã§ãã©ã³ããäœæããã®ã«å€ãã®åŽåã¯å¿
èŠãªããããéçºããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
ã¢ãžã¥ãŒã«ã䜿çšããããã»ã¹
è€æ°ã®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
ãäœæããå®è¡æš©éãä»äžããŸãã
ããã§ãç¹å®ã®ãã©ã³ãã§æ§æãããŠããã¢ãžã¥ãŒã«ãæŽæ°ãããšãã«ã次ã®ã³ãã³ããå®è¡ã§ããŸãã
ã¢ãžã¥ãŒã«ã®äœæ¥ãçµäºãããããã®ã¿ã°ãäœæããããšãå¿ããªãã§ãã ããã
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
èšè¿°ãããŠããŸãïŒã§ãã
åç
§ïŒ