- Puppet 教程
- Puppet - 首页
- 基础 Puppet
- Puppet - 概述
- Puppet - 架构
- Puppet - 安装
- Puppet - 配置
- Puppet - 环境配置
- Puppet - Master
- Puppet - Agent 设置
- Puppet - SSL 证书设置
- 安装和配置 r10K
- Puppet - 验证设置
- Puppet - 编码风格
- Puppet - 清单文件
- Puppet - 模块
- Puppet - 文件服务器
- Puppet - Facter 和事实
- 高级 Puppet
- Puppet - 资源
- Puppet - 资源抽象层
- Puppet - 模板
- Puppet - 类
- Puppet - 函数
- Puppet - 自定义函数
- Puppet - 环境
- Puppet - 类型和提供程序
- Puppet - RESTful API
- Puppet - 实时项目
- Puppet 有用资源
- Puppet - 快速指南
- Puppet - 有用资源
- Puppet - 讨论
Puppet - 概述
Puppet 是一款由 Puppet Labs 开发的配置管理工具,用于自动化基础设施管理和配置。Puppet 是一款非常强大的工具,有助于实现基础设施即代码的概念。此工具使用 Ruby DSL 语言编写,有助于将完整的基础设施转换为代码格式,可以轻松地进行管理和配置。
Puppet 遵循客户端-服务器模型,其中任何集群中的一个机器充当服务器,称为 puppet master,其他机器充当客户端,称为节点上的从属服务器。Puppet 能够从头开始管理任何系统,从初始配置到任何特定机器的生命周期结束。
Puppet 系统的功能
以下是 Puppet 最重要的功能。
幂等性
Puppet 支持幂等性,这使其独一无二。与 Chef 类似,在 Puppet 中,可以安全地对同一台机器多次运行相同的配置集。在此流程中,Puppet 检查目标机器的当前状态,并且仅在配置有任何特定更改时才会进行更改。
幂等性有助于在整个生命周期中管理任何特定机器,从机器的创建、机器的配置更改到生命周期结束。Puppet 的幂等性功能非常有助于保持机器多年更新,而不是在配置发生任何更改时多次重建同一台机器。
跨平台
在 Puppet 中,借助使用 Puppet 资源的资源抽象层 (RAL),可以定位系统的指定配置,而无需担心实现细节以及配置命令如何在系统内部工作,这些细节在底层配置文件中定义。
Puppet - 工作流程
Puppet 使用以下工作流程将配置应用于系统。
在 Puppet 中,Puppet master 首先要做的是收集目标机器的详细信息。使用存在于所有 Puppet 节点上的因素(类似于 Chef 中的 Ohai),它获取所有机器级配置详细信息。这些详细信息被收集并发送回 Puppet master。
然后,puppet master 将检索到的配置与定义的配置详细信息进行比较,并根据定义的配置创建目录并将其发送到目标 Puppet 代理。
然后,Puppet 代理应用这些配置以使系统处于所需状态。
最后,一旦将目标节点置于所需状态,它就会向 Puppet master 发送报告,这有助于 Puppet master 了解系统当前状态在哪里,如目录中定义的那样。
Puppet - 关键组件
以下是 Puppet 的关键组件。
Puppet 资源
Puppet 资源是建模任何特定机器的关键组件。这些资源有自己的实现模型。Puppet 使用相同的模型来获取任何特定资源的所需状态。
提供程序
提供程序基本上是 Puppet 中使用的任何特定资源的执行者。例如,包类型“apt-get”和“yum”都适用于包管理。有时,在特定平台上可能有多个提供程序可用。尽管每个平台始终都有一个默认提供程序。
清单
清单是资源的集合,这些资源在函数或类中耦合以配置任何目标系统。它们包含一组 Ruby 代码以配置系统。
模块
模块是 Puppet 的关键构建块,可以定义为资源、文件、模板等的集合。它们可以轻松地分发到正在定义的各种操作系统中,前提是它们是相同的类型。由于它们可以轻松分发,因此可以多次使用同一个模块和相同的配置。
模板
模板使用 Ruby 表达式来定义自定义内容和变量输入。它们用于开发自定义内容。模板在清单中定义,并复制到系统上的某个位置。例如,如果要使用可自定义的端口定义 httpd,则可以使用以下表达式。
Listen <% = @httpd_port %>
在这种情况下,httpd_port 变量在引用此模板的清单中定义。
静态文件
静态文件可以定义为有时需要执行特定任务的一般文件。它们可以使用 Puppet 从一个位置简单地复制到另一个位置。所有静态文件都位于任何模块的 files 目录中。清单中对文件的任何操作都是使用 file 资源完成的。