Puppet 的部署与应用,看这一篇就够了
工作原理
Puppet的目的是讓管理員只集中于要管理的目標(biāo),而忽略實(shí)現(xiàn)的細(xì)節(jié)。Puppet既可以在單機(jī)上使用,也可以c/s使用,在大規(guī)模使用puppet的情況下,通常使用c/s結(jié)構(gòu),在這種結(jié)構(gòu)中puppet客戶端只運(yùn)行puppetclient,puppet服務(wù)器只運(yùn)行puppetmaster。
工作流程
1)客戶端puppet調(diào)用facter(facter是通過(guò)ssl加密收集及檢測(cè)分析客戶端配置信息的一個(gè)工具),facter探測(cè)出主機(jī)的一些變量,如主機(jī)名,內(nèi)存大小,ip地址等。Puppet把這些信息通過(guò)ssl連接發(fā)送到服務(wù)器器端
Puppet工作過(guò)程有以下兩點(diǎn)值得注意:
1)為了保證安全,client和master之間是基于ssl和證書(shū)的,只有經(jīng)master證書(shū)認(rèn)證的client可以與master通信。
2)Puppet會(huì)讓系統(tǒng)保持在人們所期望的某種狀態(tài)并一直維持下去,例如:檢測(cè)某個(gè)文件并保證其一直存在,保證ssh服務(wù)始終開(kāi)啟,如果文件被刪除了或者ssh服務(wù)被關(guān)閉了,puppet下次執(zhí)行時(shí)(默認(rèn)30分鐘),會(huì)重新創(chuàng)建該文件或者啟動(dòng)ssh服務(wù)。
?●??搭建puppetmaster
?●??搭建puppetclient
?●??配置測(cè)試節(jié)點(diǎn)
?●??客戶端主動(dòng)拉取
?●??服務(wù)器推送
搭建 puppetmaster
規(guī)劃服務(wù)器主機(jī)名(小規(guī)模可以修改/etc/hosts文件,服務(wù)器多的時(shí)候我們需要搭建dns服務(wù)器來(lái)實(shí)現(xiàn)服務(wù)通過(guò)主機(jī)名進(jìn)行通信,這里就以/etc/hosts文件來(lái)實(shí)現(xiàn))
(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啟動(dòng)ntp服務(wù)并開(kāi)啟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上面配置時(shí)間同步,作為ntp的客戶端
[root@master /]# ntpdate 192.168.1.40 [root@master /]# mount /dev/cdrom /media/ [root@master /]# cd /media/ [root@master /]# ls安裝ruby(puppet就是基于ruby語(yǔ)言開(kāi)發(fā)的,所以需要安裝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(通過(guò)facter工具分析檢測(cè)客戶端傳來(lái)的信息)
[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復(fù)制配置文件
[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修改文件屬性并創(chuàng)建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服務(wù)證書(shū)請(qǐng)求與簽名
關(guān)閉防火墻(也可開(kāi)例外)
在[main]標(biāo)題下添加一行:配置服務(wù)器模塊路徑
[root@master /]# vim /etc/puppet/puppet.conf modulepath = /etc/puppet/modules:/usr/share/puppet/modules啟動(dòng)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
規(guī)劃服務(wù)器主機(jī)名
服務(wù)器時(shí)間同步 [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復(fù)制文件并設(shè)置執(zhí)行權(quán)限
[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服務(wù)證書(shū)請(qǐng)求簽名
[root@master /]# vim /etc/puppet/puppet.conf server = /master.itzhushou.cn注意:puppetclient2的配置過(guò)程與puppetclient1類(lèi)似,主機(jī)名改為client2.itzhushou.cn即可,其他都一樣。
注冊(cè)服務(wù)器
分別在puppetclient1和puppetclient2上進(jìn)行注冊(cè),執(zhí)行的命令一樣 [root@master /]# puppet agent --server=master.itzhushou.cn --no-daemonize --verbose上面會(huì)一直等待,可以按ctrl+c結(jié)束,但是服務(wù)器上已經(jīng)有申請(qǐng)信息了
(puppetmaster)
可以執(zhí)行puppet cert —list 查看申請(qǐng)注冊(cè)客戶端
將未注冊(cè)的客戶端進(jìn)行注冊(cè)Puppet cert sign —all
可以通過(guò)目錄去查看已經(jīng)注冊(cè)的客戶端(看到下面的信息說(shuō)明注冊(cè)成功了)
[root@master /]# ll /var/lib/puppet/ssl/ca/signed/
應(yīng)用案例
1、配置一個(gè)測(cè)試節(jié)點(diǎn)
節(jié)點(diǎn)信息:/etc/puppet/manifests/nodes
模塊信息: /etc/pupppet/modules
實(shí)驗(yàn)?zāi)繕?biāo):為了保護(hù)linux的ssh端×××破,批量修改客戶端的sshd端口,將22號(hào)端口改為9922,并實(shí)現(xiàn)重啟sshd服務(wù)的工作。
想完成以上幾點(diǎn),需要明確幾點(diǎn):
?●??需確定openssh軟件包安裝?●??需確定存在ssh的配置文件
?●??確定sshd的服務(wù)是系統(tǒng)服務(wù)
創(chuàng)建ssh模塊,模塊的目錄為ssh,模塊下有三個(gè)文件分別是:manifests、templates、files。
manifest里面必須包含一個(gè)init.pp文件,這是該模塊的的初始(入口)文件,導(dǎo)入一個(gè)模塊的時(shí)候需要從init.pp開(kāi)始執(zhí)行,可以把所有的代碼都寫(xiě)入到這個(gè)文件中,也可以分成多個(gè).pp文件,init在去包含其他文件,定義class類(lèi)名時(shí)必須是ssh,這樣才能實(shí)現(xiàn)調(diào)動(dòng)
files目錄是該模塊的發(fā)布目錄,puppet提供了一個(gè)文件分割機(jī)制,類(lèi)似rsync的模塊。
templates目錄包含erb模塊文件、這個(gè)和file資源的templates屬性有關(guān)(很少使用)
master端
[root@master /]# rpm -q openssh
創(chuàng)建必要的目錄
[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/創(chuàng)建模塊配置文件install.pp
Vi /etc/puppet/modules/ssh/manifests/install.pp
輸入以下信息(首先確定客戶端安裝了ssh服務(wù))
注意:present是以,結(jié)尾,由于配置的是ssh服務(wù),所以模塊名為ssh,如果配置http,則模塊名為http。
創(chuàng)建模塊配置文件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”
修改服務(wù)器端維護(hù)的sshd_config配置文件
[root@master /]# vim /etc/puppet/modules/ssh/files/ssh/sshd_config
Port 9922
重新啟動(dòng)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 *
.
啟動(dòng)puppet客戶端
[root@master /]# /etc/init.d/puppetclient start
```
(puppetmaster)
再次把服務(wù)器的ssh配置文件端口改為9933(換一個(gè)試試)
服務(wù)器推送給客戶端
[root@master /]# puppet kick client1.itzhushou.cn
在客戶端查看端口是否改變
原文發(fā)布時(shí)間為:2018-11-20
本文作者:李佳良
本文來(lái)自云棲社區(qū)合作伙伴“高效運(yùn)維?”,了解相關(guān)信息可以關(guān)注“高效運(yùn)維”。
總結(jié)
以上是生活随笔為你收集整理的Puppet 的部署与应用,看这一篇就够了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#异常--System.IO.File
- 下一篇: React总结篇之六_React高阶组件