Beginning Chef

Terminology

  • Chef: Cools a recipe for you, the way you want
    • Recipe: A set of instructions for preparing a particular dish
    • Cookbooks: Manages your recipe
    • Node: Configuration of your recipe
  • Knife: A tool to help you cook
  • Berkshelf: A tool to manage cookbooks
  • Foodcritic: A tool to find cookbook’s problems

Chef

A systems integration framework, built to bring the benefits of configuration management to your entire infrastructure. Chef 是一个自动化工具,用 Opscode 开发, 使用 Ruby DSL 以一种可重复使用的格式表示配置服务器所需的命令,Chef 经常运行在服务器集群的枢纽,统筹安排其他服务器的配置。

解决方案:

  1. Chef是为了解决基础设施难题。
  2. Chef通过建模将基础设施及应用程序交付抽象为代码。
  3. Chef具有强大的能力及灵活性.
  4. 由于配置即代码,基础设施即代码,Chef自动具有了版本控制功能,同时添加复制服务器也变得更容易。

Chef Solo

https://docs.chef.io/chef_solo.html

可以在单机模式下使用 Chef (Chef Solo)
在这种模式下,我们在本地开发平台上定义服务器的各种角色和设置,然后根据需要手动应用这些设置。

如果项目不断扩大也不用担心,使用 Chef Solo 制定的自动化配置大多数都可以在 Chef 中使用

Chef 术语介绍

Chef 将服务器的管理工作抽象成厨师的工作:仓库对应Kitchen,每个菜(程序)都有一个食谱Cookbook,它由一个或多个配方recipe,可能还需要一些其它的东西(attribute,template)。node 就像是一个包房,由多个菜来组成一道盛宴。

- 食谱 (cookbook)

相关的配方集合,例如,mysql 食谱中包含 mysql-server 配方和 mysql-client 配方
Cookbook实际上就是Recipe等一些东西的打包,像前面的ntp::default,ntp就是一个Cookbook

- 配方 (recipe)

定义安装单个组件(例如 Ruby, mysql-server, Monit 等)所需的命令。在 Chef 中,安装各组件所需的命令称为“配方”(recipe)。

例如,可能有一个配方用来安装 Ruby, 另一个配方用来安装 Rails 程序常用的 gem。相关功能所需的不同配方往往放在一起,组成一个“食 谱”(cookbook)。

- 节点 (node)

要配置的远程服务器

- 角色 (role)

一系列配方的组合,应用在节点上。例如,Postgres Server 角色可能会包含安装 postgres-server 的配方,安装和设置防火墙的操作, 以及安装合适的服务器监控工具的操作。把各个步骤称为“角色”(role)。

例如,可以分别为
Rails 程序服务器和数据库服务器编写角色定义,然后将二者运用在某个特定的远程服务器上

- 数据包 (data bag)

配方所用的元数据,保存为 JSON 格式文件。

例如,要创建的用户列表,以及相应的公钥

Knife & knife-solo

Knife 是一个命令行工具,为本地开发环境中的 Chef 仓库和远程服务器之间提供交互接口。而knife-solo 则是单机版的 Knife。

Berkshelf

Berkshelf 相于于 Chef Cookbooks 的Bundler,可以对第三方的Cookbooks 进行源、管理版本、下载等操作。

比如,我们来看一个典型的 Berksfile 文件:

1
2
3
4
5
6
source 'https://api.berkshelf.com'
cookbook 'apt'
cookbook 'build-essential'
cookbook 'users'
cookbook 'nginx'

Foodcritic

http://acrmp.github.io/foodcritic/

Foodcritic helps you find problems in Chef Cookbooks.
A lint tool for your Opscode Chef cookbooks.

REF::

http://www.talkingquickly.co.uk/2013/09/using-chef-to-provision-a-rails-and-postgres-server/