木偶 - 概述


Puppet 是 Puppet Labs 开发的配置管理工具,用于自动化基础设施管理和配置。Puppet 是一个非常强大的工具,有助于实现基础设施即代码的概念。该工具是用 Ruby DSL 语言编写的,有助于将完整的基础设施转换为代码格式,可以轻松管理和配置。

Puppet 遵循客户端-服务器模型,其中任何集群中的一台机器充当服务器,称为 puppet master,另一台充当客户端,称为节点上的从机。Puppet 能够从头开始管理任何系统,从初始配置开始直到任何特定机器的使用寿命结束。

傀儡系统的特点

以下是 Puppet 最重要的功能。

幂等性

Puppet 支持幂等性,这使其独一无二。与 Chef 类似,在 Puppet 中,人们可以在同一台机器上安全地多次运行同一组配置。在此流程中,Puppet 会检查目标计算机的当前状态,并且仅在配置发生任何特定更改时才会进行更改。

幂等性有助于管理任何特定机器的整个生命周期,从机器的创建、机器的配置更改,直到生命周期结束。Puppet 幂等性功能对于保持机器多年更新非常有帮助,而不是在发生任何配置更改时多次重建同一台机器。

跨平台

在Puppet中,借助使用Puppet资源的资源抽象层(RAL),我们可以针对系统的指定配置,而无需担心底层配置中定义的实现细节以及配置命令如何在系统内部工作文件。

木偶 - 工作流程

Puppet 使用以下工作流程在系统上应用配置。

工作流程
  • 在 Puppet 中,Puppet master 所做的第一件事就是收集目标机器的详细信息。使用所有 Puppet 节点上存在的因素(类似于 Chef 中的 Ohai),它可以获取所有机器级别的配置详细信息。这些详细信息被收集并发回给傀儡师。

  • 然后,Puppet Master 将检索到的配置与定义的配置详细信息进行比较,并根据定义的配置创建目录并将其发送到目标 Puppet 代理。

  • 然后,Puppet 代理应用这些配置以使系统进入所需状态。

  • 最后,一旦目标节点处于所需状态,它就会向 Puppet Master 发回一份报告,这有助于 Puppet Master 了解系统当前的状态(如目录中所定义)。

Puppet - 关键组件

以下是 Puppet 的关键组件。

关键部件

傀儡资源

Puppet 资源是对任何特定机器进行建模的关键组件。这些资源都有自己的实现模型。Puppet 使用相同的模型来获取处于所需状态的任何特定资源。

供应商

提供者基本上是 Puppet 中使用的任何特定资源的实现者。例如,包类型“apt-get”和“yum”都对包管理有效。有时,特定平台上会提供多个提供商。尽管每个平台总是有一个默认的提供商。

显现

清单是资源的集合,它们耦合在函数或类内部以配置任何目标系统。它们包含一组用于配置系统的 Ruby 代码。

模块

模块是Puppet的关键构建块,它可以被定义为资源、文件、模板等的集合。它们可以很容易地分布在所定义的不同类型的操作系统中,因为它们具有相同的风格。由于它们可以轻松分发,一个模块可以在相同的配置下多次使用。

模板

模板使用 Ruby 表达式来定义自定义内容和变量输入。它们用于开发自定义内容。模板在清单中定义并复制到系统上的某个位置。例如,如果想使用可定制的端口定义 httpd,则可以使用以下表达式来完成。

Listen <% = @httpd_port %>

本例中的 httpd_port 变量是在引用此模板的清单中定义的。

静态文件

静态文件可以定义为有时需要执行特定任务的通用文件。使用 Puppet 可以简单地将它们从一个位置复制到另一个位置。所有静态文件都位于任何模块的文件目录内。对清单中文件的任何操作都是使用文件资源完成的。