DevOps - Puppet

Puppet 帮助我们将基础设施管理为代码。这意味着我们可以自动化配置管理和部署等工作。

在本章中,我们将了解 Puppet 的架构。我们将介绍安装它的步骤。我们还将学习如何编写良好的清单。我们将讨论管理模块、分类节点以及如何将 Puppet 与 CI/CD 管道连接起来。

了解 Puppet 架构

我们可以将 Puppet 架构视为一种管理配置和跨多个系统自动执行任务的方法。它有一些关键部分 −

  • Puppet Master − 这是主服务器。它控制配置数据并将其发送到我们管理的节点。它汇总清单并为每个节点制作目录。
  • Puppet 代理 − 我们在管理的节点上安装这些代理。它们向 Puppet Master 请求更新、应用配置,然后报告其状态。
  • PuppetDB − 这是一个可选数据库。它保存 Puppet 创建的数据,如事实和报告。它帮助我们更快地找到数据并提高性能。
  • 事实 − 这些是有关系统的信息。Puppet 代理从其节点收集这些信息。事实包括操作系统版本、IP 地址和已安装的软件包等。我们使用事实来做出有关配置的决策。
  • 清单 − 我们用 Puppet 的特殊语言 DSL 编写这些清单。清单显示了我们希望如何设置节点。我们将它们保存在模块中。
  • 模块 − 这些是清单、文件和模板的组。它们包含特定的配置或应用程序。

Puppet 架构流程

Puppet 代理使用 HTTPS 与 Puppet Master 通信。Puppet Master 根据代理提供的清单和事实创建目录。代理使用目录来确保节点的设置符合我们的要求。

此架构可帮助我们以灵活且可扩展的方式管理基础架构。它使 Puppet 成为 DevOps 实践中的强大工具。

安装 Puppet

要安装 Puppet,我们需要按照我们的操作系统的步骤进行操作。Puppet 可在 Linux、macOS 和 Windows 等许多平台上运行。以下是在 Linux 系统上安装它的简单步骤 −

先决条件 − 我们需要 root 或 sudo 访问权限。让我们更新我们的包管理器。

安装步骤

对于 Debian/Ubuntu

sudo apt-get update
sudo apt-get install -y puppet

对于 Red Hat/CentOS

sudo yum install -y epel-release
sudo yum install -y puppet

对于 Windows

我们需要从 Puppet 下载页面 下载 Puppet 安装程序。然后,我们运行安装程序并按照显示的步骤操作。

验证安装

安装后,我们应该检查 Puppet 是否安装正确。我们可以通过检查版本 − 来做到这一点

puppet --version

Puppet 配置

Puppet 的主要配置文件位于 /etc/puppet/puppet.conf。我们可以编辑此文件来更改环境和日志记录等设置。

通过遵循这些步骤,我们可以安装 Puppet 并为我们的配置和管理任务做好准备。

编写 Puppet 清单

我们使用 Puppet 清单作为 Puppet 配置管理的主要部分。这些清单是用 Puppet 的特殊语言编写的。它们向我们展示了我们希望基础设施和资源是什么样子。

清单的基本结构

清单通常具有 −

  • 类 − 这些保存配置。
  • 资源 − 这些显示我们想要的系统部分(如包、服务和文件)的状态。

简单清单的示例

class apache {
   package { 'httpd':
      ensure => installed,
   }

   service { 'httpd':
      ensure => running,
      enable => true,
   }

   file { '/var/www/html/index.html':
      ensure  => file,
      content => 'Welcome to Apache!',
   }
}

定义资源

  • 资源类型 − 一些常见类型是包、服务、文件和用户。
  • 属性 − 这些属性告诉我们有关属性的信息,例如确保、内容、所有者和模式。

包括类

要将类用于节点,我们可以编写 include 语句 −

include apache

Puppet 清单帮助我们进行模块化和可重用的配置。这使我们更轻松地管理基础设施。

管理 Puppet 模块

我们可以将 Puppet 模块视为帮助我们管理系统各部分的文件组。它们包括清单、模板、文件和其他内容。使用 Puppet 模块有助于我们重用代码并保持其井然有序。以下是我们如何管理 Puppet 模块 −

模块结构

Puppet 模块通常如下所示 −

my_module/
├── manifests/
│   └── init.pp
├── templates/
├── files/
└── metadata.json

创建模块

我们可以使用 Puppet 模块工具创建一个新模块,如下所示 −

puppet module generate my_module

管理依赖项

我们需要在 metadata.json 文件中列出我们的依赖项。以下是示例 −

{
   "name": "my_module",
   "version": "0.1.0",
   "dependencies": [
      {
         "name": "puppetlabs-apt",
         "version_requirement": ">= 7.0.0"
      }
   ]
}

安装模块

要从 Puppet Forge 获取模块,我们可以使用此命令 −

puppet module install <module_name>

更新模块

当我们想要更新模块时,我们只需运行 −

puppet module update <module_name>

模块版本控制

我们应该始终为模块使用像 Git 这样的版本控制。这有助于我们跟踪变化并更好地协同工作。

通过以良好的方式管理 Puppet 模块,我们可以确保我们的基础设施即代码是模块化的、易于维护的,并且可以在需要时进行扩展。

Puppet 环境和分类节点

我们使用 Puppet 环境来管理部署管道每个阶段的不同设置。这包括开发、测试和生产。每个环境都可以有自己的清单和模块。这有助于我们独立测试和开发。

设置 Puppet 环境

目录结构:

我们需要在 下为每个环境创建单独的文件夹 −

/etc/puppetlabs/code/environments/:
 	/etc/puppetlabs/code/environments/
  ├── production/
  └── development/

Puppet 配置:我们应该更改 puppet.conf 以指定我们正在使用的环境 −

    [main]
environment = production

对节点进行分类

节点分类非常重要。它帮助我们将正确的配置应用于正确的节点。Puppet Enterprise 为我们提供了一个用于分类的 GUI。Puppet 还可以在清单中使用节点定义。

示例节点定义

node 'webserver' {
   include apache
}

node 'dbserver' {
   include mysql
}

使用外部节点分类器 (ENC)

对于复杂的设置,我们可以使用 Foreman 或 Hiera 等 ENC。这些工具可以根据节点事实或外部数据动态分配类。这使我们的工作更加灵活,更易于管理。

将 Puppet 与 CI/CD 管道集成

通过将 Puppet 与 CI/CD 管道集成,我们可以更好地交付软件。Puppet 帮助我们实现自动化并保持一致性。我们可以在 CI/CD 流程的不同阶段使用 Puppet 来轻松管理和设置环境。

让我们看看这种集成的关键步骤 −

  • 版本控制 − 我们应该将 Puppet 清单和模块存储在 Git 等版本控制系统中。这有助于我们跟踪变化并更好地协同工作。
  • CI/CD 工具 − 我们可以使用 Jenkins、GitLab CI 或 CircleCI 等工具来启动 Puppet 运行。我们需要设置构建作业以在部署时应用 Puppet 清单。
  • Puppet 代理和服务器 − 代理会自动从 Puppet Master 获取配置。服务器:当我们提交代码时,它会发送更新。
  • 环境管理 − 让我们使用 Puppet 环境将配置分开用于开发、测试和生产。

Jenkins 管道片段示例

pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                script {
                    sh 'puppet apply /path/to/manifests'
                }
            }
        }
    }
}

结论

在本章中,我们了解了 DevOps 的基础知识。我们重点介绍了 Puppet。我们讨论了 Puppet 的架构及其安装方法。我们还分享了如何创建清单和模块。

我们讨论了如何管理环境和对节点进行分类。我们研究了如何将 Puppet 与 CI/CD 管道连接起来。