Chef - 概述



Chef 是一款由 Opscode 开发的开源技术。Opscode 的联合创始人 Adam Jacob 被称为 Chef 的创始人。这项技术使用 Ruby 编码来开发基本的构建块,例如菜谱和 Cookbook。Chef 用于基础设施自动化,并有助于减少基础设施管理的手动和重复性任务。

Chef 为不同的构建块制定了自己的约定,这些构建块是管理和自动化基础设施所必需的。

为什么选择 Chef?

Chef 是一种配置管理技术,用于自动化基础设施配置。它基于 Ruby DSL 语言开发。它用于简化配置和管理公司服务器的任务。它能够与任何云技术集成。

在 DevOps 中,我们使用 Chef 在内部和云端部署和管理服务器和应用程序。

Chef 的特性

以下是 Chef 最突出的特性:

  • Chef 使用流行的 Ruby 语言来创建特定领域的语言。

  • Chef 不会对节点的当前状态做出假设。它使用其机制来获取机器的当前状态。

  • Chef 非常适合部署和管理云服务器、存储和软件。

Chef 的优势

Chef 提供以下优势:

  • 较低的入门门槛 - 由于 Chef 使用原生 Ruby 语言进行配置,这是一种标准的配置语言,因此任何具有一定开发经验的人都可以轻松上手。

  • 与云的出色集成 - 使用 knife 实用程序,可以轻松地将其与任何云技术集成。对于希望在其多云环境中分配基础设施的组织来说,它是最佳工具。

Chef 的劣势

Chef 的一些主要缺点如下:

  • Chef 的一个巨大缺点是 Cookbook 的控制方式。它需要持续维护,以防止工作人员弄乱其他人的 Cookbook。

  • 仅提供 Chef solo。

  • 目前,它只适合 AWS 云。

  • 如果使用者不熟悉 Ruby,则不容易学习。

  • 文档仍然不足。

Chef 的关键构建块

菜谱 (Recipe)

它可以定义为用于管理基础设施的属性集合。菜谱中存在的这些属性用于更改现有状态或设置特定基础设施节点。它们在 Chef 客户端运行期间加载,并与节点(机器)的现有属性进行比较。然后它达到菜谱的节点资源中定义的状态。它是 Cookbook 的主要工作单元。

Cookbook

Cookbook 是菜谱的集合。它们是上传到 Chef 服务器的基本构建块。当 Chef 运行时,它确保其中包含的菜谱将给定的基础设施更改为菜谱中列出的所需状态。

资源 (Resource)

它是菜谱的基本组成部分,用于使用不同类型的状态管理基础设施。一个菜谱中可以有多个资源,这将有助于配置和管理基础设施。例如:

  • package - 管理节点上的包

  • service - 管理节点上的服务

  • user - 管理节点上的用户

  • group - 管理组

  • template - 管理包含嵌入式 Ruby 模板的文件

  • cookbook_file - 将文件从 Cookbook 中的 files 子目录传输到节点上的某个位置

  • file - 管理节点上文件的內容

  • directory - 管理节点上的目录

  • execute - 在节点上执行命令

  • cron - 编辑节点上现有的 cron 文件

属性 (Attribute)

它们基本上是设置。可以将其视为任何想要在 Cookbook 中使用的键值对。可以应用多种不同类型的属性,这些属性对节点运行的最终设置具有不同的优先级。

文件 (File)

它是 Cookbook 中的子目录,其中包含任何将放置在使用 Cookbook 的节点上的静态文件。然后可以将菜谱声明为将文件从该目录移动到最终节点的资源。

模板 (Templates)

它们类似于文件,但它们不是静态的。模板文件以 .ebr 扩展名结尾,这意味着它们包含嵌入式 Ruby。它们主要用于将属性值替换到文件中,以创建将放置在节点上的最终文件版本。

Metadata.rb

它用于管理有关包的元数据。这包括包的名称和详细信息等信息。它还包括依赖信息,这些信息告诉此 Cookbook 需要哪些 Cookbook 才能运行。这允许 Chef 服务器正确构建节点的运行列表,并确保所有部分都被正确传输。

默认 Cookbook 结构

C:\chef\cookbooks\nginx>tree 
Folder PATH listing for volume Local Disk 
Volume serial number is BE8B-6427 
C: ├───attributes 
├───definitions 
├───files 
│   └───default 
├───libraries 
├───providers 
├───recipes 
├───resources 
└───templates 
    └───default 

Chef - 相关技术

以下是 Chef 相关技术的列表。

Puppet

Puppet 提供了一种标准的方式来交付和操作软件,无论它在哪里运行。它是一个用于 Linux、Unix 和 Windows 系统的自动化管理引擎,它根据集中式规范执行管理任务。

Puppet 的主要功能如下:

  • 使用统一配置实现新系统。
  • 更新系统并升级安全性和软件包。
  • 整合新功能并添加灵巧的功能。
  • 自定义配置以确保数据源的可用性。
  • 优化可用资源并最大限度地降低成本。
  • 简化角色并使团队能够专注于核心和富有成效的问题。
  • 获得可用基础设施的鸟瞰图。

Ansible

Ansible 是一个极其简单的 IT 自动化平台,它使您的应用程序和系统更易于部署。避免编写脚本来部署和更新您的应用程序 - 使用接近纯英语的语言进行自动化,使用 SSH,无需在远程系统上安装代理。

Ansible 的主要功能如下:

  • 简单易学
  • 用 Python 编写
  • 无代理
  • 基于 YAML 的 Playbook
  • Ansible galaxy

SaltStack

SaltStack 用于数据驱动的配置。它是一种基于动态通信总线构建的新型基础设施管理方法。它用于数据驱动的编排、任何基础设施的远程执行以及任何应用程序堆栈的配置管理。

Fabric

Fabric 是一种基于 Python 的编程语言,它被开发为 Python 的 API,需要在 Python 代码中导入才能配置和管理基础设施。

广告