介绍
配置管理工具为将一致的、可预测的代码和配置从集中式管理服务器部署到各种客户端计算机提供了途径。 Chef 是最流行的配置管理工具之一。 它使用 Ruby 并通过将详细信息打包到它所谓的配方中来处理配置。
Chef 提供了一种快速部署整个环境的方法,而不仅仅是单个应用程序。 在任何需要安装软件然后修改其配置文件的情况下,Chef 都可用于自动化此过程。
在本指南中,我们将概述 Chef 如何组织其文件以及它使用哪些工具和系统来实现其目标。
如果您想继续学习,这里有一个关于 如何在 Ubuntu 14.04 上安装 Chef 12 的教程。
厨师术语
了解构成 Chef 的不同组件非常重要。
厨师运营基础设施
我们将首先讨论构成高级部署策略的不同模型。
Chef 系统由每台机器或资源在部署过程中扮演的角色定义:
Chef Server:这是存储配置配方、说明书以及节点和工作站定义的中心位置。 它是组织中所有其他机器将用于部署配置的中央机器。
Chef Nodes:Chef 节点是 Chef 配置的部署目标。 每个节点代表一个单独的、包含的机器环境,可以在物理硬件上或虚拟化。
这些操作系统环境中的每一个都包含一个可以与 Chef 服务器通信的 Chef 客户端应用程序。
Chef Workstations:Chef 工作站是创建或编辑 Chef 配置详细信息的地方。 然后将配置文件推送到 Chef 服务器,在那里它们可以部署到任何节点。
这些不同组件的配置允许您拥有多个工作站和节点。 节点只要在线并连接到服务器就可以进行配置。
虽然上面的概述给人的印象是它们是独立的实体,但一台机器可以完成两个或所有这些角色。 有一个名为 chef-solo 的项目,它允许您放弃使用服务器并通过配置安装它的计算机来操作。
服务器详情
服务器是所有其他厨师机器(无论是作为客户还是经理)都可以访问的中央控制点。 它基本上是所有配置细节的大型存储库或数据库。
它处理来自节点和工作站的连接和权限,并组织数据,以便客户端可以轻松地提取数据。 服务器还可以包括一个 Web 界面,以便管理或配置一些详细信息。
节点详细信息
如上所述,节点可以是物理机或虚拟机。 它唯一的要求是它可以访问网络并且可以与厨师服务器进行通信。 运行 Chef 软件的用户还需要能够安装软件并进行系统更改。
每个节点使用名为 chef-client 的应用程序与中央服务器通信。 这处理从服务器中提取数据并执行使节点进入其最终状态所需的配置步骤。 chef-client 程序和 chef 服务器通过使用基于 RSA 密钥的身份验证进行通信。
Chef-client 使用名为 ohai 的工具来获取有关节点的统计信息。 这些用于设置某些配置详细信息并填充文件中包含的变量。
工作站详细信息
工作站具有为任何可用节点创建和修改配置详细信息所需的工具,并且可以与厨师服务器通信以使这些可用。
在工作站上管理厨师的一个重要工具称为 knife。 Knife 充当网关,您可以在其中配置将存储在服务器上的任何内容。 它可以管理节点和配置,通常可用于以“特定于厨师”的方式访问服务器。 虽然可以使用 SSH 登录到服务器并对其手动处理的所有数据进行更改,但这并没有真正遵守 Chef 实施的流程。
在工作站上创建和修改的配置和定义提交给版本控制,然后推送到服务器。 该存储库称为 chef-repo。 它包含配置厨师所需的所有数据。
厨师回购文件结构
Chef 在指定目录结构内的工作站上处理其配置和依赖信息。 为了有效地创建配方和推动更改,了解这种层次结构非常重要。
正如我们上面提到的,服务器配置文件应该保存在存储库中的版本控制中,称为“chef-repo”。 这只是一个包含厨师文件的普通目录。
在这个目录中,我们可以找到如下结构:
certificates/:包含可与客户端关联以进行身份验证的 SSL 证书。
chefignore:列出结构中不应包含在推送到服务器中的文件和目录。
config/:包含两个存储库配置文件之一
- rake.rb:定义一些用于创建 SSL 证书的变量声明和一些通用选项。
cookbooks/:包含为您的组织配置基础架构的说明书。
data_bags/:包含用于您的配置的各种数据包。
数据包是包含敏感配置详细信息的受保护子目录。 只有那些具有匹配 SSL 证书并包含带有配置详细信息的 JSON 格式文件的节点才能访问它们。
environments/:包含顶级位置以包含部署环境的详细信息。
必须在此目录中定义与默认环境不同的每个环境。
Rakefile:此文件定义厨师可以在其配置中执行的任务。
roles/:包含定义可以分配给节点的角色的文件。
厨师食谱文件结构
在 chef-repo 的 cookbooks 目录中,子目录定义了应用程序的特定说明书。 在每个单独的应用程序配置目录中都有一个结构,该结构定义了应该如何安装此服务以及必须进行哪些更改才能使其正常工作。
在应用程序中,您将找到定义应用程序必须如何安装和配置的文件和定义。
metadata.rb 或 metadata.json 文件包含有关服务的元数据信息。 这包括基本信息,如食谱的名称和版本,但它也是存储依赖信息的地方。 如果此食谱依赖于要安装的其他食谱,它可以在此文件中列出它们,并且厨师将在当前食谱之前安装和配置它们。
attributes 目录包含属性定义,可用于覆盖或定义将拥有此服务的节点的设置。
definitions 目录包含声明资源的文件。 这意味着您可以将功能组合在一个标题下。
files 目录描述了厨师应如何在部署此说明书的节点上分发文件。
recipes 目录包含定义如何配置服务的“recipes”。 配方通常是配置较大系统特定方面的小文件。 如果食谱用于安装和配置 Web 服务器,则食谱可能会启用模块或设置健全的防火墙默认值。
templates 目录用于提供更复杂的配置管理。 您可以提供包含嵌入式 Ruby 命令的完整配置文件。 打印的变量可以在其他文件中定义。
结论
虽然本指南可能无法帮助您开始编写自己的 Chef 配置,但它应该让您对复杂部署环境中的各个组件有一个很好的概述。 一旦您开始了解节点、服务器、工作站交互的工作原理,并且可以在 chef-repo 中找到自己的方式,您就可以开始了解一些可用的食谱是如何操作的。
在下一篇中,我们将讨论如何在Ubuntu 14.04服务器上设置Chef 12。 稍后,我们还将演示 如何创建一些您自己的说明书 并配置可以部署到网络中其他机器的环境。