Puppet配置
1. 文件管理 file
文件服務器寫法:
/etc/puppet/ fileserver.conf 定義
[files]
path /tmp/files ## puppet數據存放目錄 =è后面遠程備份實戰會用到
allow *.example.com
實戰1: 備份master機c.sh到agent /tmp目錄下。
代碼: |
##remote backup
filebucket{ main: server => "pmaster.example.com", path => false, } ###備份master機上c.sh文件到agent /tmp目錄下
file {"/tmp/master.sh": source => "puppet://pmaster.example.com/files/c.sh", backup => main, } 請留意如圖中的目錄結構 |
結果輸出: |
|
實戰2: ##備份agent本地/etc/passwd文件到/tmp并命名為test3,如果文件已存在,先備份再覆蓋
代碼: |
##備份agent本地/etc/passwd文件到/tmp并命名為test3
file {"/tmp/test3": source => "/etc/passwd", backup => ".bak_$uptime_seconds", group => nobody, owner => nobody, mode => 600; } |
結果輸出: |
![]() |
實戰3:##制定文件內容
代碼: |
##制定文件內容
file {"/tmp/test4_content": content => "content test \n", } |
結果輸出: |
|
實戰4:##創建軟鏈接測試
代碼: |
##創建軟鏈接測試
file {"/tmp/test5_link1": ensure => link, target => "/var/log/messages"; "/tmp/test5_link2": ensure => link, target => "/var/log/puppet/puppet.log"; } |
結果輸出: |
|
實戰5.##文件刪除測試
代碼: |
##文件刪除測
file {"/tmp/test6": ensure => absent; } |
結果輸出: |
|
文件管理常用參數詮釋:
1.backup參數 2.content參數 3.ensure參數 4.force參數 5.group參數 6.ignore參數 7.links參數 8.mode參數 9.owner參數 10.path參數 11.purge參數 12.recurse參數 13.source參數 14.target參數 |
文檔參考:
http://docs.puppetlabs.com/references/stable/type.html#file http://www.jbxue.com/ |
1. 用戶管理
代碼: |
###用戶管理
group{"py": #組名 ensure => "present", #創建用戶組 gid => 2002, #組id name => "py", } user{"py": #ensure => "absent", #刪除py用戶 ensure => "present", #新增py用戶 uid => 2002, gid => 2002, home => '/home/py', shell => "/bin/bash", password => '$1$zRFsT1$X3TE0/smnkWtxE2P.BPWq/', #grub-md5-crypt 工具生成 } file {"/home/py": #創建用戶家目錄 group => 2002, owner => 2002, mode => 700, ensure => directory; } |
結果輸出: |
|
用戶管理常用參數詮釋:
1.manages_aix_lam 2.manages_members 3.system_groups (二)Puppet組管理參數 1.allowdupe 2.attributes 3.ensure 4.gid 5.ia_load_module 6.members 7.name 8.provider 9.system 二、用戶的管理 (一)Puppet用戶管理特性 2.manages_aix_lam 3.manages_expiry 4.manages_homedir 5.manages_password_age 6.manages_passwords 7.manages_solaris_rbac 8.system_users (二)Puppet用戶管理參數 1.allowdupe 2.attributes 3.auths 4.comment 5.ensure 6.expiry 7.gid 8.groups 9.home 10. ia_load_module 11. managehome 12. name 13. password 14. password_max_age 15. password_min_age 16. profiles 17. project 18. provider 19. roles 20. shell 21. system 22.uid |
文檔參考:
http://docs.puppetlabs.com/references/latest/type.html#user http://www.jbxue.com/ |
1. 命令執行
代碼: |
/etc/puppet/manifests/site.pp 配置
file {"/tmp/mysql_test/mysql_test.tgz": ##將pmaster /tmp/files/mysql_test.tgz文件下發到agent /tmp/mysql_test/目錄下 source => "puppet://pmaster.example.com/files/mysql_test.tgz", } exec { "unzip tgz packget": command => "tar -xvf /tmp/mysql_test/mysql_test.tgz", ###所有命令必須為全路徑或者path參數指定命令搜索路徑 path => "/usr/bin:/usr/sbin:/bin:/sbin", cwd => "/tmp/mysql_test" ##命令執行的路徑為: /tmp/mysql_test/ creates => "/etc/my.cnf" #當/etc/my.cnf不存在的時候,才會執行該命令 tries => 2, #重試次數 try_sleep => 3, #重試間隔 s為單位 } |
結果輸出: |
常用參數詮釋: |
1. command 2. creates 3. cwd 4. environment 5. group 6. logoutput 7. onlyif 8. path 9.timeout 10.tries 11.try_sleep 12.user |
文檔參考:
http://docs.puppetlabs.com/references/latest/type.html#exec http://www.jbxue.com/ |
1. cron 管理
實例: |
cron { "sh /tmp/a.sh": command => "/bin/sh /tmp/a.sh", user=> root, minute => '*/3' #ensure => "absent"; ##cron刪除 } |
結果輸出: |
![]() |
Cron管理常用參數詮釋
1.command 2.ensure 3.environment 4.hour 5.minute 6.month 7.monthday 8.name 9.target 10. user 11. weekday |
1. 常用命令歸類
puppet –genconfig #查看當前配置 service puppetmasterd start #啟動puppetmaster service puppet start ##啟動客戶端 客戶端的運行報告在服務器端:/var/lib/puppet/reports/ Agent /etc/hosts中添加主機信息 puppetmasterd –genconfig > puppet.conf puppet master –verbose –no-daemon puppet agent –server=pmaster –no-daemonize –verbose ##agent 連接server 使用—waitforcert 參數改變agent等待時間 puppetmasterd –configprint modulepath ##打印默認路徑 puppet cert –list ##顯示等待簽名的服務器 puppet cert –sign node1.example.com ##簽名 puppert cert –sign –all #對所有等待的證書進行簽名 |
服務器控制客戶端立即運行
puppet kick
官網不建議使用,只檢查客戶端返回狀態,不檢查命令執行結果,且新版本會棄用,這個功能建議puppet加強
1. 配置Agent:
/etc/puppet/ |
puppet.conf: [agent] listen = true auth.conf 紅色部分為新增
path /run auth any method save allow pmaster.example.com # this one is not stricly necessary, but it has the merit # to show the default policy which is deny everything else path / auth any |
2. demo方式啟動agent
service puppet restart ###啟動成功不代表成功了,netstat確認端口被監聽,puppet這塊功能有待完善… |
3. Master遠程確認8139端口可通,執行puppet kick
![]() |
4. agent確認最終結果
5. 報錯參考:
1.連接master的時候出現如下報錯: 2. 連接master的時候出現如下報錯: 3.連接master的時候出現如下報錯: 4. 連接master的時候出現如下報錯: |
class類的嘗試
1. 配置主配置文件:
# cat site.pp
import 'nodes/nodes.pp' node default { file { "/tmp/linuxlst.txt": owner => root, group => root, ensure => present, content =>"good morning!\n", mode => 644, } # cat nodes/nodes.pp
node 'node1.example.com' { #include test::test include mysql::mysql } |
2. 單獨配置mysql模塊
#查看puppet默認加載的模塊目錄, —即在這些目錄下的配置會被默認加載 [root@pmaster puppet]# pwd /etc/puppet [root@pmaster puppet]# tree modules/ ##在/etc/puppet/modeles目錄下進行本次的類配置
modules/ |-- mysql | |-- manifests | | |-- config.pp | | |-- init.pp | | |-- install.pp | | `-- service.pp | `-- template | `-- my.cnf.erb `-- test `-- manifests `-- init.pp # cat modules/mysql/manifests/config.pp #類似python,*.pp必須和定義的類名保持一致 class mysql::config{ file {"/tmp/mysql_test/mysql_test.tgz": ##將pmaster /tmp/files/mysql_test.tgz文件下發到agent /tmp/mysql_test/目錄下 source => "puppet://pmaster.example.com/files/mysql_test.tgz", } } # cat modules/mysql/manifests/install.pp #類似python,*.pp必須和定義的類名保持一致 class mysql::install{ exec { "unzip tgz packget": command => "tar -xvf /tmp/mysql_test/mysql_test.tgz", ###所有命令必須為全路徑或者path參數指定命令搜索路徑 path => "/usr/bin:/usr/sbin:/bin:/sbin", cwd => "/tmp/mysql_test", ##命令執行的路徑為: /tmp/mysql_test/ creates => "/etc/my.cnf", #當/etc/my.cnf不存在的時候,才會執行該命令 tries => 2, #重試次數 try_sleep => 3, #重試間隔 s為單位 } } # cat modules/mysql/manifests/init.pp #init.pp中定義包涵的所有類
class mysql::mysql{ include mysql::install,mysql::config } |
3. 在agent上驗證結果:
puppetd –test –server pmaster.example.com |
4. 好處:
通過如上方式,一個模塊一個目錄,干凈整潔,且于維護配置,且利于功能模塊復用. |
5. 示例:
Ok,截止如上,puppet基本配置大家已經掌握,文章開始的問題大問題在學習的過程中大家可能已經在答案了,部分問題還需要大家自己再摸索.
對于Puppet的個人感覺:
1. 對沒有一定基礎的同學,入門較難; 2. 因靈活性,擴展性,語言方面限制大企業應用較難,主要針對中小型企業的應用; 3. 在對正確性及靈性要求較高的情況下,puppet適用性會受到質疑; |
如上僅代表個人見解,如有不對,請諒解.
有興趣同學進一步的學習方向
? Puppet Master 負載均衡配置 ? 精通Class類配置 ? Puppet 圖形界面dashboard / Foreman的安裝配置 ? Puppet 內置web界面替換(如用nginx,apache代替) ? Puppet factor 自定義信息收集(需對ruby語言有一定了解) |
原創文章,作者:stanley,如若轉載,請注明出處:http://www.www58058.com/3987