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