Puppet 的部署与应用,看这一篇就够了
工作原理
Puppet的目的是讓管理員只集中于要管理的目標,而忽略實現的細節。Puppet既可以在單機上使用,也可以c/s使用,在大規模使用puppet的情況下,通常使用c/s結構,在這種結構中puppet客戶端只運行puppetclient,puppet服務器只運行puppetmaster。
工作流程
1)客戶端puppet調用facter(facter是通過ssl加密收集及檢測分析客戶端配置信息的一個工具),facter探測出主機的一些變量,如主機名,內存大小,ip地址等。Puppet把這些信息通過ssl連接發送到服務器器端
Puppet工作過程有以下兩點值得注意:
1)為了保證安全,client和master之間是基于ssl和證書的,只有經master證書認證的client可以與master通信。
2)Puppet會讓系統保持在人們所期望的某種狀態并一直維持下去,例如:檢測某個文件并保證其一直存在,保證ssh服務始終開啟,如果文件被刪除了或者ssh服務被關閉了,puppet下次執行時(默認30分鐘),會重新創建該文件或者啟動ssh服務。
?●??搭建puppetmaster
?●??搭建puppetclient
?●??配置測試節點
?●??客戶端主動拉取
?●??服務器推送
搭建 puppetmaster
規劃服務器主機名(小規模可以修改/etc/hosts文件,服務器多的時候我們需要搭建dns服務器來實現服務通過主機名進行通信,這里就以/etc/hosts文件來實現)
(puppetmaster)
[root@master /]# vim /etc/sysconfig/network HOSTNAME=master.itzhushou.cn . 192.168.1.10 master.itzhushou.cn [root@master /]# vim /etc/hosts 192.168.1.30 client2.itzhushou.cn 192.168.1.20 client1.itzhushou.cn 重啟生效 [root@master /]# reboot(NTP)
[root@master /]# rpm -q ntp [root@master /]# vim /etc/ntp.conf (添加以下兩行) server 127.127.1.0 fudge 127.127.1.0 stratum 8啟動ntp服務并開啟iptables例外
[root@master /]# service ntpd start [root@master /]# chkconfig ntpd on [root@master /]# iptables -I INPUT -p udp --dport 123 -j ACCEPT [root@master /]# service iptables save(puppetmaster)
[root@master /]# hostname
在puppetmaster上面配置時間同步,作為ntp的客戶端
[root@master /]# ntpdate 192.168.1.40 [root@master /]# mount /dev/cdrom /media/ [root@master /]# cd /media/ [root@master /]# ls安裝ruby(puppet就是基于ruby語言開發的,所以需要安裝ruby)
[root@master /]# yum -y install compat-readline5 [root@master /]# yum -y install ruby安裝完成之后檢查版本
[root@master /]# ruby -v [root@master /]#useradd -s /sbin/nologin puppet [root@master /]# cd /安裝facter(通過facter工具分析檢測客戶端傳來的信息)
[root@master /]# umount /dev/cdrom /media/ [root@master /]# umount /dev/cdrom [root@master /]# cd /media/ [root@master /]# mount /dev/cdrom /media/ [root@master /]# ls [root@master /]# cd /usr/facter-1.7.1/ [root@master /]# tar zxf facter-1.7.1.tar.gz -C /usr/ [root@master /]# ruby install.rb 安裝puppet編譯安裝:
[root@master /]# cd /media/ [root@master /]# tar zxf puppet-2.7.21.tar.gz -C /usr/ [root@master /]# cd /usr/puppet-2.7.21/ [root@master /]# ruby install.rb復制配置文件
[root@master /]# cp conf/redhat/fileserver.conf /etc/puppet/ [root@master /]# cp conf/redhat/puppet.conf /etc/puppet/ [root@master /]# cp conf/redhat/server.init /etc/init.d/puppetmaster修改文件屬性并創建puppet主目錄:
[root@master /]# chmod +x /etc/init.d/puppetmaster [root@master /]# mkdir /etc/puppet/manifets [root@master /]# mkdir /etc/puppet/modules [root@master /]# mkdir /etc/puppet/manifestspuppet服務證書請求與簽名
關閉防火墻(也可開例外)
在[main]標題下添加一行:配置服務器模塊路徑
[root@master /]# vim /etc/puppet/puppet.conf modulepath = /etc/puppet/modules:/usr/share/puppet/modules啟動puppet主程序
[root@master /]# service puppetmaster start [root@master /]# netstat -anpt | grep ruby配置防火墻
[root@master /]# iptables -I INPUT -p tcp --dport 8140 -j ACCEPT [root@master /]# service iptables save(puppetclient1)
搭建puppetclient
規劃服務器主機名
服務器時間同步 [root@master /]# ntpdate 192.168.1.40
安裝ruby
[root@master /]# mount /dev/cdrom /media/ [root@master /]# yum -y install compact-readline5 reby 或者rpm -ivh compact-readline5......安裝facter
[root@master /]# cd / [root@master /]# umount /dev/cdrom /media/ [root@master /]# mount /dev/cdrom /media [root@master /]# tar zxf facter-1.7.1.tar.gz -C /usr/ [root@master /]# cd /media/ [root@master /]# cd /usr/facter-1.7.1/ [root@master /]# ruby install.rb安裝puppet
[root@master /]# cd /media/ [root@master /]# tar zxf puppet-2.7.21.tar.gz -C /usr/ [root@master /]# cd /usr/puppet-2.7.21/ [root@master /]# ruby install.rb復制文件并設置執行權限
[root@master /]# cp conf/redhat/puppet.conf /etc/puppet/ [root@master /]# cp conf/redhat/client.init /etc/init.d/puppetclient [root@master /]# chmod +x /etc/init.d/puppetclient [root@master /]# service iptables stoppuppet服務證書請求簽名
[root@master /]# vim /etc/puppet/puppet.conf server = /master.itzhushou.cn注意:puppetclient2的配置過程與puppetclient1類似,主機名改為client2.itzhushou.cn即可,其他都一樣。
注冊服務器
分別在puppetclient1和puppetclient2上進行注冊,執行的命令一樣 [root@master /]# puppet agent --server=master.itzhushou.cn --no-daemonize --verbose上面會一直等待,可以按ctrl+c結束,但是服務器上已經有申請信息了
(puppetmaster)
可以執行puppet cert —list 查看申請注冊客戶端
將未注冊的客戶端進行注冊Puppet cert sign —all
可以通過目錄去查看已經注冊的客戶端(看到下面的信息說明注冊成功了)
[root@master /]# ll /var/lib/puppet/ssl/ca/signed/
應用案例
1、配置一個測試節點
節點信息:/etc/puppet/manifests/nodes
模塊信息: /etc/pupppet/modules
實驗目標:為了保護linux的ssh端×××破,批量修改客戶端的sshd端口,將22號端口改為9922,并實現重啟sshd服務的工作。
想完成以上幾點,需要明確幾點:
?●??需確定openssh軟件包安裝?●??需確定存在ssh的配置文件
?●??確定sshd的服務是系統服務
創建ssh模塊,模塊的目錄為ssh,模塊下有三個文件分別是:manifests、templates、files。
manifest里面必須包含一個init.pp文件,這是該模塊的的初始(入口)文件,導入一個模塊的時候需要從init.pp開始執行,可以把所有的代碼都寫入到這個文件中,也可以分成多個.pp文件,init在去包含其他文件,定義class類名時必須是ssh,這樣才能實現調動
files目錄是該模塊的發布目錄,puppet提供了一個文件分割機制,類似rsync的模塊。
templates目錄包含erb模塊文件、這個和file資源的templates屬性有關(很少使用)
master端
[root@master /]# rpm -q openssh
創建必要的目錄
[root@master /]# mkdir -p /etc/puppet/modules/ssh/{manifests,templates,files} [root@master /]# mkdir /etc/puppet/manifests/nodes [root@master /]# chown -R puppet /etc/puppet/modules/ [root@master /]# mkdir /etc/puppet/modules/ssh/files/ssh [root@master /]# ll /etc/puppet/modules/ssh/創建模塊配置文件install.pp
Vi /etc/puppet/modules/ssh/manifests/install.pp
輸入以下信息(首先確定客戶端安裝了ssh服務)
注意:present是以,結尾,由于配置的是ssh服務,所以模塊名為ssh,如果配置http,則模塊名為http。
創建模塊配置文件config.php
[root@master /]# vim /etc/puppet/modules/ssh/manifests/config.pp
class ssh::config{
file { “/etc/ssh/sshd_config”:
ensure =>present,
owner =>”root”,
group =>”root”,
mode =>”0600”,
source =>”puppet://$puppetserver/modules/ssh/ssh/sshd_config”,
require => Class[“ssh::install”],
notify => Class[“ssh::service”],
}
}
[root@master /]# vim /etc/puppet/modules/ssh/manifests/service.pp
class ssh::service {
service {“sshd”:
ensure=>running,
hasstatus=>true,
hasrestart=>true,
enable=>true,
require=>Class[“ssh::config”]
}
}
[root@master /]# vim /etc/puppet/modules/ssh/manifests/init.pp
class ssh{
include ssh::install,ssh::config,ssh::service
}
[root@master /]# vim /etc/puppet/manifests/nodes/ssh.pp
node ‘client1.itzhushou.cn’ {
include ssh
}
node ‘client2.itzhushou.cn’ {
include ssh
}
[root@master /]# vim /etc/puppet/manifests/site.pp
import “nodes/ssh.pp”
修改服務器端維護的sshd_config配置文件
[root@master /]# vim /etc/puppet/modules/ssh/files/ssh/sshd_config
Port 9922
重新啟動puppet
[root@master /]# /etc/init.d/puppetmaster restart
[root@master /]# vim /et/ssh/sshd_config
[root@master /]# netstat -anpt | grep ssh
[root@master /]# vim /etc/puppet/puppet.conf
listen= true
[root@master /]# vim /etc/puppet/puppet.conf
listen= true
[root@master /]# vim /etc/puppet/auth.conf
allow *
.
啟動puppet客戶端
[root@master /]# /etc/init.d/puppetclient start
```
(puppetmaster)
再次把服務器的ssh配置文件端口改為9933(換一個試試)
服務器推送給客戶端
[root@master /]# puppet kick client1.itzhushou.cn
在客戶端查看端口是否改變
原文發布時間為:2018-11-20
本文作者:李佳良
本文來自云棲社區合作伙伴“高效運維?”,了解相關信息可以關注“高效運維”。
總結
以上是生活随笔為你收集整理的Puppet 的部署与应用,看这一篇就够了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#异常--System.IO.File
- 下一篇: React总结篇之六_React高阶组件