在master模式下,咱们给每一个agent应用的manifest可能不止一个,因此在master端须要根据agent的主机名来创建一个站点清单(也多是多个站点清单),将某个agent要应用的全部manifest都填入这个清单中,而后直接应用这个清单便可;node
agent:默认每隔三十分钟向master发送node name和facts,并请求catalog;nginx
master:验证客户端身份,查找与其相关的site manifest,编译生成catalog,并发送给客户端;web
软件安装:直接使用yum安装便可vim
在master端须要安装puppet和puppet-server;也能够安装facter,用来管理本身;tomcat
puppetmaster监听在TCP的8140端口;安全
在agent端须要安装puppet和facter;服务器
puppetagent监听在TCP的8139端口;并发
配置文件:app
/etc/puppet/puppet.confdom
此配置文件相似于ini格式:
main段:适用于master和agent,为全局配置;
agent段:适用于agent,仅在agent上生效;
master段:适用于master,仅在master上生效;
且此文件支持相似变量的功能,能够经过puppet config print查看支持的全部变量(也是默认配置),且可使用”puppet config set [setting_name] [setting_value]”修改这些变量的值;
能够经过puppet master|agent --genconfig来生成符合此环境(须要基于默认的配置文件,因此咋生成这些信息以前不能够移动原来的配置文件)的配置信息(默认是发送到显示器上的,若是想要使用,则须要将其重定向到配置文件中,可是生成的信息中有的参数可能已经废弃,与如今的puppet版本可能不兼容);
关于配置文件的更详细的信息能够经过puppet doc命令查看;
puppet doc --list :能够查看文档包含的reference;
puppet doc -r :能够查看上面命令输出的某种reference的详细信息;
示例:puppet doc -r type
Note:由于puppet master与agent的通讯与hostname有关,因此必定要设置合适的主机名,建议master端使用FQDN(好比hello.guowei.com)格式的主机名,不然签证的时候可能会有错误,它会在你的主机名后加上.localdomain
启动服务:
master:第一次启动puppet master端服务时,建议使用puppet master –v --no-daemonize来查看启动是否正常(能够经过此命令的输出来了解服务启动流程,包括CA创建、字签证书、证书存放路径等),以后再经过脚本或者systemctl来启动服务;
agent:第一次启动puppet agent端服务时,建议使用puppet agent--server=SERVER_NAME --test来测试一下是否能够正常工做;而后再经过puppet agen --server SERVER_NAME向master端发送签证请求;这些都测试完毕之后,最后要编辑/etc/puppet/puppet.conf在[agent]或[main]中指定一下server地址,接着启动puppetagent服务(systemctl start puppetagent.service),之后agent就能够自动回去配置信息了;
示例:
~]# cat /etc/puppet/puppet.conf
[agent]
listen = true
server = node1.guowei.com
签署证书:
1.puppet master –v --no-daemonize ---> master端
2.中止上面运行的命令Ctrl+c
3.systemctl start puppetmaster.service ---> master端
启动puppetmaster服务,监听在8140端口
4. puppet agen --server SERVER_NAME ---> agent端
agent向master发起证书签署请求
5. puppet cert --list ---> master端
master端查看要求证书签署的agent
6.puppet cert sign AGENT_HOSTNAME ---> master端
签署agent;
7.agent与master创建链接完毕;
撤销证书,从新签署:
1. puppet cert clean AGENT_HOSTNAME ---> master端
2. rm -rf /var/lib/puppet/ssl/* ---> agent端
若是出现错误,从新签署一直没有成功就直接rm -rf /var/lib/puppet/*(根据状况而定,最坏的是master和agent都要执行这个命令),而后重启master,从新签署;
3. puppet agent --server= SERVER_NAME --no-daemonize -v ---> agent端
4. puppet cert sign AGENT_HOSTNAME ---> master端
安装全部要用到的模块:
puppet module install
本身制做
定义site manifest:
站点清单通常位于/etc/puppet/manifests/路径下,且要命名为site.pp;
site.pp定义节点的方式:
1.以主机名直接给出其相关定义:
node 'NODE_ANME' {
… puppet code …
}
2.把功能相近的主机事先按统一格式命名,按统一格式调用:
node /^web[0-9]+\.guowei\.com/ {
… puppet code …
}
示例:基于上一篇文章中的示例(最后一个示例)
~]#cat /etc/puppet/manifests/site.pp
node 'node2.guwoei.com' {
include nginx::proxy
}
~]#puppet agent --server=node1.guowei.com --no-daemonize -v
节点的继承:
node 'basenode' {
include ntp
}
node 'web.guowei.com' inherits basenode {
include ngnx::proxy
}
对节点进行分段管理:
在/etc/puppet/manifests/目录中根据状况建立多个子目录,而后在这些子目录中建立符合状况的.pp文件,最后在site.pp文件中引入这个.pp文件便可;
示例:
~]# tree /etc/puppet/manifests/
/etc/puppet/manifests/
├── appservers
│ └── tomcat.pp
├── cacheservers
│ └── varnish.pp
├── site.pp
└── webservers
└── nginx.pp
~]#cat /etc/puppet/manifests/site.pp
import "webservers/*.pp"
建议的主机命名方式:
角色-运营商-机房名-IP.DOMAIN.TLD
puppet的配置文件中的环境配置段:
环境配置端能够实现将不一样的场景(好比生产环境、测试环境、开发环境)中的主机分别对待,为其制定特有的manifest路径,从而实现为其发送不一样的配置信息,以适应其所处的环境;
示例:
master端的环境配置段:
vim /etc/puppet/puppet.conf
……..
[master]
environment = production,testing
声明master支持的环境配置段;
[production]
manifest = /etc/puppet/enviroments/production/manifests/site.pp
modulepath = /etc/puppet/enviroments/production/modules/
fileserverconfig = /etc/puppet/fileserver.conf
指定master端提供的文件服务器的配置文件;
[testing]
manifest = /etc/puppet/enviroments/testing/manifests/site.pp
modulepath = /etc/puppet/enviroments/testing/modules/
fileserverconfig = /etc/puppet/fileserver.conf
…….
agent端的对应配置:
[agent]
environment = production
根据本身所属的环境来指定,agent会自动发送此信息,以说明本身的身份,从而让master发送正确的配置信息给本身;
Puppet自带的文件服务器:
经过fileserver.conf文件且须要结合puppet.conf和auth.conf文件来定义文件服务器;auth.conf是用来实现对agent可否访问master的某个路径作安全管理的(即为puppet提供ACL功能);
fileserver.conf格式:
[mount_point]
path /PATH/TO/SOMEWHERE
allow HOSTNAME
allow_ip IP_ADDR
deny all
auth.conf格式:
path /path_to_somewhere
auth yes
method find,save
allow
allow HOSTNAME
allow_ip IP_ADDR
自动签署证书:autosign.conf:
让master在接收到agent的证书签署请求后,直接自动为其签署证书;
格式:
直接指明主机名便可,支持通配符;
*.guowei.com
Puppet的自动推送:kick
能够实现将新添加的配置当即同步到agent端,使其立刻生效;同步方法为:master通知agent到本身这里来请求新配置;
经过namespace.conf文件,指定哪些主机能够出发kick功能;
格式:
[puppetrunner]
allow HOSTNAME
使用Puppet面临的问题:
1.主机名:合理命名主机,且若是主机过多,通常建议使用DNS来提供IP地址解析;
DDNS:在主机得到地址之后,自动的将IP地址和主机名提交到DNS服务器,完成添加映射关系;
2.如何为系统准备好puppet agent;
能够在安装系统的时候直接将puppet集成到系统中,而后在经过kickstart文件,安装启动puppet;
注:根据马哥视频作的学习笔记,若有错误,欢迎指正;侵删