Puppet學習

luashin發表於2016-03-10
安裝及簡單例項應用

安裝環境:CentOS 5.4 X86_64位
Server:
1.先安裝ruby語言包、ruby標準庫、ruby shadow庫
yum install -y ruby ruby-libs ruby-shadow

2.需要新增EPRL庫,來支援puppet
wget http:// dl.Fedoraproject.org /pub/epel/5Server/x86_64/epel-release-5-4.noarch.rpm
如果你的系統是centos 6版本的或者是centos 5版本但是是32位的,可以到網站:
dl.fedoraproject.org查詢你們想要的

3.在master主機上,需要從EPEL倉庫安裝puppet、puppet-server facter
rpm -Uvh epel-release-5-4.noarch.rpm
puppet軟體包含了agent程式,puppet-server軟體包含了master程式,facter軟體包含了系統盤點工具facter,可以獲取agent主機的相關資訊
yum install -y puppet puppet-server facter
之後啟動puppet master
service puppetmaster start
啟動 puppetmaster:[確定]
這樣,puppet server上的安裝算是完成了
現在,master和agent都安裝好了,解釋一下/etc/puppet/下的檔案含義:
Puppet.conf puppet的服務端配置檔案
Auth.conf client訪問puppet server的acl配置檔案
Fileserver.conf puppet server作為檔案伺服器的ACL配置檔案
Manidests puppet的指令碼目錄檔案目錄
Site.pp 檔案告訴puppet去哪裡尋找並載入指定的客戶端配置,如果缺少此檔案,puppet會啟動失敗的
 
防火牆設定:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT
需要重啟防火牆,service iptables restart
配置好防火牆後,就可以允許client訪問puppet

配置第一個agent
Client:
同樣需要安裝epel-release-5-4.noarch.rpm
下載:wget
rpm -ivh epel-release-5-4.noarch.rpm
在agent端只需要安裝:
yum install puppet facter
Client 請求:puppet agent --server=puppet.xxxx.com(puppet master域名) --verbose --no-daemonize
解釋:引數
--server 指定了需要連線puppet master 的域名或者主機名,儘量使用域名吧,否則不同網路之間無法透過主機名相通
--no-daemonize 使得puppet 客戶端執行在前端並輸出日誌到標準輸出
--verbose 使客戶端輸出更詳細的日誌
 
Server端需要相應這個請求:
檢視:puppet cert –list
"shwt08" (94:BC:4A:FA:31:E1:10:9F:3C:4D:B3:E8:CB:A4:F8:B9)
puppet cert --sign shwt08
notice: Signed certificate request for shwt08
notice: Removing file Puppet::SSL::CertificateRequest shwt08 at '/var/lib/puppet/ssl/ca/requests/shwt08.pem'
當然,如果我們有很多個client的話,都需要一個個去認證確實是一件很麻煩的事情,所以,修改puppet.conf檔案,實現自動化認證
在全域性”[mian]”下新增一行:
autosign = true
重啟master
service puppetmaster restart
重新新增一個clint,驗證
需要先去wget 後需要編輯/etc/hosts
之後puppet agent --server=puppet.xxxx.com --no-daemonize –verbose 發現是沒有問題的
 
建立第一個配置:
在master上修改兩個檔案:
目錄/etc/puppet/manifests下:
nodes.pp site.pp 如果沒有這兩個檔案就手工建吧
# vim nodes.pp
node default {
file{"/root/vol_disk_check.sh":
source => "puppet:///files/vol_disk_check.sh",
owner => "root",
group => "root",
mode => 755;
}
}

# vim site.pp
import 'nodes.pp'
至於具體的解釋說明,等下章再詳細的解釋下,這篇文章主要來闡明puppet安裝及簡易同步檔案的效果
 
測試來同步一個檔案
puppet agent --server=puppet.xxxx.com --test -v
ok,從詳細資訊中,得知client已經同步檔案了
 
下面說遇到的兩個錯誤:
錯誤1:
err: Could not retrieve catalog from remote server: hostname not match with the server certificate
解決辦法:
在master和client上檢視是否二者日期不同步
在client上配置/etc/hosts檔案,編輯新增puppet.xxxx.com 解析(IP 域名)

錯誤2:
err: Could not retrieve catalog from remote server: Connection refused - connect(2)
解決辦法:
這個是因為master 上的主程式沒有啟動的緣故,到master上檢視程式puppetmaster 發現提示程式已死,
service puppetmaster status
puppetmasterd 已死,但 pid 檔案仍存
檢視了下配置檔案,發現是在修改fileserver.conf時修改錯誤導致的,也就是說當遇到這個錯誤提示的時候,要檢視/etc/puppet目錄下的主配置檔案是否有問題
檔案fileserver.conf 中:[files]
path /var/lib/puppet/files
這個path下是放置我們要同步更新的檔案

簡單模組配置和應用

1.建立一個模組的目錄和檔案結構,,這個結構將位於/etc/puppet/modules 目錄下,我們將模組命名為cron,模組名(類名)必須是普通的字元,只能包含字母、數字、下劃線以及短橫線
每一個模組都需要一個特定的目錄結構和一個叫做init.pp 的檔案,這個目錄結構能幫助puppet自動載入模組。為了載入模組,puppet會檢查一系列被稱為模組路徑的目錄,模組路徑是有配置檔案puppet.conf中[main]段的modulepath 配置設定的,預設情況下,路徑在/etc/puppet/modules下
模組結構:
mkdir -p /etc/puppet/modules/cron/{files,manifests,templates}
我們會將大多數的配置指令碼檔案放在/etc/puppet/modules/cron/manifests目錄下, manifests是puppet的指令碼目錄檔案目錄
建立init.pp檔案,init.pp檔案時模組的核心,每個模組必須擁有一個init.pp檔案,files目錄使用者存放哪些屬於模組一部分的檔案,templates則是放置模組可能會用到的模板

2. 配置檔案
在路徑:/etc/puppet/modules/cron/manifests下
Vi init.pp
###功能說明:初始化檔案
      class cron {
              case $operatingsystem {
                      CentOS: {
                              include cron::base
                              include cron::crontabs
                              include cron::addcron
                              }
                      RedHat: {
                              include cron::base
                              include cron::crontabs
                              include cron::addcron
                              }
              }
}
root@SHWT11 manifests]# vi base.pp

##功能說明:安裝cron包並啟動服務
      class cron::base {
              package { cron:
                      name => $operatingsystem ?  {
                              Ubuntu => "cron",
                              redhat => "vixie-cron",
                              centos => "vixie-cron",
              },
              ensure => present,
      }
      service { crond:
              name => $operatingsystem ? {
                ubuntu => "cron",
                redhat => "crond",
                centos => "crond",
      },
      ensure => running,
      enable => true,
      pattern => cron,
      require => Package["cron"],  ##處理依賴關係
      }
模組是清單、資源、檔案、模板、類以及定義的容器,一個模組應該包含配置一個特定的 應用程式所需的所有配置
Vi  crontabs.pp
####功能說明,安裝crontabs包
      class cron::crontabs {
              package { crontabs:
                name => $operatingsystem ? {
                      redhat => "crontabs",
                      centos => "crontabs",
              },
      ensure => present,
  }
}
上面三個檔案是安裝cron,並確保cron 服務處於執行(running)狀態
[root@SHWT11 manifests]# vi rsync_bash.pp
##功能說明:新增crontab定時任務(每天8點到晚上22點,每半小時執行一次)
class cron::rsync_bash {
      cron {bash:
      command => "/bin/bash  /root/vol_disk_check.sh",
      user => "root",
      hour => "8-22",
      minute => "*/30";
  }
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9034054/viewspace-2054847/,如需轉載,請註明出處,否則將追究法律責任。

相關文章