天天看點

運維自動化之Puppet學習

1、說明

可管理配置檔案、進行使用者管理、實作檔案分發(建議小檔案)、實作cron任務管理、實作分類管理用戶端、軟體安裝、服務管理、定時腳本、執行指令、實作目标用戶端執行腳本(前提是用戶端已經存在該腳本)

作業系統:

debian wheezy 7.2_64bit

Linux localhost 3.2.0-4-amd64 #1 SMP  Debian 3.2.51-1 x86_64 GNU/Linux

線上安裝版本

ruby  1.9.3 \ facter 1.6.10 \ puppet2.7.23

源碼安裝版本

ruby-1.8.7-p374.tar.gz  \  facter-1.7.4.tar.gz  \

2、安裝

# apt-get install build-essential vim unzipntpdate

(1)伺服器端

# vim /etc/hostname      //灰色标記的内容均為檔案内容

puppet.master.com

# vim /etc/hosts    //沒有DNS時

192.168.24.8   puppet.master.com

192.168.24.14 web.agent1.com

192.168.24.15  dydg100.agent2.com

# apt-getinstall puppetmaster

(2)用戶端

# vim /etc/hostname

web.agent1.com

# apt-getinstall puppet

# vim /etc/default/puppet  

START=yes

(3)版本資訊

# ruby -v

ruby 1.9.3p194 (2012-04-20 revision 35410)[x86_64-linux]

# whereis ruby

ruby: /usr/bin/ruby1.8 /usr/bin/ruby/usr/lib/ruby /usr/share/man/man1/ruby.1.gz

# facter -v

1.6.10

# whereis facter

facter: /usr/bin/facter/usr/share/man/man8/facter.8.gz

# puppet -V

2.7.23

# whereis puppet

puppet: /usr/bin/puppet /etc/puppet/usr/share/man/man8/puppet.8.gz

(1)安裝openssl

# tarzxvf openssl-1.0.1.tar.gz

# cdopenssl-1.0.1

#./config -fPIC --prefix=/usr/local/openssl enable-shared

# make&& make install

(2)安裝Ruby

### 下載下傳頁面:http://cache.ruby-lang.org/pub/ruby/

# wget http://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p374.tar.gz

# tarzxvf ruby-1.8.7-p374.tar.gz

# cd ruby-1.8.7-p374

#./configure

# cd ruby-1.8.7-p374/ext/openssl

# rubyextconf.rb –with-openssl-dir=/usr/local/openssl \

--with-openssl-include=/usr/local/openssl/include\

--with-openssl-lib=/usr/local/openssl/lib

# make&& make install  //否則安裝puppet時報錯:Could not load openssl; cannotinstall

# whereisruby     // ruby: /usr/local/bin/ruby/usr/local/lib/ruby

# ruby -v         // ruby 1.8.7 (2013-06-27 patchlevel374) [x86_64-linux]

# ruby-ropenssl -e "puts :yep"  //輸出 yep 說明Ruby所依賴的OpenSSL 庫無問題

### 備注:ruby中文網址:https://www.ruby-lang.org/zh_cn/downloads/

(3)安裝Facter

### 下載下傳頁面:http://puppetlabs.com/misc/download-options

# wgethttp://downloads.puppetlabs.com/facter/facter-1.7.4.tar.gz

# tarzxvf facter-1.7.4.tar.gz

# cdfacter-1.7.4

# rubyinstall.rb

# whereisfacter    // facter:/usr/local/bin/facter

# facter -v        // 1.7.4

(4)安裝Puppet

# wget http://downloads.puppetlabs.com/puppet/puppet-3.4.2.tar.gz

# tarzxvf puppet-3.4.2.tar.gz

# cdpuppet-3.4.2

3、配置

1、puppet.conf

# vim /etc/puppet/puppet.conf

# 預設配置暫時沒有做修改

2、啟動

# /etc/init.d/puppetmaster start

[main]

logdir=/var/log/puppet

vardir=/var/lib/puppet

ssldir=/var/lib/puppet/ssl

rundir=/var/run/puppet

factpath=$vardir/lib/facter

templatedir=$confdir/templates

prerun_command=/etc/puppet/etckeeper-commit-pre

postrun_command=/etc/puppet/etckeeper-commit-post

[master]

# These are needed when the puppetmaster is run bypassenger

# and can safely be removed if webrick is used.

ssl_client_header = SSL_CLIENT_S_DN

ssl_client_verify_header = SSL_CLIENT_VERIFY

[agent]

server = puppet.master.com   //配置伺服器端主機名

2、puppet

//以下解決啟動報: puppet notconfigured to start, please edit /etc/default/puppet to enable

3、啟動用戶端

# /etc/init.d/puppet start

(1)用戶端注冊請求

# puppet agent --test

(2)服務端檢視注冊請求

# puppet cert list --all  

(3)服務端受理注冊請求

# puppet cert sign web.agent1.com

(4)用戶端确認注冊是否成功

info: Caching catalog for web.agent1.com

info: Applying configuration version '1392266761'

notice: Finished catalog run in 0.03 seconds

(5)啟動伺服器端和用戶端

###用戶端

# /etc/init.d/puppet stop

# rm -rf /var/lib/puppet

### 伺服器端

# puppet cert clean web.agent1.com    //删除用戶端認證

# puppet cert list --all     //服務端檢視注冊請求

### 用戶端

# puppetd --server puppet.master.com --test    //重新生成認證

info: Applying configuration version '1392265820'

# puppet cert list --all     //檢視所有用戶端的請求(有+号的代表已經簽好證書可以通信,沒有加号的代表尚未簽好證書。

"web.agent1.com"  //若沒有加号,沒有簽好證書,需要重新認證

# puppet cert sign web.agent1.com   //受理注冊請求,完成認證

//測試是否正常

# puppet agent --test --noop --server puppet.master.com

info: Applying configuration version '1392266401'

(1)在服務端

#vim /etc/puppet/puppet.conf

autosign = /etc/puppet/autosign.com

#vim /etc/puppet/autosign.conf

game.agent2.com

#puppet agent --test --noop --server puppet.master.com

4、使用者組資源

# puppet -V     2.7.23

#tree puppet

puppet

├── auth.conf

├── etckeeper-commit-post

├── etckeeper-commit-pre

├── fileserver.conf

├── manifests

│   ├── modules.pp

│   ├── nodes

│   │   ├── gameapp

│   │   │   └── agent2.pp

│   │   ├── gamedb

│   │   │   └── agent1.pp

│   │   └── site.pp

│   └── site.pp

├── modules

│   └── users

│       ├── file

│       ├── manifests

│       │   ├── addgroup.pp

│       │   ├── adduser.pp

│       │   └── init.pp

│       └── templates

│           ├── laowafang_authorized_keys.erb

│           ├── dada_authorized_keys.erb

│           ├── zhiban1_authorized_keys.erb

│           └── zw_authorized_keys.erb

├── puppet.conf

└── templates

# cd /etc/puppet/modules

# mkdir -p user/{manifests,templates,files}

# touch user/manifests/init.pp

# touch user/manifests/addgroup.pp

# touch user/manifests/adduser.pp

(1)init.pp内容,入口程式,必須建立

# cat /etc/puppet/modules/users/manifests/init.pp

class users {

   include users

}

(2)addgroup.pp建立使用者組用“定義”資源容器

# cat /etc/puppet/modules/users/manifests/addgroup.pp

define users::addgroup ($groupname='')

{

   includeusers

       group

       {   $groupname:

          ensure => present,

       }

(3)adduser.pp建立使用者

# cat # cat /etc/puppet/modules/users/manifests/adduser.pp

define users::adduser ($username='', $useruid='',$userhome='', $usershell='/bin/bash', $groupid)

   user

   {   $username:

      ensure  => present,

      uid   => $useruid,

       shell=> $usershell,

       gid=> $groupid,

      home  =>"/home/$userhome",

   }

   file

   {   "/home/$userhome":

      owner   => $useruid,

      group   => $useruid,

      mode    => 700,

      ensure  => directory;

   {   "/home/$userhome/.ssh":

      ensure  => directory,

       require=> File["/home/$userhome"];

   {   "/home/$userhome/.ssh/authorized_keys":

      mode    => 600,

       content=> template("users/${userhome}_authorized_keys.erb"),

       require=> File["/home/$userhome/.ssh"];

(4)templates下*.erb檔案為sshKey檔案

1、建立對應節點所需檔案

# mkdir -p /etc/puppet/manifests/nodes/gamedb

# mkdir -p /etc/puppet/manifests/nodes/gameapp

# touch /etc/puppet/manifests/modules.pp

# touch /etc/puppet/manifests/site.pp

# touch /etc/puppet/manifests/nodes/site.pp

# touch /etc/puppet/manifests/nodes/gamedb/agent1.pp

# touch /etc/puppet/manifests/nodes/gameapp/agent2.pp

2、檔案内容清單

(1)modules.pp

# cat /etc/puppet/manifests/modules.pp

import "users"

(2)site.pp

# cat /etc/puppet/manifests/site.pp

import "nodes/site.pp"

import "modules.pp"

#user { 'zw':          //注釋的是測試删除所有節點使用者用的

#       ensure=> absent,

#}

#user { 'laowafang':

(3)site.pp

# cat /etc/puppet/manifests/nodes/site.pp

import "gamedb/agent1.pp"

import "gameapp/agent2.pp"

(4)agent1.pp

# cat /etc/puppet/manifests/nodes/gamedb/agent1.pp

node "web.agent1.com" {

  users::addgroup { 'allgroup':

      groupname => [ 'yanfa', 'ywsa', 'ywdba', 'zhiban' ]

  users::adduser { 'zw':

      username => 'zw',

       useruid=> 1000,

      userhome => 'zw',

       groupid=> 'ywsa',

  users::adduser { 'laowafang':

      username => 'laowafang',

       useruid=> 1001,

       userhome=> 'laowafang',

       groupid=> 'ywdba',

(5)agent2.pp

# cat /etc/puppet/manifests/nodes/gameapp/agent2.pp

node "dydg100.agent2.com" {

      groupname => [ 'ywsa', 'ywdba', 'yanfa', 'zhiban' ]

  users::adduser { 'dada':

      username => 'dada',

       useruid => 1001,

      userhome => 'dada',

       groupid=> 'yanfa',

  users::adduser { 'zhiban1':

      username => 'zhiban1',

       useruid=> 1002,

      userhome => 'zhiban1',

       groupid=> 'zhiban',

### 兩個用戶端分别測試

# puppetagent --test --noop --server puppet.master.com  //進行檢查

info: Applying configuration version'1393300345'

……省略

notice: Finished catalog run in 0.10seconds

#puppet agent --test --server puppet.master.com    //真正建立

5、常用操作

# puppet parser validate adduser.pp    //檢查文法

# puppet master --genconfig |grepmodulepath  //檢查對應配置檔案路徑

# puppet module list    //檢視已安裝的子產品

### 剛學習到此,主要是摸清楚了軟體目錄結構和運作流程,其中沒有詳細的解釋說明,基本都是實際操作,大家可以另行檢視其他說明,推薦圖書:劉宇的《puppet實戰》,高永超翻譯的《精通puppet配置管理工具》。有時間繼續補上其他的……

繼續閱讀