• Puppet 搭建与部署,看这一篇就够了
  • 来源:高效运维
Puppet工作原理
让管理员只集中于要管理的目标,而忽视实现的细节。puppet既可以在单机上使用,也可以以C/S结构使用。在大规模使用puppet的情况下,通常使用C/S结构,在这种结构中puppet客户端只运行puppetclient,Puppet服务端只运行puppetmaster。具体的工作流程如图所示:

环境
使用四台服务器模拟搭建puppet环境,拓扑图如下所示:

环境表

实验步骤
1.搭建Puppet Master
(1)规划三台服务器主机名[root@localhost ~]# vim /etc/hostname
master.test.cn
[root@localhost ~]# vim /etc/hosts
192.168.126.138 master.test.cn
192.168.126.148 client01.test.cn
192.168.126.158 client02.test.cn(2)服务器时间同步
由于puppet需要使用SSL证书,依赖时间同步,所以需要搭建NTP服务器1)搭建NTP Server[root@localhost ~]# yum install ntp -y
[root@localhost ~]# vim /etc/ntp.conf

添加以下两行:server 127.127.1.0 #指定本地作为时间源服务器
fudge 127.127.1.0 stratum 8其作用是当 /etc/ntp.conf 中定义的server都不可用时,将使用local时间作为NTP服务提供给NTP客户端。2)启动ntp服务并设置开机自启动[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start ntpd.service
[root@localhost ~]# systemctl enable ntpd.service
[root@localhost ~]# ntpstat #同步
synchronised to NTP server (193.228.143.13) at stratum 3
time correct to within 517 ms
polling server every 64 s3)puppetmaster作为NTP客户端的配置[root@master ~]# yum install ntpdate -y
[root@master ~]# ntpdate 192.168.126.159
6 Aug 09:45:03 ntpdate[3488]: adjust time server 192.168.126.159 offset -0.072288 sec #调整时间服务器192.168.126.159偏移-0.072288秒4)配置YUM源[root@master ~]# yum install epel-release -y

[root@master ~]# yum install puppet-server -y #安装puppet服务端5)启动puppet主程序[root@master ~]# systemctl stop firewalld.service
[root@master ~]# systemctl disable firewalld.service
[root@master ~]# setenforce 0
[root@master ~]# systemctl start puppetmaster.service
[root@master ~]# systemctl enable puppetmaster.service2.搭建puppetclient(两台客户端配置一样)1)通过域名ping通puppetmaster[root@client01 ~]# ping master.test.cn
PING master.test.cn (192.168.126.138) 56(84) bytes of data.
64 bytes from master.test.cn (192.168.126.138): icmp_seq=1 ttl=64 time=1.06 ms
64 bytes from master.test.cn (192.168.126.138): icmp_seq=2 ttl=64 time=3.27 ms
64 bytes from master.test.cn (192.168.126.138): icmp_seq=3 ttl=64 time=0.382 ms
64 bytes from master.test.cn (192.168.126.138): icmp_seq=4 ttl=64 time=0.660 ms2)服务器时间同步[root@client01 ~]# yum install ntpdate -y
[root@client01 ~]# vim /etc/ntp.conf
server 127.127.1.0 #指定本地作为时间源服务器
fudge 127.127.1.0 stratum 8

[root@client01 ~]# ntpdate 192.168.126.159
6 Aug 10:01:12 ntpdate[3303]: adjust time server 192.168.126.159 offset -0.012348 sec3)配置YUM源[root@client01 ~]# yum install epel-release -y

[root@client01 ~]# yum install puppet -y #安装puppet客户端4)修改puppet的配置文件/etc/puppet/puppet.conf[root@client01 ~]# vim /etc/puppet/puppet.conf
[main]
# The Puppet log directory.
# The default value is '$vardir/log'.
logdir = /var/log/puppet

# Where Puppet PID files are kept.
# The default value is '$vardir/run'.
rundir = /var/run/puppet

# Where SSL certificates are kept.
# The default value is '$confdir/ssl'.
ssldir = $vardir/ssl
server = master.test.cn #添加puppet master的地址5)分别在puppetclient01和puppetclient01上进行注册[root@client01 ~]# puppet agent --server=master.test.cn --no-daemonize --verbose
Info: Creating a new SSL key for client01.test.cn
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for client01.test.cn
Info: Certificate Request fingerprint (SHA256): C1:1F:11:32:53:96:AA:91:16:9F:CE:F2:AD:D2:3F:56:C7:9B:D9:87:5C:F8:2D:30:7D:FE:49:66:46:2A:D9:FC
Info: Caching certificate for ca6)查看申请注册的客户端[root@master ~]# puppet cert --list
"client01.test.cn" (SHA256) C1:1F:11:32:53:96:AA:91:16:9F:CE:F2:AD:D2:3F:56:C7:9B:D9:87:5C:F8:2D:30:7D:FE:49:66:46:2A:D9:FC
"client02.test.cn" (SHA256) 7C:C9:22:59:B2:1E:2B:F5:12:30:4D:88:D9:B1:AF:60:FE:02:65:7A:A2:3F:E3:B5:CB:1D:2F:9F:B5:4B:FD:6D7)对未注册的客户端进行注册[root@master ~]# puppet cert sign --all
Notice: Signed certificate request for client01.test.cn
Notice: Removing file Puppet::SSL::CertificateRequest client01.test.cn at '/var/lib/puppet/ssl/ca/requests/client01.test.cn.pem'
Notice: Signed certificate request for client02.test.cn
Notice: Removing file Puppet::SSL::CertificateRequest client02.test.cn at '/var/lib/puppet/ssl/ca/requests/client02.test.cn.pem'8)查看已经注册的客户端[root@master ~]# ll /var/lib/puppet/ssl/ca/signed/
总用量 12
-rw-r--r--. 1 puppet puppet 1952 8月 6 21:22 client01.test.cn.pem
-rw-r--r--. 1 puppet puppet 1952 8月 6 21:22 client02.test.cn.pem
-rw-r--r--. 1 puppet puppet 2021 8月 6 21:06 master.test.cn.pem此时客户端已经完成证书的请求与签名。配置实例
这里为了保护Linux的ssh端口,修改客户端client1的sshd端口,将端口22修改为9922,并实 现重启工作。首先创建ssh模块,ssh模块下面有三个文件:manifests,templates和files。在manifests里面包含一个init.pp文件,这是该模块的初始入口文件,导入模块时,会从init.pp开始执行。可以把所有的代码都写到init.pp里面,也可以分成多个pp文件,init再去包含其他文件。定义class类名的时候必须是ssh,这样才能实现调用。file目录是该模块的文件发布目录,Puppet提供一个文件分发机制,类似于rsync的模块。templates目录包含erb模型文件,这个和file资源的template属性相关,不过很少用。具体配置如下:1)创建必要的目录:[root@master ~]# cd /etc/puppet/
[root@master puppet]# mkdir -p modules/ssh/{manifests,templates,files}
[root@master puppet]# mkdir manifests/nodes
[root@master puppet]# mkdir modules/ssh/files/ssh
[root@master puppet]# chown -R puppet modules/ #修改权限2)查看/etc/puppet/modules/ssh目录下的结构[root@master puppet]# ll modules/ssh/
总用量 0
drwxr-xr-x. 3 puppet root 17 8月 6 21:32 files
drwxr-xr-x. 2 puppet root 6 8月 6 21:31 manifests
drwxr-xr-x. 2 puppet root 6 8月 6 21:31 templates3)创建模块配置文件install.pp[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/install.pp
输入以下信息(首先确定客户端已安装ssh服务):class ssh::install{
package{"openssh":
ensure=>present,
}
}4)创建模块配置文件config.pp[root@master puppet]# 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"], #调用install.pp确认ssh已经安装
notify=>Class["ssh::service"], #如果config.pp发生变化,通知service.pp
}
}5)创建模块配置文件service.pp[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/service.pp
class ssh::service{
service { "sshd":
ensure=>running, #确认ssh运行
hasstatus=>true, #puppet该服务支持status命令,类似于service sshd status
hasrestart=>true, #puppet该服务支持restart,类似于service sshd restart
enable=>true, #服务器是否开机启动
require=>Class["ssh::config"] #确认config.pp调用
}
}6)创建模块主配置文件init.pp[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/init.pp

class ssh {
include ssh::install,ssh::config,ssh::service #将配置文件加载到ssh类中去
}7)此时/etc/puppet/modeles/ssh/mainfests目录下有四个文件[root@master puppet]# ll /etc/puppet/modules/ssh/manifests/
总用量 16
-rw-r--r--. 1 root root 248 8月 6 21:40 config.pp
-rw-r--r--. 1 root root 60 8月 6 21:46 init.pp
-rw-r--r--. 1 root root 64 8月 6 21:38 install.pp
-rw-r--r--. 1 root root 165 8月 6 21:42 service.pp8)建立服务端ssh统一维护文件由于服务端和客户端的sshs_config文件默认一样,此时将服务端的/etc/ssh/sshd_config复制到模块默认路径中去。[root@master puppet]# cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
[root@master puppet]# chown -R puppet /etc/puppet/modules/ssh/files/ssh/ #修改权限9)创建测试节点配置文件,并将ssh加载进去。[root@master puppet]# vim /etc/puppet/manifests/nodes/ssh.pp
node 'client01.test.cn'{
include ssh
}

node 'client02.test.cn'{
include ssh
}10)将测试节点载入puppet,即修改site.pp。[root@master puppet]# vim /etc/puppet/manifests/site.pp

import "nodes/ssh.pp"11)修改服务器维护的sshd_config配置文件[root@master puppet]# vim /etc/puppet/modules/ssh/files/ssh/sshd_config
Port 22 #修改为992212)重启puppet服务[root@master puppet]# systemctl restart puppetmaster.service2.客户端主动拉取一般在小规模自动化集群中,如代码上线需要重启服务时,为了防止出现网站暂时性无法访问的问题,每台客户端运行一次puppet agent -t命令,选择模式根据客户端集群规模的大小。根据经验,一般puppet服务器到各客户端会建立ssh信任,然后自定义shell脚本,ssh批量让客户端执行puppet同步命令。1)Client01端:[root@client01 ~]# puppet agent -t
.....//省略
Notice: /Stage[main]/Ssh::Config/File[/etc/ssh/sshd_config]/content:
--- /etc/ssh/sshd_config 2017-08-07 10:28:25.000000000 +0800
+++ /tmp/puppet-file20180806-5162-jc80yr 2018-08-06 22:25:58.726506429 +0800
@@ -14,7 +14,7 @@
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
-#Port 22
+Port 9922
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
.....//省略

Client02端:....//省略
Notice: /Stage[main]/Ssh::Config/File[/etc/ssh/sshd_config]/content:
--- /etc/ssh/sshd_config 2017-08-07 10:28:25.000000000 +0800
+++ /tmp/puppet-file20180806-4667-149tj11 2018-08-06 22:27:39.362282788 +0800
@@ -14,7 +14,7 @@
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
-#Port 22
+Port 9922
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
......//省略2)此时命令在客户端执行成功,验证如下:[root@client01 ~]# cat /etc/ssh/sshd_config | grep Port
Port 9922
#GatewayPorts no3)查看服务器ssh服务是否重启,端口是否生效。[root@client01 ~]# netstat -tunlp | grep ssh
tcp 0 0 0.0.0.0:9922 0.0.0.0:* LISTEN 5428/sshd
tcp6 0 0 :::9922 :::* LISTEN 5428/sshd3.服务器推送同步1)当大规模部署时,采用服务器推送模式。client:
[root@client02 ~]# vim /etc/puppet/puppet.conf
最后一行添加
listen = true #使puppet监听8139端口2)验证配置文件auth.conf定义了一些验证信息及访问权限[root@client02 ~]# vim /etc/puppet/auth.conf
最后一行添加
allow * #允许任何服务端推送3)启动puppet客户端[root@client02 ~]# systemctl start puppetagent.service

[root@client02 ~]# cat /etc/ssh/sshd_config #查看
......//省略
Port 9922
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
......//省略4)开始往客户端推送Master:
[root@master puppet]# puppet kick client02.test.cn
Triggering client02.test.cn
Getting status
status is success
client02.test.cn finished with exit code 0
Finished5)校验结果如下[root@master puppet]# cat /etc/ssh/sshd_config | grep Port
#Port 22
#GatewayPorts no6)查看服务器ssh服务是否重启,端口是否生效。[root@client02 ~]# netstat -tunlp | grep ssh
tcp 0 0 0.0.0.0:9922 0.0.0.0:* LISTEN 4908/sshd
tcp6 0 0 :::9922 :::* LISTEN 4908/sshd实验成功,仅供参考。作者:何以重见
来源:https://blog.51cto.com/13642258/2155525GOPS全球运维大会 2019 · 上海站,最想听的专场,你来做主第十三届 GOPS 全球运维大会,为期两天,近 20 个专场等你来评选,扫描下方二维码,选出你心仪的专场~
扫描查看专场设置 ▼
点击,查看完整日程








何以重见




扫一扫下载订阅号助手,用手机发文章

赞赏



长按二维码向我转账


受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。


















已同步到看一看



取消
发送


我知道了








朋友会在“发现-看一看”看到你“在看”的内容
确定













已同步到看一看写下你的想法



最多200字,当前共字
发送







已发送







朋友将在看一看看到
确定



写下你的想法...









取消
发布到看一看
确定




最多200字,当前共字








发送中













微信扫一扫
使用小程序










取消
允许











取消
允许














知道了








确定


社会

  • 在厕所自拍,最重要的是脸要臭。
    大家好,欢迎回来 WhatYouNeed,很高兴在今天的深夜与你相遇,我们将会认真和你聊聊,在当代年轻人所喜欢的厕所自拍里,最重要的技巧是什么。他们又是如何在洗手间里,通过自拍获得朋友圈胜利的。请看:
    我要WhatYouNeed
  • 中国这样的熟人社会,注定容不下Costco|大家
    8月27日那天,名为#Costco开业首日被挤爆#的话题火速蹿升,阅读1.7亿,讨论2.2万。 涌去Costco购物的人潮 相隔不过一个星期时间,#costco会员排队退卡#的话题同样不失火热,阅
    大家
  • 你玩绿洲的样子像极了Costco里的大妈
    要想生活过得去,头上总得带点绿。 这是我十多年前在东北学会的第一句俏皮话。 微博可能是想让大家的幸福指数高点,悄咪咪的推出了一款社交应用—「绿洲」。 楚云飞说过一句话:「你他娘的呀,总是能给我出点新花
    三表龙门阵
  • 讲稿|李天纲:江南文化与欧洲世界
    讲者:李天纲 《东方历史评论》微信公号:ohistory 1 欧洲已在江南:早期全球化 “江南文化”最近很多人讲,选大家没有讲过的,就想到了“江南文化与欧洲世界”。其实也讲过,学术圈不少讨论会在
    东方历史评论
  • 黑石集团创始人:当你面临两难选择时,永远选择长远利益…
    张辉 改变自己主创 辉哥奇谭主创 | 布道师 我是一个长期主义者,每次在短期诱惑和长期利益之间做选择时,我总会毫不犹豫选择长期利益,从我的生活、工作到投资,概莫能外。经历数年,我也逐渐体会到作
    改变自己
  • 黑石集团创始人:当你面临两难选择时,永远选择长远利益…
    张辉 改变自己主创 辉哥奇谭主创 | 布道师 我是一个长期主义者,每次在短期诱惑和长期利益之间做选择时,我总会毫不犹豫选择长期利益,从我的生活、工作到投资,概莫能外。经历数年,我也逐渐体会到作
    改变自己
  • 美国网约车整个商业模式或被摧毁
    两个月前,我在坐地铁时读到一条大报自媒体上的新闻,说是美国监管机构要正式分拆美国大型互联网公司了。我心里“咯噔”了一下,心想:这是美国科技业要走倒退之路吗? 次日,我们的会员上海宋硕资本创始合伙人虞
    硅发布
  • 7亿剁手党和1000万自闭症患者的秘密
    自闭症患者有个诗意的名字——「星星的孩子」,以形容他们像遥远星辰那样,在夜空中独自闪耀。但现实却残酷得多,他们大多在无知或无奈中错过最佳的干预时机,以致一生孤独,备受嫌弃,直至一群IT工程师和产品经理
    人物
  • 在线旅游20年,“四极+两派”之战
    作者|王长胜 出品|科技观察 商场如战场,在20多年的互联网大战之中,有一个细分战场自始至今都没有缺席,那就是在线旅游领域。它几乎与中国互联网的诞生同步,同期诞生的还有电子商务、搜索和在线媒体,至
    科技观察
  • 你都如何回应我,翻白眼或是吐唾沫
    上周末读了一本快餐书,书名叫《认同:赢取支持的艺术》,书薄且浅,大概两三小时就可以翻完。书的主题是关于如何为我们的想法或方案争取别人的认同和支持,内容集中在当我们的想法受到质疑和挑战时,应当如何应对。
    二爷鉴书
  • 论文大焖锅 | 暑假教师进阶项目 NBER短推送:部分违约
    Cristina Arellano, Xavier Mateos-Planas, José-Víctor Ríos-Rull.2019. "Partial Default "NBER Woring P
    论文大焖锅
  • 对不起,上海不再“陪跑”!
    文/刘晓博 来源/刘晓博说财经 (识局微信公共账号zhijuzk) ▼ 8月30日上午,上海发布了《关于促进中国(上海)自由贸易试验区临港新片区高质量发展实施特殊支持政策的若干意见》。 这份“
    识局
  • 互联网上无隐私,是真的么?
    很多人好奇,互联网巨头的广告投放是不是知道自己隐私,是怎么知道的。 其实,我不能说互联网巨头的广告投放,一定用到了你特定的隐私,实际上很多网上的传言我个人感觉并不现实,比如所谓监听你聊天记录或通话内
    caoz的梦呓
  • Puppet 搭建与部署,看这一篇就够了
    Puppet工作原理 让管理员只集中于要管理的目标,而忽视实现的细节。puppet既可以在单机上使用,也可以以C/S结构使用。在大规模使用puppet的情况下,通常使用C/S结构,在这种结构中pup
    高效运维
  • 原创丨美新绞杀开始,华为强势反击!
    上工·中式红酒3天销量过万。和战友们说下第一次接触感受。占豪品过不少很贵红酒,都勾不起兴趣。上工初见样品感觉包装大气,对酒则例行试尝未抱期望。然而酒入口即显不同,第一印象:酒体清澈,满嘴果香,咽下回甘
    占豪
1 2 3 4 5 >>