puppet之master/agent模型详解

简介:

puppet的master-agent模型原理

wKioL1P-gpCDizL0AAGj4SOxPK8830.jpg 

agent需要发送node name 以及各facts 到master端,所以需要占据不小的带宽

master端在收到agent请求后首先判断是哪个节点,判断完成之后去找匹配当前node的定义,找到后对比客户端发送的时候生成的catalog,然后将catalog发送给agent

 

master一定要去判定获取应该执行哪些内容,假如从site.pp中获取include定义大概需要三个类的话,因此master必须到它的对应的模块中,(只要类是存在的),master一定会获取这些类并将它们整合在一起进行编译成catalog,而后将编译的结果(catalog)发送至agent端

 

agent拿到catalog之后,就可以在本地运行

但是master端发送过来的时候,内容可能已应用过了;或者是已经发来了三个类,这些类中除了一个类,其他类全都应用过了,因此将其再次应用即可

 

因此在应用的时候,要先查询当前节点所关联的每一个资源的状态信息,而后强制那些没有跟对应的资源定义不一样的内容强制改变为在资源中所定义的状态并应用

 

应用完后则报告至master端

 

最终则实现我们所定义的目标状态

 

证书的签发

签证的时候如果存在agent向master进行申请,而master却不在线,那么则无法签署了,因此我们可以让其实现自动签署,那么自动签署则会很不安全,一般情况下,自动签署是不应该使用的,不能自动签署那就意味着我们需要现场签署,偶尔我们可能迟到签署的,但是比自动签署要安全很多

 

如果要想实现自动签的话

可以设置master自动签发所有的证书,我们只需要在/etc/puppet 目录下创建 autosign.conf 文件。(不需要修改 /etc/puppet/puppet.conf文件,因为我默认的autosign.conf文件的位置没有修改)

cat > /etc/puppet/autosign.conf<<EOF               

*.test.com
EOF

这样就会对所有来自 test.com 的机器的请求,都自动签名。

 

还可以使用预签证书

在服务器端为每一个客户端生成秘钥并签署证书,然后让agent自己去复制证书

 

因此最好还是使用第一种方法

一般我们做一个证书的时候对方有一个主机名,因为在网络内地址会随时发生改变的,但主机名一般是固定的,这样一来带来一个问题,既然每个节点都是靠FQDN来定义,于是意味着在当前网络内每个被管理的节点都必须有FQDN 而且必须通过网络内DNS服务器解析通过才可以

 

大规模的网络环境中DNS服务器必不可少

 

agent端在master验证了来源之后,接下来一定知道agent的定义,每个agent的需求各不相同的

因此agent只会读取site.pp文件,那么我们要分门别类的去做,可以实现为每一类服务器定义一个pp文件,而后在site.pp里执行impor 即可

 

比如在site.pp里定义包含web.pp proxy.pp等 

 

只要包含进来的都会被读取,而这每个文件里面的都应该是节点的定义,每个节点中无非就要声明执行哪一类的,从而master端根据客户端的请求者的名称得到认证之后,将FQDN去对比puppet的manifests下的site.pp中的node定义,当匹配了之后则将node pp中的内容进行获取

 

节点也可以继承,我们可以定义基本配置,让特殊节点各自在额外添加对类的支持即可

因此site.pp中可以定义一个基本类,而后在其他pp文件里去继承基本类,并且在site.pp中奖其他pp文件import即可,或者自己定义一个基本node 

 

接下来就可以获取到各class文件了,class可能在不同的路径或者依赖不同的file文件或模板文件;那么我们如何获取这些文件:class默认都在各个模块目录中,不管当前节点有多少个模块master一定会根据需要将模块定义的各个类自动装载的,所以我们声明一个类就需要在自动装载器所装载的类中进行加载,如果某一node包含了事先并不存在的类,那么则无法执行

 

实现多节点管理

规划如下:

服务器角色

服务器IP

Master : node3.test.com

10.12.33.57

Agent  :  node1.test.com

10.12.33.58

测试hostname无误

[root@node3 manifests]# ping node1.test.com

PING node2.test.com (10.12.33.59) 56(84) bytes of data.

64 bytes from node2.test.com (10.12.33.59): icmp_seq=1ttl=64 time=1.60 ms

将站点清单移动至其他目录

[root@node3 manifests]# pwd

/etc/puppet/manifests

[root@node3 manifests]# mv site.pp /tmp/

 

启动为master/agent模式

在master/agent的模式下,我们必须将其服务启动起来,安装上服务后才可以后续操作

[root@node3 manifests]# ls /etc/init.d/puppet*

/etc/init.d/puppet /etc/init.d/puppetmaster  /etc/init.d/puppetqueue

我们所用到的无非就是标红的字体的脚本了

 

启动master

/etc/puppet/puppet.conf 默认只适用agent端,需要将其覆盖掉,因此我们需自己生成配置文件

[root@node3 puppet]# pwd

/etc/puppet

[root@node3 puppet]# puppet master --genconfig >puppet.conf

 

覆盖完成之后,某些内容需要更改不然无法正常工作

 

更改pid,一般pid都放在/var/run 目录下,因此更改参数如下 

[root@node3 puppet]# vim puppet.conf

 rundir = /var/run/puppet 

 pidfile = $rundir/master.pid

 

启动服务

第一次启动的时候不建议使用service启动,首先要使用手动启动并观察其是否会报出error信息

[root@node3 puppet]# puppet master --no-daemonize--verbose --debug

过程中,我们可以看到以下信息

Info:Creating a new SSL key for ca                    #为CA创建key
Info: Creating a new SSL certificate request for ca             #为CA创建字签
Info: Certificate Request fingerprint (SHA256): 1A:55:58:42:32:C6:6:98:AF:02
Notice: Signed certificate request for ca
Debug: Using cached certificate for ca
Info: Creating a new certificate revocation list         #为当前节点创建证书颁发申请
Info: Creating a new SSL key for node3
Debug: Using cached certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.y
Info: Creating a new SSL certificate request for node3
Info: Certificate Request fingerprint (SHA256): F5:2B:6C:86:29:81:7:DD:B9:B1    #为当前节点创建证书
Notice: node3 has a waiting certificate request
Debug: Using cached certificate for ca
Debug: Using cached certificate_request for node3
Notice: Signed certificate request for node3
Notice: Removing file Puppet::SSL::CertificateRequest node3 at'/etc/puppet/ssl/ca/requests/node3.pem'          #当前节点为CA服务器而后为每个agent颁发证书
Notice: Removing file Puppet::SSL::CertificateRequest node3 at'/etc/puppet/ssl/certificate_requests/node3.pem'

Debug: Using settings: adding file resource 'config':'File[/etc/pu:loglevel=>:debug,:path=>"/etc/puppet/puppet.conf"}'
Debug: Finishing transaction 69861255471540

如果确保没有问题,我们取消进程而后使用service启动服务

[root@node3 puppet]# /etc/init.d/puppetmaster start

查看服务是否被监听

[root@node3 puppet]# ss -tanlp | grep 8140

LISTEN     0      5                         *:8140                     *:*      users:(("puppet",8233,5))

 

配置agent端

安装puppet

[root@node1~]# rpm -ql puppet

[root@node1 ~]#wgethttp://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm

[root@node1 ~]# rpm -ivhpuppetlabs-release-el-6.noarch.rpm 

[root@node1 ~]# yum install puppet

 

[root@node1 ~]# cd /etc/puppet/

编辑配置文件在[main]加入参数

[main]

    server =node3.test.com

保存退出 并手动启动agent,查看是否存在error信息

puppet agent --server=node3 --no-daemonize --verbose--debug

如果出现以下信息

Debug: /File[/var/lib/puppet/ssl/private_keys/node1.localhost.pem]:Autorequiring File[/var/lib/puppet/ssl/private_keys]

则需要将本地puppet生成的key删除

[root@node1 puppet]# cd /var/lib/puppet/ssl

[root@node1 ssl]# ll

total 24

drwxr-xr-x 2 puppet puppet 4096 Aug 21 14:42certificate_requests

drwxr-xr-x 2 puppet puppet 4096 Aug 21 14:44 certs

-rw-r--r-- 1 puppet puppet 1141 Aug 21 14:44 crl.pem

drwxr-x--- 2 puppet puppet 4096 Aug 21 14:41 private

drwxr-x--- 2 puppet puppet 4096 Aug 21 14:42 private_keys

drwxr-xr-x 2 puppet puppet 4096 Aug 21 14:42 public_keys

[root@node1 ssl]# rm -fr *

 

再次运行,如果显示以下信息则为正确

Info: Creating a new SSL key for node1.test.com

Info: Caching certificate for ca

 

返回master端

查看列表,说明node2等待签名

 [root@node3~]#  puppet cert list

  "node1"(SHA256) A6:22:67:2B:6E:A6:8B:DD:BD:26:DC:0B:0A:3C:42:07:8F:66:65:3A:43:79:02:89:EE:92:AD:7A:1C:99:B0:3F

鉴定证书

[root@node3 ~]# puppet cert sign node1

Notice: Signed certificate request for node1

Notice: Removing file Puppet::SSL::CertificateRequestnode1 at '/etc/puppet/ssl/ca/requests/node1.pem'

如果有很多主机都需要进行签名可以使用--all参数进行签名

稍等片刻,在执行过程中我们可以在agent信息中提示以下信息:

Info: Creating a new SSL key for node1.test.com

Info: Caching certificate for ca

Info: csr_attributes file loading from/etc/puppet/csr_attributes.yaml

Info: Creating a new SSL certificate request fornode1.test.com

Info: Certificate Request fingerprint (SHA256):C9:85:85:85:52:1D:13:88:46:E9:F7:DE:29:77:42:A8:6A:21:4D:67:89:6A:25:3C:B7:A2:09:59:07:9C:DF:50

 

没有问题则可以启动服务了

[root@node1puppet]# /etc/init.d/puppet start

 

使agent自动安装服务

[root@node3 puppet]# cd /etc/puppet/manifests

[root@node3 manifests]# ls

[root@node3 manifests]# vim site.pp

写入以下信息

node 'node1.test.com' {

    includenginx::nginx_web

}

 

node 'node2.test.com' {

    includenginx::nginx_proxy

}

这样 我们使node1使用nginx_web的模块 使其只提供web服务,而node2使用nginx_proxy模块,使其只提供proxy的服务

 

修改完成后需要重新加载配置文件

[root@node3 manifests]# /etc/init.d/puppetmaster reload
Stoppingpuppetmaster:                                    [  OK  ]
Startingpuppetmaster:                                    [  OK  ]

 

首先查看是否安装nginx

[root@node2 puppet]# rpm -q nginx

package nginx is not installed

稍等片刻在agent上观察

[root@node2 puppet]# rpm -q nginx
nginx-1.6.1-1.el6.ngx.x86_64

 

以上,为master/agent的使用,感谢各位



本文转自zuzhou 51CTO博客,原文链接:http://blog.51cto.com/yijiu/1545972

相关文章
|
6月前
|
物联网 测试技术 API
LLM 大模型学习必知必会系列(九):Agent微调最佳实践,用消费级显卡训练属于自己的Agent!
LLM 大模型学习必知必会系列(九):Agent微调最佳实践,用消费级显卡训练属于自己的Agent!
LLM 大模型学习必知必会系列(九):Agent微调最佳实践,用消费级显卡训练属于自己的Agent!
|
30天前
|
人工智能 JSON 自然语言处理
开源模型+Orchestrating Agents多智能体框架,易用、强大且可控
本文采用开源Qwen2.5-14B-instruct-GGUF来体验多智能体编排和交接,希望在体验多智能体编排和交接框架的同时,一起评估中小参数规模的模型(14B)能否较好的完成多智能体任务。
|
2月前
|
人工智能 搜索推荐
开闭源模型大乱斗:看看哪个智能体最能窥见人类真实意图
【9月更文挑战第3天】在人工智能领域,理解并执行用户意图是一大挑战。现有模型常因用户模糊指令而难以捕捉真实需求。为此,研究人员提出了“Intention-in-Interaction”(IN3)基准,通过显式查询检验隐式意图,引入Mistral-Interact模型评估任务模糊性、询问并细化用户意图,最终执行任务。该方法显著提升了智能体的理解和执行能力,但依然面临评估主观性、用户信息提供不足及复杂任务处理等挑战。论文详情见:https://arxiv.org/abs/2402.09205
42 2
|
4月前
|
人工智能 API 决策智能
智胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐
【7月更文挑战第8天】智胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐
1535 9
智胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐
|
3月前
|
机器学习/深度学习 人工智能 PyTorch
AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比
AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比
76 1
|
3月前
|
人工智能 安全 搜索推荐
AI智能体研发之路-模型篇(三):中文大模型开、闭源之争
AI智能体研发之路-模型篇(三):中文大模型开、闭源之争
77 1
|
4月前
|
存储 人工智能 前端开发
基于LLM大模型Agent的适用范围和困境
基于LLM大模型Agent的适用范围和困境
141 8
|
3月前
|
机器学习/深度学习 人工智能 缓存
AI智能体研发之路-模型篇(二):DeepSeek-V2-Chat 训练与推理实战
AI智能体研发之路-模型篇(二):DeepSeek-V2-Chat 训练与推理实战
512 0
|
3月前
|
人工智能 物联网 异构计算
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
202 0
|
5月前
|
人工智能 搜索推荐 机器人
AppFlow无代码轻松搭建模型Agent
使用钉钉,现在每个人都能轻松创建自己的AI助手。通过结合各种插件,如天气、机票查询和地图,你可以定制个性化的工作助手。利用AppFlow,即使没有编程经验也能搭建AI Agent。步骤包括:1) 在钉钉开放平台创建应用,获取凭证;2) 在钉钉卡片平台创建AI卡片实例;3) 在AppFlow配置连接流,添加所需插件;4) 创建钉钉机器人,设置HTTP消息接收并关联AppFlow的Webhook。完成这些步骤后,你就可以在钉钉群中与你的AI助手互动了。

推荐镜像

更多
下一篇
无影云桌面