首页 > 其他分享 >puppet简单使用

puppet简单使用

时间:2022-10-28 17:24:30浏览次数:83  
标签:配置文件 简单 agent puppet conf 使用 puppetlabs 客户端

官方文档:https://puppet.com/docs/puppet/6/puppet_index.html
自动化部署工具:Ansible、Chef、Puppet、Saltstack对比

一. 基本介绍和工作原理

1. Puppet介绍

puppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。

puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置客户端. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息。

设计架构
puppet是基于c/s架构的。服务器端保存着所有对客户端服务器的配置代码,在puppet里面叫做manifest. 客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。

2. puppet工作流程
  • 客户端puppet调用fast探测出主机的一些变量,如主机名、内存大小、IP地址等。Puppet把这些信息使用SSL连接发送给服务器端;

  • 服务器端的puppetmaster通过fast工具分析检测客户端的主机名,然后找到项目的主配置文件manifest里面对应的node配置,并对该部分内容进行解析,fast发送过来的信息可以作为变量处理,node牵扯到的代码才被解析,没牵扯到的不解析,解析分为语法检查,如果语法没错,继续解析,解析结果生成一个结果‘伪代码’,然后把‘伪代码’发给客户端;

  • 客户端收到‘伪代码’并且执行,客户端把执行结果发给服务器;

  • 服务器端把客户端的执行结果写入日志。

    说明:
    老版本中使用puppet kick来实现主动推动,是通过puppetmaster端的命令触发的方式进行更新的,由于其锁的问题很难解决外加上主机单元控制不是很灵活,逐渐被抛弃了,puppetlabs也看到了这一点,因此收购了mcollecitve,mcollective触发方式 需要搭建mcollective+MQ架构,暂未研究

3. 主要配置文件介绍

1)puppet.conf
puppet.conf配置文件是Master的守护进程的主配置文件,文件定义了Master的运行环境、启动加载文件、Puppet的配置管理程序和授权Agent的证书目录等主要信息。守护进程启动前会根据此配置文件信息对系统环境进行预检,预检成功后守护进程才会启动。
puppet.conf配置文件的位置
企业版本:/etc/puppletlabs/puppet(本文档安装使用的企业版本)
社区版本:/etc/puppet

2)auth.conf介绍
master本身是由webserver提供agent访问,如果没有权限控制,agent就可以遍历master服务器上所有资源,这是非常不安全的。auth.conf主要负责agent访问master上一些目录和配置文件的权限和认证,官方名称是HTTP Network API。为了网络访问安全,agent在访问master过程中,使用https协议进行通信交互,基本访问格式如下:
https://{server}:{port}/{environment}/{resource}/{key} ,server端使用的端口为8140
master会根据auth.conf中的配置来限制agent的来源(包括IP、域名或环境列与表等)。限制访问master某一个目录或一些目录的权限,有了auth.conf权限配置文件,就会使master服务器更加安全。

3)fileserver.conf介绍
fileserver.conf是master目录的挂载配置文件,包含master的挂载目录位置和挂载目录的授权信息等。并非必要文件,只有在agent服务器从master获取一个文件或文件列表是才会用到

二. 部署

本文档介绍使用在两台ubuntu20上直接部署的方式,分别做server端和agent端
github上有docker-compose方式的套装,用于测试还行,docker方式的agent部署方式测试失败。

  1. 设置主机名解析
nano /etc/hosts
在两个节点上添加以下行:
puppet-master-ip puppetmaster puppet  #puppetmaster为server主机名,请自行修改
puppet-client-ip puppetclient   #客户端主机名, 正式环境域名绑定IP的情况下,不用写
  1. 安装puppet服务端
wget https://apt.puppetlabs.com/puppet6-release-focal.deb
dpkg -i puppet6-release-focal.deb
apt-get update -y
apt-get install puppetserver -y
systemctl start puppetserver
systemctl enable puppetserver
systemctl status puppetserver
  1. 安装和配置puppet agent
#安装
wget https://apt.puppetlabs.com/puppet6-release-focal.deb
dpkg -i puppet6-release-focal.deb
apt-get update -y
apt-get install puppet-agent -y

#配置
nano /etc/puppetlabs/puppet/puppet.conf
添加以下行
[main]
certname = puppetclient #客户端主机名
server = puppetmaster  #server端主机名

systemctl start puppet
systemctl enable puppet
systemctl status puppet

三. 签署puppet代理证书

Puppet使用的是客户端-服务器架构,所以在配置之前,你需要批准每个代理节点的证书请求。

在Puppet主节点上,运行以下命令以列出所有证书:
/opt/puppetlabs/bin/puppetserver ca list

#对证书进行签名
/opt/puppetlabs/bin/puppetserver ca sign --all

现在,Puppet主节点可以通信和控制代理节点。
在Puppet代理节点上,使用以下命令测试Puppet主代理和代理通信:
/opt/puppetlabs/bin/puppet agent --test

四. puppet使用例子

puppet的实现方式,就是在server端写配置文件,然后客户端拉取相应的配置文件,并按照配置文件内容执行相关操作,

例子1:新建一个文件
在server端/etc/puppetlabs/code/environments/production/manifests新建site.pp配置文件
内容如下
node hong {
  file {'/tmp/example-ip':
    ensure  => present,
    mode    => '0644',
    content => "Here is my Public IP Address: ${ipaddress_ens33}.\n",
  }
}

agent端执行 puppet agent -t,即可在/tmp目录下新建一个example-ip文件,权限为644,内容为
Here is my Public IP Address: 10.5.29.221.
例子2: 从服务端复制文件到客户端指定位置
在server端/etc/puppetlabs/code/environments/production/manifests新建file.pp配置文件
内容如下, 其中puppetmaster要写成自己的server端主机名
node hong {
  file {'/tmp/hello.conf':
    owner  => 'root',
    group  => 'root',
    mode    => '0644',
    source => 'puppet://puppetmaster/files/hello.conf',
  }
}

然后在server端的/etc/puppetlabs/puppet创建files目录,以作为puppet客户端的下载目录,把要复制的文件都放到此目录下

给files目录授权:新建/etc/puppetlabs/puppet/fileserver.conf文件,写入如下内容
[files]
path /etc/puppetlabs/puppet/files/
allow *
#allow 192.168.1.0/24

完成后,重启puppet服务。

说明:
1.puppet客户端默认30分钟从服务端拉取一次配置,如果想自定义时间,需要在/etc/puppetlabs/puppet.conf中添加配置runinterval

[main]
certname = hong
server = zabbix-server
runinterval = 30 默认时间单位是秒

因为是定时执行,即使把上面例子中客户端生成的文件手动删除,过了指定的时间后,还会自动生成。

2.文件同步不要大于1M的数据文件,puppet虽有实现同步静态文件的功能,但并未使用专业的文件同步数据协议,如果多个agent同时同步比较大的数据,就会引起master超时,最终导致同步失败

3.配置文件中的第一行node hong{} 中的hong表示主机名为hong的客户端节点,这个配置只对此客户端生效;如果是node default{} 表示所有节点上执行此配置
更多配置的写法请自行查阅相关文档

标签:配置文件,简单,agent,puppet,conf,使用,puppetlabs,客户端
From: https://www.cnblogs.com/regit/p/16836743.html

相关文章