📜  Puppet-配置(1)

📅  最后修改于: 2023-12-03 15:03:53.284000             🧑  作者: Mango

Puppet 配置

Puppet 是一个用于自动化 IT 系统配置和管理的工具,通过将 IT 基础设施定义为代码,可以轻松地管理大规模的复杂系统。

Puppet 基础

Puppet 使用基于声明式语言的配置管理系统,类似于 Shell 脚本。但是,它的目标是实现自描述、可测试、可重复使用和可扩展的 IT 自动化。

Puppet 术语

在 Puppet 中,有一些重要的概念需要了解:

  • Manifests: Puppet 配置代码的文件,通常以 .pp 结尾。
  • Modules: 用于组织 Puppet 代码和资源的目录结构,包含 manifests、files、templates、facts 等文件。
  • Resources: 被 Puppet 管理的主要对象,如文件、服务、包、用户、组等。
  • Facts: Puppet 收集的有关系统和环境的信息,如网络接口、操作系统版本等等。
  • Classes: 是一组资源的集合,通常用于封装公共、可重用的逻辑。
  • Nodes: Puppet 配置管理的目标主机,使用 Facter(Puppet 集成工具)来收集数据。
Puppet 工作原理

Puppet 通过两个主要的进程工作:puppet masterpuppet agent

puppet master 进程运行在一个中央管理节点上,它包含了 Puppet 配置的核心逻辑,并且负责处理来自 puppet agent 的请求。puppet agent 进程运行在每个目标节点上,执行配置的代码以达到所需的状态。

puppet agent 启动时,它将像 puppet master 发送自己的 Facter 信息(有时也称为 facts 或 ohai 插件),以便 puppet master 确定如何处理 puppet agent 的请求。puppet master 会生成一个 Catalog,它包含了目标主机应该达到的资源状态(如文件、服务、包等),并将这个 Catalog 传递给 puppet agent

puppet agent 会根据 Catalog,执行必要的更新。过程中,puppet agent 将上传其执行日志和任何警告或错误消息到 puppet master

安装与配置

在 Ubuntu 上安装 Puppet:

$ sudo apt-get update
$ sudo apt-get install puppet

在 CentOS 上安装 Puppet:

$ sudo yum update
$ sudo yum install puppet

在安装 Puppet 后,我们需要设置 puppet masterpuppet agent

puppet master 上,我们需要配置节点信息,包括证书、缓存目录、默认文件位置等:

$ sudo vim /etc/puppetlabs/puppet/puppet.conf

puppet agent 上,我们需要配置节点和服务器地址:

$ sudo vim /etc/puppetlabs/puppet/puppet.conf
Puppet 模块

一个 Puppet 模块是一个由 manifests、files、templates、facts 等文件组成的目录结构,可用于组织和重用 Puppet 代码和资源。Puppet 模块的核心是 manifests 目录,里面包含了 Puppet 的配置代码。

创建模块

要创建一个名为 my_module 的新模块,请创建以下目录结构:

my_module/
├── files/
├── manifests/
│   └── init.pp
├── templates/
└── facts.d/

其中,files 目录包含了传递给模块的文件,templates 目录包含了模板文件,facts.d 目录包含了自定义 facts。

manifests/init.pp 是模块的入口点,它应该包含 Puppet 配置代码。

编写 Manifest

一个 Manifests 是一组定义资源的清单。资源是您要 Puppet 管理的一些特定组件。例如,您可能会定义一个 file 资源来管理某个文件的内容,或者定义一个 service 资源来管理某个服务的状态。示例:

file{'/etc/my_file':
  ensure => present,
  source => 'puppet:///modules/my_module/my_file',
  owner  => 'root',
  mode   => '0644',
}

此示例创建了一个名为 my_file 的文件,并对其设置了 owner 和 mode 属性。它还将 my_file 的内容从 puppet:///modules/my_module/my_file 源复制到 /etc/my_file

模块的用途

Puppet 模块可以用于多种任务,例如:

  • 管理软件包
  • 管理服务
  • 创建配置文件
  • 管理用户和组
  • 添加 cron 作业
引用模块

要在 Puppet Manifest 中引用模块,请使用模块的名称作为前缀,并用两个冒号分隔其余路径。例如,要引用名为 nginx 的模块中的资源,请编写:

nginx::package { 'nginx':
  ensure => present,
}
Puppet 约定

Puppet 更愿意对资源进行操作而不是修改构成大型资源的小部分。因此,Puppet 推崇指南:

  1. 尽量使用模块来模块化代码
  2. 尽可能使用 Puppet 官方模块或社区模块,而不是自己编写 new types
  3. 保持它们的清晰、简约性,最好少于 ~100 行(不包括测试)
  4. 避免使用 masterless Puppet,避免 Puppet 资源的盲目使用
  5. 确保 Manifest 和模块的每个块都有一个注释文档
  6. 避免把密钥和密码硬编码到配置中
  7. 禁止使用 exec 来做任何“有趣的事情”
结论

Puppet 是一个强大的配置管理工具,可简化 IT 系统的自动化和管理。Puppet 通过旨在保证代码可测试、清晰、组织良好和可重用的最佳实践,帮助设计出高效的 Puppet 模块。在使用 Puppet 时,按照 Puppet 约定,将有助于设计可读性强、安全性高、扩展性好的 Puppet 代码。