集中管理利器-puppet快速入門-下

Puppet配置

1.    文件管理 file

文件服務器寫法:

/etc/puppet/ fileserver.conf 定義

[files]

path /tmp/files  ## puppet數據存放目錄 =è后面遠程備份實戰會用到

allow *.example.com

實戰1: 備份masterc.shagent /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,
}

請留意如圖中的目錄結構

50.png

結果輸出:

51.png

實戰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;
}

結果輸出:

52.png

實戰3##制定文件內容

代碼:

##制定文件內容

file   {"/tmp/test4_content":
    content =>  "content test \n",
}

結果輸出:

集中管理利器-puppet快速入門-下

集中管理利器-puppet快速入門-下

實戰4##創建軟鏈接測試

代碼:

##創建軟鏈接測試

file {"/tmp/test5_link1":
    ensure => link,
    target =>   "/var/log/messages";
    "/tmp/test5_link2":
    ensure => link,
    target =>   "/var/log/puppet/puppet.log";
}

結果輸出:

集中管理利器-puppet快速入門-下

集中管理利器-puppet快速入門-下

實戰5.##文件刪除測試

代碼:

##文件刪除測

file   {"/tmp/test6":
    ensure => absent;
}

結果輸出:

62.png

文件管理常用參數詮釋:

1.backup參數
 
指定在文件內容替換之前進行備份操作,可以備份在本地,也可以集中備份。集中遠程備份的話可以使用filebucket(我們在后面的實戰部分會進行詳細介紹),這個備份的時候如果備份在本地可以指定備份的文件名。

2.content參數
 
指定文件的內容(字符串),這個參數和source、target參數沖突。

3.ensure參數
  這個參數指定是否創建、刪除文件或者目錄,有presentabsent、filedirectory等值。其中present會檢查文件是否存在,不存在就會創建一個空文件。absent會刪除文件或者目錄,如果是目錄需要指定recurse參數指定是否允許遞歸。如果指定的是其他的參數,則會創建連接文件,為了方便管理,建議在創建的時候使用ensure =>   link,并通過target參數指定文件。注意不能在windows系統上鏈接文件,

4.force參數
  該參數強制執行文件操作,進行如下操作的時候必須指定force參數
  1
purge 子目錄
  2
)用文件或者鏈接文件替換目錄
  3
)使用ensure =>   absent參數刪除目錄

5.group參數
  指定文件或者目錄的屬組,可以是組名或者組id,如果是windows的話屬組和屬主不能相同。

6.ignore參數
  這個參數指定在遞歸期間對符合指定的模式的文件操作將被忽略。

7.links參數
  這個參數指定處理文件期間如何處理鏈接文件,可以設置followmanage。在拷貝文件的時候,follow將會拷貝目標文件代替鏈接文件,manage將只會拷貝鏈接文件,ignore將會跳過。

8.mode參數
  這個參數用來指定文件或者目錄的權限,puppet使用傳統的unix權限方案,如果系統采用的權限方案不同的,puppet為這些系統將權限翻譯成等價的權限,比如windows。這些權限可以是數字(r=4,w=2,x=1)也可以是字符(rwxst)。

9.owner參數
  指定文件的屬主,可以是用戶名或是用戶id,如果是windows的話屬組和屬主不能相同。

10.path參數
  指定文件管理的路徑。Windows路徑也使用/而不是\

11.purge參數
 
這個參數會刪除在master上不存在的文件,這個參數只有在管理目錄的時候指定了recurse =>   true參數的時候才有意義。

12.recurse參數
 
這個參數指定是否進行遞歸調用以及遞歸調用的深度,選項如下
  1
inf,true  —在遠程和本地都進行遞歸調用
  2
remote —只在遠程進行遞歸調用
  3
false —不進行遞歸調用
  4
[0-9]+ —true參數一樣,但是限制遞歸調用目錄的深度

13.source參數
 
該參數指定將會被拷貝到指定位置的資源文件,值可以是指定遠程文件的URIS或者本地的完整路徑。可以指定多個sorce,這個參數和content、target沖突。

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;
}

結果輸出:

63.png

用戶管理常用參數詮釋:

1.manages_aix_lam
 
用來管理AIXLAM(Loadable Authentication Module)系統。

2.manages_members
 
對于目錄服務是組屬性成員,而不是用戶。

3.system_groups
 
用來允許你創建比較小GID的系統組,一般小于500。

()Puppet組管理參數

1.allowdupe
 
是否允許重復的GIDS,默認是false。

2.attributes
 
在一個key=>value對中指定AIX組的屬性,需要manages_aix_lam特性。

3.ensure
 
創建或者刪除組,值為presentabsent。

4.gid
 
ID,如果不指定的話會自動生成一個數字,但是不建議這么做。

5.ia_load_module
 
使用I&A模塊來管理用戶,同樣需要manages_aix_lam特性。

6.members
 
用來指定組的成員。

7.name
 
指定組的名字。

8.provider
 
使用group資源的后端。這些后端包括:
  aix — AIX
的組管理。
  directoryservice —
OS X上使用目錄服務進行組管理。
  groupadd —
使用groupadd管理組,大部分的平臺默認識用這個來管理。
  ldap —
通過ldap進行組管理。
  pw —
freebsd平臺上通過pw進行組管理。
  windows_adsi —
windows平臺上使用本地用戶管理。

9.system
 
指定組是否是小GID的系統組。

二、用戶的管理

()Puppet用戶管理特性
  1.allows_duplicates
 
支持含有相同UID的用戶。

2.manages_aix_lam
 
用來管理AIXLAM(Loadable Authentication Module)系統。

3.manages_expiry
 
管理一個用戶使用的有效期。

4.manages_homedir
 
創建或者刪除用戶的家目錄。

5.manages_password_age
 
設置密碼時間需求和限制。

6.manages_passwords
 
更改用戶的密碼,通過傳入密碼hash字串,后面實戰部分會詳細介紹。

7.manages_solaris_rbac
 
管理角色和普通用戶。

8.system_users
 
用來允許你創建比較小GID的系統用戶,一般小于500。

()Puppet用戶管理參數

1.allowdupe
 
是否允許重復的UID。

2.attributes
 
為用戶指定AIX屬性,需要manages_aix_lam特性。

3.auths
 
指定用戶的認證方式。

4.comment
 
用戶的描述。

5.ensure
 
指定用戶所處的基本狀態。其值可以為:presentabsent、role。

6.expiry
 
用戶使用期限。

7.gid
 
設置用戶的組ID??梢允菙底忠部梢允墙M名。

8.groups
 
設置用戶的組名,只能是組名,不能是GID。

9.home
 
設置用戶的家目錄。

10.   ia_load_module
 
使用I&A模塊來管理用戶,同樣需要manages_aix_lam特性。

11. managehome
 
當進行用戶管理的時候,是否同時管理用戶的家目錄。

12. name
 
指定用戶名。

13. password
 
指定用戶的密碼,后面的實戰部分會詳細講解。

14.   password_max_age
 
一個密碼在必須更改之前能使用的最多天數。

15.   password_min_age
 
一個密碼在必須更改之前能使用的最少天數。

16. profiles
 
指定用戶擁有的配置文件。

17. project
 
和用戶相關的項目的名字,需要manages_solaris_rbac特性。

18. provider
 
使用user資源的后端。這些后端包括:
  aix — AIX
的用戶管理。
  directoryservice —
OS X上使用目錄服務進行用戶管理。
  Hpuxuseradd — HP-UX
的用戶管理。
  ldap —
通過ldap進行用戶管理。
  pw —
freebsd平臺上通過pw進行用戶管理。
  user_role_add — solaris
的用戶和角色管理。
  useradd —
通過useradd進行用戶管理,加入你要進行密碼管理的話,需要安裝rubyshadow密碼庫,一般是ruby-libshadow
  windows_adsi —
windows平臺上使用本地用戶管理。

19. roles
 
用戶的角色,針對solaris系統適用。

20. shell
 
指定用戶登錄的shell

21. system
 
指定用戶是否為系統用戶,一般是小于500UID用戶。

22.uid
 
指定用戶的UID

文檔參考:

http://docs.puppetlabs.com/references/latest/type.html#user
http://docs.puppetlabs.com/references/latest/type.html#group

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為單位
 }

結果輸出:

64.png

常用參數詮釋:

1. command
 
指定要執行的命令。如果忽略,這個參數的值默認為資源的標題。必須填寫命令的完整路徑或者提供這個命令的查找路徑。假如命令執行成功,執行過程的輸出將會記錄到普通(normal)日志中,但是如果命令執行失敗,任何的輸出都會記錄到錯誤日志中

2. creates
 
命令創建的一個文件。加入這個參數設置的話,只有這個文件不存在的時候命令才會執行,例子:

3. cwd
 
命令執行的路徑。假如目錄不存在,命令執行將會失敗。

4. environment
 
為命令設置附加的環境變量。加入你用這個參數設置PATH,那么將會把path參數的值覆蓋。多個環境變量需要使用數組指定。

5. group
 
執行命令運行的用戶組。這個看起來在各個平臺運行結果不確定,這是平臺的問題不是ruby或者puppet的問題。

6. logoutput
 
是否記錄輸出信息。默認會根據exec資源的日志等級來記錄輸出信息,使用on_failure只有當命令執行出錯的時候才會記錄輸出信息。值可以為truefales、on_failure和任何合法的日志等級。

7. onlyif
 
只有onlyif指定命令執行返回為0的時候,命令才會執行

8. path
 
命令執行搜索的路徑。如果沒有指定path,命令需要填寫完整的路徑。路徑可以指定為一個數組并通過冒號分隔。

9.timeout
 
指定命令運行的最長時間。假如命令執行的時間查過timeout設定的時間,那么就會認為命令執行失敗了并且會停止該命令。設置為0表示沒有執行時間限制。時間以秒為單位。

10.tries
 
命令執行重試次數,默認為1。設置這個參數命令將會重試你設置的次數直到合理的代碼返回。

11.try_sleep
 
設置命令重試的間隔時間,單位是秒。

12.user
 
指定執行命令的用戶。
 
備注:加入你使用這個參數,任何錯誤輸出不會在當下撲捉。這是源自ruby內部的一個bug

文檔參考:

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刪除
}

結果輸出:

65.png

Cron管理常用參數詮釋

1.command
 
計劃任務執行的命令,最好指定命令的完整路徑。

2.ensure
 
定義資源是否存在,也有通過這個參數來刪除指定的計劃任務??赡艿闹禐?/span>present、absent

3.environment
 
和這個計劃任務有關的環境變量,比如設置PAHT,   PATH=/bin:/usr/bin:/usr/sbin。

4.hour
 
指定計劃任務X小時運行,如果指定話,值的范圍必須設置在0-23之間。

5.minute
 
指定計劃任務在X分鐘運行,如果指定話,值的范圍必須設置在0-59之間。

6.month
 
指定計劃任務在一年中的X月運行,如果指定話,值的范圍必須設置在1-12之間。

7.monthday
 
指定計劃任務在一個月的X天運行,如果指定話,值的范圍必須設置在1-31之間。

8.name
 
指定計劃任務的名字,這個名字只是提供給任命做參考,并且

9.target
 
計劃任務的存放位置。

10. user
 
指定執行計劃任務中命令的用戶。puppet不會去檢查用戶是否運行執行計劃任務,但是這個用戶必須允許執行計劃任務。默認的用戶為運行puppet的用戶。

11. weekday
 
指定計劃任務在一周的X天運行。如果指定話,值的范圍必須設置在0-7之間。注意0是表示星期天。

1.    常用命令歸類

puppet genconfig      #查看當前配置

service   puppetmasterd start   #啟動puppetmaster

service puppet   start     ##啟動客戶端

客戶端的運行報告在服務器端:/var/lib/puppet/reports/
 
每次運行會生產一個報告,報告文件名為:/var/lib/puppet/reports/hy18.uniqlick.com/201108020948.yaml

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加強                    

70.png71.png

1.    配置Agent

/etc/puppet/

puppet.conf:

[agent]
listen = true

72.png

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這塊功能有待完善

 73.png

3.    Master遠程確認8139端口可通,執行puppet kick

74.png

4.    agent確認最終結果

5. 報錯參考:

1.連接master的時候出現如下報錯:
  dnsdomainname: Unknown host
  解決辦法:
  檢查機器主機名的設置,以及是否添加進hosts。

2. 連接master的時候出現如下報錯:
  err: Could not request certificate: getaddrinfo: Name or service not known
  解決辦法:
  服務器端沒有配置hosts域名綁定,在hosts中添加。

3.連接master的時候出現如下報錯:
  warning: peer certificate won't be verified in this SSL session
  解決辦法:
  服務端還沒有返回簽發證書,使用puppet cert –list查看

4. 連接master的時候出現如下報錯:
  err: Could not retrieve catalog from remote server: certificate verify failed
  解決辦法:
  客戶端和服務器端時間不同步,SSL連接需要依賴主機上的時間是否正確。
  執行更新時間的命令:/sbin/ntpdate asia.pool.ntp.org

class類的嘗試

1.    配置主配置文件:

75.png

#   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默認加載的模塊目錄, —即在這些目錄下的配置會被默認加載

76.png

[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

77.png

#   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.    示例:

78.png

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

(0)
stanleystanley
上一篇 2015-05-07 09:44
下一篇 2015-05-11 05:44

相關推薦

  • locate、find命令使用總結

    一、簡介    在linux系統中存在"一切皆文件"的說法,這就足以說明文件的重要性,因此查找文件也是我們必須要掌握的技能。這時候熟練使用locate、find命令也就顯得至關重要。尤其是find命令常用于日常工作中如安裝完某個軟件之后要查看這些軟件的安裝配置路徑,或是需要按指定條件直接查找我們需要操作的文件。因此更需…

    Linux干貨 2015-08-31
  • 一起學DHCP系列(五)指派、獲取

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/163168     本節將主要講述DHCP客戶端獲取IP的過程,也是此系列中非常重要的一節。   &…

    Linux干貨 2015-03-25
  • 文件查找locate和find

    locate 查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db 依賴于事先構建的索引 索引的構建是在系統較為空閑時自動進行(周期性任務),管理員手動更新數據庫(updatedb) 索引構建過程需要遍歷整個根文件系統,極消耗資源 工作特點: ?查找速度快 ?模糊查找 ?非實時查找 ?搜索的是文件的全路徑,不僅僅是文件名 ?…

    2017-08-11
  • Linux命令格式及常用命令詳解

    Linux命令格式及常用命令詳解 Linux的命令格式 COMMAND OPTIONS ARGUMENTS COMMAND 表示要執行的命令 OPTIONS 表示命令的運行特性 RGUMENTS 命令的作用對象,有時可以包含多個對象,空格隔開 常用命令詳解 ifconfig 功能描述:獲取網絡接口配置信息或配置網絡接口 命令格式: ifconfig [-a]…

    Linux干貨 2017-07-02
  • 自制Linux系統實驗

    1、添加一塊新硬盤、并使系統識別 [root@centos6 ~]# echo "- – -" > /sys/class/scsi_host/host0/scan  [root@centos6 ~]# echo "…

    Linux干貨 2016-09-19
  • shell腳本之測試命令(test、[])

    話不多說,直接開車 在編寫shell腳本中,我們經常需要判斷命令執行的正確與否,從而進行不同的操作。首先我們來介紹下條件性的執行操作符:根據退出狀態而定,命令可以有條件地運行。其中,利用echo的話方便我們對測試結果的查看。 (1)&& 代表條件性的AND THEN 可以理解為短路與:當&&前面命令為真時,執行&am…

    Linux干貨 2017-08-05
欧美性久久久久