Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
×Ô¶¯»¯ÔËάƽ̨puppetµÄ¸ß¼¶Ó¦ÓÃ
 
»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-08-28
  2672  次浏览      27
 

Ò»¡¢Ä£°åµÄÓ¦ÓÃ

µ½Ä¿Ç°ÎªÖ¹£¬×ÊÔ´É걨¡¢¶¨ÒåÀà¡¢ÉùÃ÷ÀàµÈËùÓй¦Äܶ¼Ö»ÄÜÒ»¸ömanifestÎļþÖÐʵÏÖ£¬µ«ÕâÈ´·ÇÓÐЧµÄ»ùÓÚpuppet¹ÜÀíIT×ÊÔ´¼Ü¹¹µÄ·½Ê½¡£Êµ¼ùÖУ¬Ò»°ãÐèÒª°ÑmanifestÎļþ·Ö½â³ÉÒ×ÓÚÀí½âµÄ½á¹¹£¬ÀýÈ罫ÀàÎļþ¡¢ÅäÖÃÎļþÉõÖÁ°üÀ¨ºóÃæ½²Ìáµ½µÄÄ£°åÎļþµÈ·ÖÀà´æ·Å£¬²¢ÇÒͨ¹ýijÖÖ»úÖÆÔÚ±ØÒªÊ±½«ËûÃÇÕûºÏÆðÀ´¡£ÕâÖÖ»úÖÆ¼´³ÉΪ¡°Ä£°å¡±£¬ËüÓÐÖúÓڽṹ»¯¡¢²ã´Î»¯µÄ·½Ê½Ê¹ÓÃpuppet£¬¶øpuppetÔò»ùÓÚ¡°Ä£¿é×Ô¶¯×°ÔØÆ÷¡±Íê³ÉÄ£¿é×°ÔØ¡£

´ÓÁíÒ»¸ö½Ç¶ÈÀ´Ëµ£¬Ä£°åʵ¼ÊÉϾÍÊÇÒ»¸ö°´Ô¼¶¨µÄ¡¢Ô¤¶¨ÒåµÄ»ú¹¹´æ·ÅÁ˶à¸öÎļþ»ò×ÓĿ¼µÄĿ¼£¬Ä¿Â¼ÀïµÄÕâЩÎļþ»ò×ÓĿ¼±ØÐë×ñÑ­ÆäÃüÃû¹æ·¶¡£puppet»á°´ÕÕÕâÖֹ淶ÔÚÌØ¶¨Î»ÖòéÕÒËùÐèµÄÄ£¿éÎļþ£¬²»¹ý£¬ÕâÐ©ÌØ¶¨Ä¿Â¼Ò³¿ÉÒÔͨ¹ýpuppetµÄÅäÖòÎÊýmodulepath¶¨Òå

Ö»ÒªÔÚijģ¿éÖж¨ÓÚÁËÒ»¸öÀ࣬¾Í¿ÉÒÔÔÚÈκÎmanifestÎļþÖÐʹÓÃËü£¬puppet»á×Ô¶¯È¥²éÕÒ²¢×°Ôذüº¬ÁËÕâ¸öÀàµÄ¶¨ÒåµÄmanifestÎļþÈÎÒâʹÓÃËüÃÇ¡£ÓÚÊÇ£¬»ùÓÚÄ£¿é»úÖÆµÄpuppetµÄÖ÷manifestÎļþ¾Í¿ÉÒÔ±äµÃºÜС£¬Ò²¸üÒ×¶®²¢ÄÜ»ùÓÚ²ßÂÔ½øÐж¨ÖÆ

Ä£¿éĿ¼µÄ½á¹¹

ÔÚpuppetÖУ¬Ä£¿é±¾ÉíÓÃÒ»¸öĿ¼À´±íʾ£¬ÆäÐèÒª´æ·ÅÓÚpuppetµÄmodulepath²ÎÊýËù¶¨ÒåµÄĿ¼ÖУ¬Èç/etc/puppet/modules¡£Ä£¿éĿ¼Ãû³Æ±ØÐëÓëÄ£¿éÃû³ÆÏàͬ£¬ÐèÒª×ñÑ­ÌØ¶¨µÄ×éÖ¯½á¹¹

1.MODULE NAME

2.manifests

3.init.pp

4.files

5.templates

6.lib

7.tests

8.spec

MODULE NAME£ºÄ£¿éÃû³Æ£¬Ò²¼´Ä£¿éĿ¼Ãû³Æ£ºÄ£¿éÖ»ÄÜÒÔСд×Öĸ¿ªÍ·£¬¿ÉÒÔ°üº¬Ð¡Ð´×Öĸ¡¢Êý×ÖºÍÏ»®Ïߣ¬µ«²»ÄÜʹÓá°main¡±ºÍ¡°settings¡±×÷Ϊģ¿éÃû

manifestsĿ¼£º°üº¬µ±Ç°Ä£¿éµÄËùÓÐmanifestÎļþ£ºÃ¿¸ömanifestÎļþ°üº¬ÁËÒ»¸öÀà»òÒ»¸ö¶¨ÒåµÄÀàÐÍ£¬´ËÎļþ·ÃÎÊ·¾¶¸ñʽΪ¡°Modulename::[SubDirectoryName::]ManifestFileName¡±

init.pp:Ö»Äܰüº¬Ò»¸öµ¥¶ÀµÄÀඨÒ壬ÇÒÀàµÄÃû³Æ±ØÐëÓëÄ£¿éÃû³ÆÏàͬ

filesĿ¼£º°üº¬ÁËÒ»×龲̬µÄÎļþ£¬ÕâЩÎļþ¿É±»Õ¾µãÏÂÔØÊ¹ÓãºÃ¿¸öÎļþµÄ·ÃÎÊ·¾¶¶¼×ñÑ­puppet:///modules/MODELE_NAME/filename·¾¶¸ñʽ

libĿ¼£º²å¼þĿ¼£¬³£ÓÃÓÚ×Ô¶¨Òåfact¼°×Ô¶¨Òå×ÊÔ´ÀàÐ͵È

templatesĿ¼£º´æ´¢ÁËmanifestÓõ½µÄÄ£°åÎļþ£¬Æä·ÃÎÊ·¾¶×ñÑ­template£¨¡®ModulesName/TemplateName¡¯£©¸ñʽ£¬ºó׺ÃûÓ¦¸ÃΪ.erb,¹ØÓÚÄ£°åÎļþÏêϸÐÅÏ¢£¬ºóÎÄÓнéÉÜ

testsĿ¼£ºµ±Ç°Ä£°åµÄʹÓðïÖú»òʹÓ÷¶ÀýÎļþ£¬ÀàËÆÈçºÎÉùÃ÷µ±Ç°Ä£°åÖеÄÀ༰¶¨ÒåµÄÀàÐ͵È

specĿ¼£ºÀàËÆÓÚtestsĿ¼µÄ¹¦ÄÜ£¬Ö»²»¹ý£¬ÆäÊÇΪlibĿ¼¶¨ÒåµÄ¸÷²å¼þÌṩʹÓ÷¶ÀýµÄ

[root@node1 ~]# mkdir -p /etc/puppet/modules/nginx/{manifests,files,templates,lib}  
[root@node1 ~]# cd /etc/puppet/modules/nginx/
[root@node1 nginx]# cd manifests/
[root@node1 manifests]# vi init.pp
class nginx {
package {'nginx':
ensure => installed,
name => nginx,
}
}
[root@node1 manifests]# vi web.pp
class nginx::web inherits nginx {
service {'nginx':
ensure => true,
enable => true,
name => nginx,
require => Package['nginx'],
}
file{'web.conf':
ensure =>file,
source => "puppet:///modules/nginx/web.conf",
path => '/etc/nginx/nginx.conf',
notify => Service['nginx'],
require => Package['nginx']
}
}
[root@node1 manifests]# puppet apply -e 'include nginx::web'
notice: /Stage[main]/Nginx/Package[nginx]/ensure: created
notice: /Stage[main]/Nginx::Web/File[web.conf]/ content: content changed '{md5}d9dfc198c249bb4ac341198a752b9458' to '{md5}33d2119b71f717ef4b981e9364530a39'
notice: /Stage[main]/Nginx::Web/Service[nginx]/ensure: ensure changed 'stopped' to 'running'
notice: Finished catalog run in 8.07 seconds
[root@node1 manifests]# grep work /etc/nginx/nginx.conf
worker_processes 2;

×¼±¸nginxÅäÖÃÎļþ£¬²¢ÓÐÒâÐÞ¸ÄnginxµÄÅäÖÃÎļþ

[root@node1 ~]# cp /etc/nginx/nginx.conf /etc/puppet/modules/nginx/files/web.conf  
[root@node1 ~]# grep worker_processes /etc/puppet/modules/nginx/files/web.conf
worker_processes 2;

¿ÉÒÔ¿´µ½ÎÒÃǵÄÅäÖÃÖ´Ðгɹ¦

ʹÓÃÄ£°åÅäÖÃÎļþ

Óï·¨£º<%= Ruby Expression %>:Ìæ´úΪ±í´ïʽµÄÖµ£¬ÔÚʹÓñí´ïʽʱӦ¸ÃʹÓÃ@ÒýÓÃ

<% ruby code %>:½öÖ´ÐдúÂ룬²»×öÈκÎÌæ»»£¬³£ÓÃÓÚÌõ¼þÅжϻòÑ­»·Óï¾ä¡¢É趨±äÁ¿ÒÔ¼°ÔÚÊä³ö֮ǰ¶ÔÊý¾Ý½øÐд¦Àí

<%# commit %>:×¢ÊÍÐÅÏ¢

<%%: Êä³ö<%

%%>£ºÊä³ö%>

ÈçÉÏÃæµÄ°¸Àý£¬ÔÚʹÓÃÄ£°åºó

[root@node1 manifests]# cp /etc/puppet/modules/nginx/files/web.conf /etc/puppet/modules/nginx/templates/conf.erb  
[root@node1 manifests]# grep work /etc/puppet/modules/nginx/templates/conf.erb
worker_processes <%= @processorcount %>;
±íʾnginxµÄÏß³ÌÊý°´ÕÕcpuµÄ¸öÊýÀ´Æô¶¯
ÀàÓ¦¸Ã¸ÄΪÈçÏÂËùʾ
class nginx::web inherits nginx {
service {'nginx':
ensure => true,
enable => true,
name => nginx,
require => Package['nginx'],
}
file{'web.conf':
ensure =>file,
content =>template('nginx/conf.erb'),
path => '/etc/nginx/nginx.conf',
notify => Service['nginx'],
require => Package['nginx']
}
}
[root@node1 manifests]# puppet apply -e 'include nginx::web'
notice: /Stage[main]/Nginx/Package[nginx]/ensure: created
notice: /Stage[main]/Nginx::Web/Service[nginx]/ensure: ensure changed 'stopped' to 'running'
notice: Finished catalog run in 8.25 seconds
[root@node1 manifests]# grep work /etc/nginx/nginx.conf
worker_processes 1;

¶þ¡¢master/agent

Ó¦Óó¡¾°£º

1.ͳһ×ÊÔ´¹ÜÀíÈí¼þ

2.ͳһÅäÖÃϵͳÓÅ»¯²ÎÊý

3.¶¨ÆÚ¼ì²â·þÎñÆ÷ÊÇ·ñÔËÐÐ

4.Ö÷»úÉϵÄÈí¼þÅäÖúÏÀíµÄÊôÐÔ

1.°²×°

ǰÌ᣺ÅäÖÃʵÓÃepelµÄyumÔ´£¬¶øºóʹÓÃyumÃüÁî°²×°¼´¿É

»·¾³¹æ»®

192.168.1.201 puppet-server¶Ë

192.168.1.202 puppet-agent¶Ë

°²×°²¿Êðpuppet·þÎñÆ÷¶Ë

[root@node1 manifests]# yum install puppet-server 

°²×°²¿Êðpuppet¿Í»§¶Ë

[root@node2 ~]# yum install puppet -y 

2.½âÎöË«·½Ö÷»ú

½âÎöË«·½Ö÷»ú£¬¿ÉÒÔʹÓÃDNSºÍhostsÎļþ£¬ÓÉÓÚ±¾´¦ÊµÑéµÄÔµ¹Ê£¬¹ÊʹÓõÄΪ/etc/hostsÎļþÀ´½âÎöË«·½Ö÷»ú

½¨ÒéµÄÖ÷»úÃüÃû·½Ê½£º

½ÇÉ«Ãû-ÔËÓªÉÌ-»ú·¿Ãû-»úÆ÷ip.ÓòÃû

[root@node1 manifests]# cat /etc/hosts  
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.0.1 server.magelinux.com server
192.168.1.201 node1.wangfeng7399.com node1
192.168.1.202 node2.wangfeng7399.com node2
192.168.1.203 node3.wangfeng7399.com node3
192.168.1.204 node4.wangfeng7399.com node4

3.Æô¶¯

1£©Æô¶¯puppet·þÎñÆ÷¶Ë

ÊÕÆðÆô¶¯puppetÊØ»¤½ø³Ìʱ£¬Æä»á×Ô¶¯½øÐÐÔËÐл·¾³µÄ³õʼ»¯£¬ÀýÈç´´½¨Ò»¸ö±¾µØCA¼°·þÎñÆ÷¶ËÏà¹ØµÄÖ¤ÊéºÍÃÜÔ¿µÈ¡£³õʼ»¯²Ù×÷Íê³Éºó£¬puppet¾Í»á¼àÌýÖ¸¶¨µÄÌ×½Ó×Ö²¢µÈ´ý¿Í»§¶ËµÄÁ¬½ÓÇëÇó¡£Ä¬ÈÏÇé¿öÏ£¬ÆäÖ¤ÊéºÍÃÜÔ¿µÈÎļþλÓÚ/var/lib/puppet/sslĿ¼ÖÐ

³öÓÚµ÷ÊÔµÄÄ¿µÄ£¬½¨ÒéÊ×´ÎÆô¶¯puppet·þÎñ½ø³Ì¿ÉÒÔÒÔ·ÇÊØ»¤½ø³Ì·½Ê½½øÐУ¬²¢ÈÃÆäÊä³öÏêϸÐÅÏ¢ÒÔ±ãÓÚ¹Û²ì³õʼ»¯¹ý³Ì£¬ÈçÏÂËùʾ£¬ÆäÖð²½Õ¹Ê¾ÁË´´½¨±¾µØÖ÷½ÐÏòCAÉêÇëÖ¤Êé¡¢»ñµÃÖ¤ÊéÒÔ¼°CAÒÆ³ýÖ¤ÊéÇ©ÊðÇëÇóµÄ¹ý³ÌµÈ£¬¶øºóÆô¶¯·þÎñ½ø³Ì²¢×¼±¸½ÓÊܸ÷agent¶ËµÄÁ¬½ÓÇëÇó

[root@node1 manifests]# puppet master --no-daemonize --debug  
[root@node1 manifests]# puppet master --no-daemonize --debug
debug: Failed to load library 'rubygems' for feature 'rubygems'
debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dscl does not exist
debug: Puppet::Type::User::ProviderPw: file pw does not exist
debug: Puppet::Type::User::ProviderUser_role_add: file roledel does not exist
debug: Puppet::Type::User::ProviderLdap: true value when expecting false
debug: /File[/var/lib/puppet/facts]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/ssl/certs/ca.pem]: Autorequiring File[/var/lib/puppet/ssl/certs]
debug: /File[/etc/puppet/manifests]: Autorequiring File[/etc/puppet]
debug: /File[/var/lib/puppet/bucket]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/ssl/ private_keys/node1.wangfeng7399.com.pem]: Autorequiring File[/var/lib/puppet/ssl/private_keys]
debug: /File[/var/lib/puppet/ssl/private_keys]: Autorequiring File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/server_data]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/rrd]: Autorequiring File[/var/lib/puppet]
debug: /File[/etc/puppet/puppet.conf]: Autorequiring File[/etc/puppet]
debug: /File[/var/lib/puppet/ssl/crl.pem]: Autorequiring File[/var/lib/puppet/ssl]
debug: /File[/etc/puppet/auth.conf]: Autorequiring File[/etc/puppet]
debug: /File[/var/lib/puppet/ssl/private]: Autorequiring File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/ssl/public_keys/ node1.wangfeng7399.com.pem]: Autorequiring File[/var/lib/puppet/ssl/public_keys]
debug: /File[/etc/puppet/fileserver.conf]: Autorequiring File[/etc/puppet]
debug: /File[/var/lib/puppet/ssl/certs/node1.wangfeng7399.com.pem]: Autorequiring File[/var/lib/puppet/ssl/certs]
debug: /File[/var/lib/puppet/yaml]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/state]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/lib]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/ssl]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/log/puppet/masterhttp.log]: Autorequiring File[/var/log/puppet]
debug: /File[/var/lib/puppet/ssl/certificate_requests]: Autorequiring File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/ssl/certs]: Autorequiring File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/reports]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/ssl/public_keys]: Autorequiring File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/ssl/public_keys/node1.wangfeng7399.com.pem]/mode: mode changed '0640' to '0644'
debug: /File[/var/lib/puppet/ssl/private_keys/node1.wangfeng7399.com.pem]/mode: mode changed '0640' to '0600'
debug: /File[/var/lib/puppet/ssl/certs/node1.wangfeng7399.com.pem]/mode: mode changed '0640' to '0644'
debug: Finishing transaction 70240930059560
debug: /File[/var/lib/puppet/ssl/ca/serial]: Autorequiring File[/var/lib/puppet/ssl/ca]
debug: /File[/var/lib/puppet/ssl/ca/inventory.txt]: Autorequiring File[/var/lib/puppet/ssl/ca]
debug: /File[/var/lib/puppet/ssl/ca/private]: Autorequiring File[/var/lib/puppet/ssl/ca]
debug: /File[/var/lib/puppet/ssl/ca/private/ca.pass]: Autorequiring File[/var/lib/puppet/ssl/ca/private]
debug: /File[/var/lib/puppet/ssl/ca/signed]: Autorequiring File[/var/lib/puppet/ssl/ca]
debug: /File[/var/lib/puppet/ssl/ca/requests]: Autorequiring File[/var/lib/puppet/ssl/ca]
debug: /File[/var/lib/puppet/ssl/ca/ca_key.pem]: Autorequiring File[/var/lib/puppet/ssl/ca]
debug: /File[/var/lib/puppet/ssl/ca/ca_pub.pem]: Autorequiring File[/var/lib/puppet/ssl/ca]
debug: /File[/var/lib/puppet/ssl/ca/ca_crt.pem]: Autorequiring File[/var/lib/puppet/ssl/ca]
debug: /File[/var/lib/puppet/ssl/ca/ca_crl.pem]: Autorequiring File[/var/lib/puppet/ssl/ca]
debug: /File[/var/lib/puppet/ssl/ca/ca_crt.pem]/mode: mode changed '0640' to '0660'
debug: /File[/var/lib/puppet/ssl/ca/ca_crl.pem]/mode: mode changed '0644' to '0664'
debug: /File[/var/lib/puppet/ssl/ca/ca_key.pem]/mode: mode changed '0640' to '0660'
debug: /File[/var/lib/puppet/ssl/ca/private/ca.pass]/mode: mode changed '0640' to '0660'
debug: Finishing transaction 70240928434340
debug: Using cached certificate for ca
debug: Using cached certificate for ca
debug: Using cached certificate for node1.wangfeng7399.com
notice: Starting Puppet master version 2.7.25

ʹÓÃpuppet master --genconfig¿ÉÒԲ鿴·þÎñÆ÷¶ËµÄÅäÖÃÐÅÏ¢£¬½¨Ò齫ÆäÊä³öµ½/etc/puppet/puppet.confÖÐ

[root@node1 ~]# puppet master --genconfig >> /etc/puppet/puppet.conf 

×¢Ò⣺Èç¹û´ËÇ°ÔøÒÔÆäÖ÷»úÃû»ò¸÷ÖÖÔ­ÒòÆô¶¯¹ýpuppet¿Í»§¶Ë¹ý³Ì²¢Íê³É¹ý³õʼ»¯£¬ÆäÖ¤ÊéÎļþ½«ÎÞ·¨·ûºÏ±¾´ÎÆô¶¯µÄÐèÒª£º´Ëʱ£¬ÐèÒªÏÈÇé¿ö/var/lib/puppet/sslĿ¼·½¿ÉÍê³ÉºóÐøµÄ³õʼ»¯²Ù×÷

ÈçÉÏÊöµÄ²âÊÔÆô¶¯Ã»ÓÐÎÊÌ⣬¿ÉÖÕÖ¹µ±Ç°µÄÆô¶¯ºó½«ÆäÒÔÊØ»¤½ø³Ì·½Ê½Æô¶¯

[root@node1 ~]# service puppetmaster start  
Starting puppetmaster: [ OK ]
[root@node1 ~]# chkconfig puppetmaster on

2£©Æô¶¯puppet¿Í»§¶Ë

puppet agentÔÚÊ×´ÎÆô¶¯Ê±£¬»áÏëÆðÖ¸¶¨µÄpuppet serverÉêÇëÖ¤Ê飬²¢Íê³ÉºóÐøÁ¬½ÓÇëÇó£¬Í¬ÑùµÄÀíÓÉ£¬´¦ÓÚ²âÊÔµÄÄ¿µÄ£¬½ÓÈ뵱ǰpuppet¼¯ÈºÖеÄÊ׸öagent½Úµã¿ÉÒÔÒÔ·ÇÊØ»¤½ø³ÌµÄ·½Ê½ÔËÐУ¬ÒÔ¹Û²ìÆä³õʼ»¯¹ý³Ì

[root@node2 ~]# puppet agent --server=node1.wangfeng7399.com --no-daemonize --debug  
info: Creating a new SSL key for node2.wangfeng7399.com
info: Caching certificate for ca
info: Creating a new SSL certificate request for node2.wangfeng7399.com
info: Certificate Request fingerprint (md5): BC:B2:36:9F:B5:78:CD:60:1E:72:9A:D5:88:DE:4B:57

´Ëʱ£¬ÔÚpuppet·þÎñÆ÷¶ËʹÓÃpuppet certÃüÁî¹ÜÀí¿Í»§¶ËµÄÖ¤ÊéÇëÇ󣬯ä--listÑ¡ÏîÄܹ»²é¿´µÈ´ýÇ©ÊðÖ¤ÊéµÄ¿Í»§¶ËÁÐ±í£¬¶ø--signÑ¡Ïî¿ÉÓÃÓÚΪָ¶¨½ÚµãÇ©ÊðÖ¤Ê飬Èç¹ûÒªÒ»´ÎÐԵضà¸ö½ÚµãÖ¤ÊéÉêÇë½øÐÐÇ©Êð¿ÉÒÔʹÓÃ--allÑ¡Ïî

[root@node1 ~]# puppet cert --list  
"node2.wangfeng7399.com" (BC:B2:36:9F:B5:78:CD:60:1E:72:9A:D5:88:DE:4B:57)
[root@node1 ~]# puppet cert --sign node2.wangfeng7399.com
notice: Signed certificate request for node2.wangfeng7399.com
notice: Removing file Puppet::SSL::CertificateRequest node2.wangfeng7399.com at '/ var/lib/puppet/ssl/ca/requests/node2.wangfeng7399.com.pem'

Ò»µ©agent½ÚµãÊÕµ½Ç©Êð¹ýµÄÖ¤Ê飬Æä½«»áÏÔʾÈçÏÂÐÅÏ¢

info: Caching certificate for node2.wangfeng7399.com  
notice: Starting Puppet client version 2.7.25

È·±£ÉÏÊöagentÏà¹Ø²Ù×÷²»´æÔÚÎÊÌâºó£¬±ã¿ÉÒÔ½«--serverÑ¡ÏîÖ¸¶¨µÄÐÅÏ¢´æ´¢ÓëagentµÄÅäÖÃÎļþÖУ¬²¢ÒÔ·þÎñµÄ·½Ê½Æô¶¯puppet agentÁË¡£ÆäÅäÖÃÎļþΪ/etc/puppet/puppet.conf£¬ÅäÖÃÍêÕû¼È¿ÉÒÔÆÚ´ýÄܹ»puppet

[root@node2 ~]# echo "server=node1.wangfeng7399.com" >> /etc/puppet/puppet.conf  
[root@node2 ~]# service puppet start
Starting puppet: [ OK ]
[root@node2 ~]# chkconfig puppet on

4.ÊÚȨ·ÃÎÊ

ÔÚpuppet·þÎñÆ÷¶ËµÄ/etc/puppet/manifests/Öд´½¨site.pp,ÔÚmaster/agentʱ£¬ËùÓнڵãÇåµ¥ÎļþÈë¿ÚÎļþΪsite.pp

node node2.wangfeng7399.com {  
incldue nginx::web
}

½¨Ò飺һÀà½ÚµãʹÓÃÒ»¸öÇåµ¥Îļþ£¬ËùÓÐÇåµ¥Îļþ¶¼ÔÚsite.ppÖÐʹÓÃimprot°üº¬½øÀ´£¬Çåµ¥ÎļþÐ޸ĺóÓ¦ÖØÆôÎļþ

5.×Ô¶¯Ç©·¢Ö¤Êé

¿ÉÒÔÉèÖÃmaster×Ô¶¯Ç©·¢ËùÓеÄÖ¤Ê飬ÎÒÃÇÖ»ÐèÒªÔÚ/etc/puppetĿ¼Ï´´½¨autosign.confÎļþ¼´¿É

[root@node1 ~]# echo "*.wangfeng7399.com" > /etc/puppet/autosign.conf 

ÕâÑù¾Í»á¶ÔËùÓÐÀ´×Ômagedu.confµÄ»úÆ÷µÄÇëÇó×Ô¶¯Ç©ÊðÖ¤Êé

6.puppet kick¹¦ÄÜʵÏÖ

puppet¿Í»§¶ËĬÈÏÿ30·ÖÖӺܷþÎñÆ÷ͨѶһ´Î£¬µ«ÊÇÓÐʱ£¬ÎÒÃÇÏ£Íû·þÎñÆ÷Äܹ»¸ø¿Í»§¶Ë½ô¼±ÍÆËÍһЩÈËÎÓÚÊǾÍÓÐÁËpuppet kick£¨puppet 2.6ÒÔǰ½Ðpuppetrun£©

1£©±à¼­¿Í»§¶ËÅäÖÃÎļþ/etc/puppet/puppet.confÔÚ[agent]¶ËÖÐÌí¼ÓÈçÏÂ

root@node2 ~]# echo "listen=true" >> /etc/puppet/puppet.conf  
[root@node2 puppet]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 *:8139 *:*

2£©ÔÚ¿Í»§¶Ë±à¼­»ò´´½¨ÐÂÎļþ/etc/puppet/namespaceauth.conf£¬°üº¬ÏÂÃæÄÚÈÝ

[puppetrunner]  
allow *.wangfeng7399.com

3£©ÔÚ¿Í»§¶Ë±à¼­Îļþauth.conf,Ìí¼ÓÈçÏÂÄÚÈÝ

path /run  
method save
auth any
allow *.wangfeng7399.com

4)ÍÆËÍ·½·¨£¬ÔÚ·þÎñÆ÷¶ËÔËÐÐÃüÁî

[root@node1 puppet]# puppet kick -p 10 node2.wangfeng7399.com  
Triggering node2.wangfeng7399.com
Getting status
status is success
node2.wangfeng7399.com finished with exit code 0
Finished

²é¿´node2

[root@node2 puppet]# rpm -q nginx  
nginx-1.0.15-5.el6.x86_64
[root@node2 puppet]# grep work /etc/nginx/nginx.conf
worker_processes 1;

´íÎóÐÅÏ¢£¬²ÒÍ´µÄ½Ìѵ£¬¿Í»§¶ËÒ»ÖÂÔÚ±¨Õâ¸ö´íÎó

err: Could not retrieve catalog from remote server: SSL_connect returned=1 
errno=0 state=SSLv3 read server certificate B: certificate verify failed: [certificate is not yet valid for /CN=
Puppet CA: node1.wangfeng7399.com]  
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
debug: report supports formats: b64_zlib_yaml pson raw yaml; using pson
err: Could not send report: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [certificate is not yet valid for /CN= Puppet CA: node1.wangfeng7399.com]

½â¾ö·½·¨£º

Á½Ì¨·þÎñÆ÷ÐèҪʱ¼äͬ²½

7.°²×°ÅäÖÃpuppet-dashboard

1£©°²×°

[root@node1 puppet]# rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm //°²×°¹Ù·½Í¨¹ýµÄyum²Ö¿â  
[root@node1 puppet]# yum install puppet-dashboard -y
[root@node1 puppet]# yum install mysql-server mysql -y

2£©Êý¾Ý¿âÊÚȨ

mysql> create database dashboard character set utf8;  
Query OK, 1 row affected (0.00 sec)
mysql> grant all on dashboard.* to 'dbuser'@'192.168.1.%' identified by 'wangfeng7399';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

3£©ÐÞ¸ÄÅäÖÃÎļþ£¬dashboardµÄÅäÖÃÎļþΪ/usr/share/puppet-dashboard/config/database.yml,ÐÞ¸ÄÈçϲÎÊý

production:  
host:192.168.1.201
database: dashboard
username: dbuser
password:wangfeng7399
encoding: utf8
adapter: mysql

Ϊdashboardµ¼ÈëÒÀÀµµÄÊý¾Ý±í

[root@node1 config]# gem install rake  
[root@node1 puppet]# cd /usr/share/puppet-dashboard/config
[root@node1 config]# rake gems::refresh_specs
[root@node1 config]# rake RAILS_ENV=production db:migrate

Æô¶¯·þÎñ

[root@node1 config]# service puppet-dashboard start  
Starting Puppet Dashboard: => Booting WEBrick
=> Rails 2.3.17 application starting on http://0.0.0.0:3000
[ OK ]

4£©ÅäÖÃpuppet·þÎñÆ÷ºÍ¿Í»§¶Ë

·þÎñÆ÷¶ËÅäÖÃ

ÔÚpuppetmasterµÄÅäÖÃÎļþÖÐÌí¼ÓÈçÏÂÄÚÈÝ

reports = store, http  
reporturl = http://192.168.1.201:3000/reports/upload
ÔÚ[master]ÖÐÌí¼Ó

¿Í»§¶ËÅäÖÃ

report=true 
ÔÚ[agent]ÖÐÌí¼Ó

ÅäÖÃÍê³ÉºóÖØÆôpuppet

5£©²âÊÔ

»¹¿ÉÒÔÔÚÒ³ÃæÖÐÌí¼Ó½ÚµãºÍÀàÎļþ

ÖÕÓÚÍê³ÉÁË£¬Ò»¸öʱ¼ä²»Í¬²½ÅªÁË2Сʱ²ÅÕÒ³ö´íÎó¡£

   
2672 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

DevOpsתÐÍÈÚÈëµ½ÆóÒµÎÄ»¯
DevOps ÄÜÁ¦Ä£ÐÍ¡¢Ñݽø¼°°¸ÀýÆÊÎö
»ùÓÚ DevOps ÀíÄîµÄ˽ÓÐ PaaS ƽ̨ʵ¼ù
΢Èí¿ª·¢ÍŶӵÄDevOpsʵ¼ùÆôʾ
Ïà¹ØÎĵµ

DevOpsÇý¶¯Ó¦ÓÃÔËά±ä¸ïÓë´´ÐÂ
ÔËά¹ÜÀí¹æ»®
ÈçºÎʵÏÖÆóÒµÓ¦Óò¿Êð×Ô¶¯»¯
ÔËά×Ô¶¯»¯Êµ¼ù֮·
Ïà¹Ø¿Î³Ì

×Ô¶¯»¯ÔËά¹¤¾ß£¨»ùÓÚDevOps£©
»¥ÁªÍøÔËάÓëDevOps
MySQLÐÔÄÜÓÅ»¯¼°ÔËάÅàѵ
ITϵͳÔËά¹ÜÀí
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

itilÎå´óÁ÷³Ìͼ
ITILÁ÷³Ì¹ÜÀíÁù²½×ß
ʹÓÃITIL V3×÷SOAÖÎÀíµÄ»ùʯ
IT·þÎñ¹ÜÀíµÄʵ¼ùÓë×ܽá
½è¼øITIL¼Ü¹¹ÀíÄîÌáÉýÐÅÏ¢»¯
ITILÁ÷³Ì×ܽá


»ùÓÚITILµÄIT·þÎñ¹ÜÀí
ITILÈÏÖ¤
ITSM/ITIL»ù´¡
IT¹æ»®¹ÜÀí
ITÍâ°ü¹ÜÀí
IT³É±¾¹ÜÀí

ÖйúÒÆ¶¯Í¨ÐÅ ÍøÂç¹æ»®Óë¹ÜÀí
ijº½¿Õ¹«Ë¾ IT¹æ»®ÓëÆóÒµ¼Ü¹¹
ij½ðÈÚ¹«Ë¾ IT·þÎñ¹ÜÀí£¨ITIL V3£©
ÖйúÁªÍ¨¼¯ÍÅ ITÇ°ÑØÖªÊ¶¸ÅÊö
Öк£ÓÍ ÆóÒµIT¼Ü¹¹Éè¼Æ