详解puppet

puppet是一个IT基础设施自动化管理工具,它能够帮助系统管理员管理基础设施的整个生命周期: 供应、配置、联动及报告,基于puppet ,可实现自动化重复任务、快速部署关键性应用以及在本地或云端完成主动管理变更和快速扩展架构规模等,下面为大家详细讲解一下puppet。

Puppet 的介绍

什么是Puppet ?

puppet 是一种Linux、Unix 平台的集中配置管理系统,使用自有的puppet 描述语言,可管理配置文件、用户、cron 任务、软件包、系统服务等。puppet 把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。 puppet 采用C/S 星状的结构,所有的客户端和一个或几个服务器交互。

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

为什么要使用puppet?

当你去管理10 台服务器,你肯定会说小意思。没有任何压力。

当你去管理100 台服务器,你肯定也会说小意思。

当你去管理 1000+台服务器呢?你是不是就头痛了,不同的机器,不同的系统,使用不同的软件版本,配置也不一样。这样为了提升效率。Puppet 就派上了大用场。

Puppet 架构

puppet工作原理:

Puppet 后台运行的时候默认是半小时执行一次,不是很方便修改。可以考虑不让它 在后台跑而是使用crontab 来调用。这样可以精确控制每台客户端的执行时间。分散 执行时间也可以减轻压力

Puppet 的工作细节分成如下几个步骤:

1、客户端puppetd 调用facter ,facter 会探测出这台主机的一些变量如主机名、内存大小、IP 地址等。然后puppetd 把这些信息发送到服务器端。

2、服务器端的puppetmaster 检测到客户端的主机名,然后会到manifest 里面对应的node 配置,然后对这段内容进行解析,facter 送过来的信息可以作为变量进行处理的,node 牵涉到的代码才解析,其它的代码不不解析,解析分几个过程:语法检查、然后会生成一个中间的伪代码,然后再把伪代码发给客户机。

3 、客户端接收到伪代码之后就会执行,客户端再把执行结果发送给服务器。

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

Puppet组织结构:

为什么要说puppet 的组织结构?当你安装完puppet 后,你会发现你不知道它的目录结构是什么样的。要如何组织,怎么样才算合理?puppet 目录在/etc/puppet 下面。

树结构如下:

 |-- puppet.conf   #主配置配置文件

          |-- fileserver.conf #文件服务器配置文件

          |-- auth.conf     #认证配置文件

          |-- autosign.conf # 自动验证配置文件

          |-- tagmail.conf  #邮件配置文件(将错误信息发送)

          |-- manifests     #文件存储目录(puppet 会先读取该目录的.PP 文件)

          |   --nodes

          |   |    | puppetclient.pp

          |   |-- site.pp   #定义puppet 相关的变量和默认配置。

          |   |-- modules.pp  #加载class 类模块文件(include syslog)

          |-- modules        #定义模块

          |   -- syslog     #以syslog 为例

          |        |-- file

          |        |-- manifests

          |        |   |-- init.pp #class 类配置

          |        |--- templates    #模块配置目录

          |        |   |-- syslog.erb #erb 模板

基本介绍到这,在这里也分享下PUPPET的中文WIKI:http://puppet.wikidot.com/

E文不错的也可以直接到官网看:http://www.puppetlabs.com/

环境搭建

然后开始安装,这里选择的是源码安装,puppet是运行在ruby环境的,所以需要安装ruby

上传ruby-1.8.6,facter-1.6.0,puppet-2.7.1到/tmp目录(这3个安装包见附件)
tar zxvf ruby-1.8.6-p114.tar.gz
cd ruby-1.8.6-p114
./configure
make
make install
cd /tmp
tar zxvf facter-1.6.0.tar.gz
cd facter-1.6.0
ruby install.rb
cd /tmp
tar zxvf puppet-2.7.1.tar.gz
cd puppet-2.7.1
ruby install.rb
mkdir -p /etc/puppet &&cp  conf/redhat/*  /etc/puppet/ && cd ~

添加host文件解析

安装完成后需要把主机名和IP写入hosts,因为puppet是根据主机名来识别的,所以主机名对puppet来说比较重要:

echo "192.168.1.100  puppetmaster" >> /etc/hosts
echo "192.168.1.200  app_1 " >> /etc/hosts

开了防火墙的需要在防火墙里面添加8140端口

-A RH-Firewall-1-INPUT -s 192.168.0.0/255.255.0.0 -p tcp -m tcp --dport 8140 -j ACCEPT

完成后服务端运行

[root@cyy100 templates]# puppetmasterd

客户端运行:

[root@cyy111 ~]# puppetd --server cyy100 --test

PS:这里说一下的就是客户端第一次向服务端请求证书的时候要保证两边的时间是同步的,要不会报错

err: Could not retrieve catalog from remote server: certificate verify failed

出现这个错误首先同步时间:

/usr/sbin/ntpdate time.nist.gov

然后删除两边的SSL证书

rm -f /var/lib/puppet/ssl/ca/signed/caotest-2.cym.pem  ###服务端
rm -rf /var/lib/puppet/ssl/    ###客户端

再重新验证

[root@cyy111 ~]# puppetd --server cyy100 --test

没什么问题应该成功了,puppet默认是半小时执行一次,个人推荐用定时任务来执行

实验验证

可以先随便写个类来验证下是否成功

[root@cyy100 templates]# cd /etc/puppet
[root@cyy100 puppet]# cd modules/
[root@cyy100 modules]# mkdir test/
[root@cyy100 modules]# mkdir test/manifests/
[root@cyy100 modules]# mkdir test/files/
[root@cyy100 modules]#vi test/files/init.pp

在init.pp里面写入以下内容

class po {
file { "/tmp/test.txt":
ensure => present,
group => "root",
owner => "root",
mode => "0644",
source => "puppet:///test/test.txt"
}
}

然后在/etc/puppet/modules/est/files下面创建一个test.txt文件,往里面写入:

hello world !

在/etc/puppet/manifests/modules.pp 写入:

import "test"

在/etc/puppet/manifests/node里面写入:

node 'cyy111'{
include po
}

然后在客户端执行

puppetd --server cyy100 --test

就可以看到test.txt文件下发到客户端的/tmp目录下了。

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/9063.html

(0)
晴川运维晴川运维
上一篇 2025年6月14日
下一篇 2025年6月14日

相关推荐

  • Linux终端中实现大小写字符转换

    Linux终端中提供了一些可以大小写之间转换文本的命令,通过这些命令可以提高我们的工作效率,本篇文章重点为大家讲解一下Linux终端中进行大小写字符转换具体方法。 环境 Cento…

    Linux系统 2025年6月11日
  • Linux中配置HAProxy实现Web负载均衡

    HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 一、测试环境 HAPr…

    Linux系统 2025年6月19日
  • Linux Mint 安装 Linux Kernel 4.12

    Linus Torvalds 发布了 Linux 内核 4.12。你可以从这里直接下载相关的 deb 包来安装。或者,继续阅读本文,按下面的步骤安装新内核。 警告:Linux 内核…

    Linux系统 2025年6月17日
  • 通过mergefs增加虚拟存储

    如果您有多个磁盘或分区要用于一个媒体项目,而又不想丢失任何现有数据,但又想将所有文件都放置或安装在一个驱动器下,该怎么办?这时mergefs可以助您一臂之力!mergefs是一个联…

    Linux系统 2025年6月8日
  • 详解python字典和结构化数据

    5.1 字典数据类型 字典的索引可以使用许多不同类型的数据,不只是整数。字典的索引被称为“键”,键及其关联的值称为“键—值”对,在代码中,字典输入时带花括号{}。 字典中的表项是不…

    Linux系统 2025年6月8日
  • 使用ACL工具备份和恢复Linux的文件权限

    作为一个系统管理 ,我们的首要任务将是保护和未经授权的访问安全的数据。 我们都知道我们设置使用一些像CHMOD,CHOWN,chgrp命令 ……等有用的Linux命令然而,这些缺省…

    Linux系统 2025年6月13日
  • SSH连接调试小技巧

    本篇文章重点为大家讲解一下SSH连接调试小技巧,有需要的小伙伴可以参考一下。 问题一:SSH服务没有运行 SSH连接错误的常见原因是服务未在远程服务器上运行。这可能是由于服务意外关…

    Linux系统 2025年6月9日
  • Linux中mysql定时备份脚本

    在生产环境上,为了避免数据的丢失,通常情况下都会定时的对数据库进行备份,本篇文章重点为大家讲解一下Linux中mysql定时备份脚本。 1. 创建备份脚本 备份脚本: #!/bin…

    Linux系统 2025年6月4日
  • Linux 系统中修复 SambaCry 漏洞(CVE-2017-7494)

    Samba 很久以来一直是为 *nix 系统上的 Windows 客户端提供共享文件和打印服务的标准。家庭用户,中型企业和大型公司都在使用它,它作为最佳解决方案在多种操作系统共存的…

    Linux系统 2025年7月2日
  • Linux下crontab使用方法

    Linux crontab是用来定期执行程序的命令,当安装完成操作系统之后,默认便会启动此任务调度命令,crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自…

    Linux系统 2025年6月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注