Puppet第一节

介绍

在这里插入图片描述
Puppet提供了自动管理基础架构的能力,它是一个可帮助用户管理和自动化服务器配置的工具,能够帮助系统管理员管理基础设施的整个生命周期: 服务(provisioning)、配置(configuration)、任务编排(orchestration)及报告机制(reporting)。基于puppet ,可实现自动化重复任务、快速部署关键性应用以及在本地或云端完成主动管理变更和快速扩展架构规模等重现工作任务。
  Puppet遵循GPL 协议(2.7.0-), 基于ruby语言开发,2.7.0 以后使用(Apache 2.0 license)。有多个发行版,其中,最新的开源版为Open Source Puppet — 6.17 (latest)。其能管理多达40 多种资源,例如:file、user、group、host、package、service、cron、exec、yum repo等。Puppet的应用最显著的益处是一致性和自动化。Puppet Enterprise(PE)是Puppet的商业版本,建立在Puppet平台之上。两种产品都允许您管理数千个节点的配置。开源Puppet通过所需的状态管理来做到这一点。PE为基础结构自动化提供了命令式和声明式方法,PE还提供了图形用户界面,可界面点击进行代码部署策略,连续测试和集成以及在部署之前预测代码更改的影响等操作。

官方文档地址:https://puppet.com/docs/puppet/6.17/puppet_overview.html

企业版下载地址:https://github.com/puppetlabs/puppet/tree/4.3.2

使用Puppet时,可以在基础结构中定义要管理的系统的所需状态。可通过使用Puppet的域专用语言(DSL)编写基础结构代码(即Puppet代码)来实现此目的,该代码可以与多种设备和操作系统一起使用。Puppet代码是声明性的,这意味着您描述的是系统的期望状态,而不是到达那里所需的步骤。然后,Puppet将使这些系统进入该状态并将其保持在该状态的过程自动化。Puppet通过Puppet主服务器Puppet代理执行此操作。Puppet主服务器是存储定义所需状态的代码的服务器。Puppet代理将您的代码转换为命令,然后在您指定的系统上执行它,这称为Puppet运行。

Puppet架构

1、下图显示了Puppet运行的主代理架构如何工作:
在这里插入图片描述
在这里插入图片描述
Puppet由几个组件组成,组合在这些一起称为Puppet平台,这是您用来管理,存储和运行Puppet代码的平台。这些组件包括Puppet服务器,Puppet代理,Facter,Hiera和PuppetDB。

Puppet在代理-主控体系结构中进行配置,其中主控节点(系统)控制一个或多个受管代理程序节点的配置信息。主机和代理使用SSL证书通过HTTPS进行通信。Puppet包含用于管理证书的内置证书颁发机构。Puppet Server扮演主节点的角色,并且还运行代理程序对其进行配置。
其中:
1)主服务器和代理是Puppet平台的一部分;
2)Facter: 是Puppet仓库( inventory)管理工具;收集有关代理节点的事实,例如其主机名,IP地址和操作系统。代理以清单的(特殊Puppet代码文件)的形式将这些实际收集到的数据发送给主服务器。这是主数据库用来编译目录的信息-描述特定代理节点所需状态的JSON文档。每个代理都请求并接收自己的单独目录,然后在其运行的节点上强制执行所需的状态。这样,Puppet会在整个基础架构中应用更改,确保每个节点都与您使用Puppet代码定义的状态相匹配。同时代理将报告发送回主服务器。
3)Hiera:几乎将所有Puppet代码(例如清单)都保留在模块中。每个模块管理基础架构中的特定任务,例如安装和配置软件。模块中包含代码和数据,其中数据用户可以自定义进行配置。利用Hiera该工具,我们可以将集中存放的数据与代码分开。这将允许我们可指定一个安全界限并定义已知的参数和变体,以便您的代码可以在该范围内完全测试,并且可以验证参数的所有极端情况。
4)Puppet生成的所有数据(例如facts, catalogs, reports)都存储在Puppet数据库(PuppetDB)中。在PuppetDB中存储数据可以使Puppet更快地工作,并为其他应用程序提供API来访问Puppet收集的数据。一旦PuppetDB充满了这些数据,它便成为基础结构发现,合规性报告,漏洞评估等的绝佳工具。您可以使用PuppetDB查询执行所有这些任务。

puppet三层模型:
在这里插入图片描述
Puppet master/agent工作原理:
在这里插入图片描述

核心概念

1)基础架构即代码IssC:
Puppet建立在“将基础结构作为代码”的概念上,这是将基础结构视为代码的做法。这个概念是DevOps的基础-将软件开发和运营结合起来的实践。将基础架构视为代码意味着系统管理员采用了传统上与软件开发人员相关的做法,例如版本控制,对等审阅,自动测试和持续交付。这些测试代码的做法正在有效地测试您的基础结构。当您在自动化过程中走得更远时,您可以选择编写自己的单元和验收测试-这些可以验证您的代码,基础架构的更改是否按预期进行。
2)Idempotency幂等
Puppet的一个关键功能是幂等-能够重复应用代码以确保系统上期望的状态,并确保每次都能获得相同的结果。幂等性是允许Puppet连续运行的原因。它确保基础结构的状态始终与所需状态匹配。如果系统状态与您所描述的不同,Puppet会将其恢复到原先的状态。这也意味着,如果将状态更改为所需状态,则整个基础架构将自动更新以匹配。
3)敏捷:
当采用Puppet之类的工具时,考虑到敏捷方法论,您将获得更大的成功-以增量工作单元工作并重用代码。一次做太多事情是一个常见的陷阱。您对Puppet越熟悉,就可以扩展得越多,对敏捷方法学的适应就越多,就可以使工作民主化。当您与同事共享通用的方法论,通用的管道和通用的语言(Puppet语言)时,您的组织将更有效地快速,安全地部署变更。
4)Git和版本控制
Git是一个版本控制系统,可跟踪代码更改。虽然使用Puppet不需要版本控制,但强烈建议您将Puppet代码存储在Git存储库中。Git是版本控制的行业标准,使用它可以帮助您的团队从DevOps和敏捷方法中受益。当您在Git存储库中开发和存储Puppet代码时,您可能会有多个分支-用于开发和测试代码的功能分支以及用于发布代码的master分支。在将其合并到母版之前,需要在功能分支上测试所有代码。这个过程称为Git流,它使您能够测试,跟踪和共享代码,从而更轻松地与同事进行协作。例如,如果您团队中的某人想要更改应用程序的防火墙要求,则他们可以创建一个拉取请求,以显示他们对现有代码的拟议更改,团队中的每个人都可以在将其投入生产之前进行审核。此过程为可能导致中断的错误留出了更少的空间。
5)资源:是puppet的核心,通过资源申报,定义在资源清单中,资源可以是文件、服务、软件包、自定义脚本等,相当于ansible中的模块,只是抽象的更加彻底。每个资源的定义都具有标题、类型,以及一系列的属性。每个资源在Puppet中名称必须唯一。
6)类:一组资源清单,将多个资源组织起来进行重新定义,通常类以应用名或作用名命名,比如应用软件Nginx、Apache等。
7)模块:包含多个类,多个类的合集,当类比较多的时候,就需要把类规范起来,定义成模块的方式进行管理。相当于ansible中的角色。
8)站点清单:以主机为核心,应用哪些模块。
9)节点: Puppet每一个客户端,即主机(Host),通常以主机名命名。

部署

**单机使用模型:**即将多个manifests --> complier --> catalog --> apply放在一台主机上:
在这里插入图片描述
puppet的安装可以使用源码安装,也可以使用rpm、epel源、官方提供的yum仓库来安装
yum install -y puppet
安装完成后:
主配置文件为/etc/puppet/puppet.conf
主程序为/usr/bin/puppet

master/agent部署:
yum install -y ruby ruby-libs ruby-shadow //server节点部署
yum install -y puppet puppet-server facter
service puppetmaster start
说明:
Puppet.conf puppet的服务端配置文件
Auth.conf client访问puppet server的acl配置文件
Fileserver.conf puppet server作为文件服务器的ACL配置文件
Manidests puppet的脚本目录文件目录
Site.pp 文件告诉puppet去哪里寻找并载入指定的客户端配置,如果缺少此文件,puppet会启动失败的
对客户端发起请求后,Server端需要相应这个请求:
查看:puppet cert –list

当环境中有多个client的话,都需要一个个去认证确实是一件很麻烦的事情,所以,修改puppet.conf文件,实现自动化认证:
在全局”[mian]”下添加一行:
autosign = true
重启master
service puppetmaster restart

在agent端只需要安装:
yum install puppet facter
Client 请求:puppet agent --server=puppet.xxxx.com(puppet master域名) --verbose --no-daemonize
参数说明:
–server 指定了需要连接puppet master 的域名或者主机名,尽量使用域名吧,否则不同网络之间无法通过主机名相通
–no-daemonize 使得puppet 客户端运行在前端并输出日志到标准输出
–verbose 使客户端输出更详细的日志

猜你喜欢

转载自blog.csdn.net/ximenjianxue/article/details/108198926
今日推荐