Chef 专用术语
由名字谈开去
Chef的开发团队将其命名为Chef(大厨),是有其意义的。
大厨,给我们的第一印象,就是专业。
专业的大厨,拥有各种菜的菜谱(Cookbooks)及其制作方法(Recipes),可以把每道菜都做的很美味可口,而且,不管做多少遍,每道菜的口味都不会变味。
如果把配置服务器这个过程,类比做菜,那么Chef,就是一个专业的大厨,你只要把指定的菜谱(Cookbook)告诉Chef就可以了,它会帮你自动完成。
而每个node,好比是你要招待的每个客人,你可以告诉Chef,给他们上同样的菜,也可以为每个客人指定专门的菜。Chef都会出色的完成工作。
抽象的力量
我们可以看得出来,Chef,把整个服务器的配置管理工作做了抽象,把每个服务器变成了一个个可编程的单元,这样就能方便的去做自动化了。
我们来看看Chef是怎么抽象的:
- 在Workstation上定义各个Client(Chef Node)应该如何配置自己,然后将这些信息上传到中心服务器(Chef Server)
- 每个Client连到中心服务器(Chef Server)查看如何配置自己,然后进行自我配置
先来理解下这句话: 「定义每个Client该如何配置自己」
这句话有两层意思:
- 每个Client都是可以定义如何配置的
- 每个Client的配置都有可能和别的Client不同
而一个Client配置的定义,是由Cookbook来完成的。
一个Cookbook的构成
比如,你要往某个Client上安装apache2,那么,执行下面命令:
$ knife cookbook create apache-tutorial-1
注意: 要进到你的chef-repo目录下去执行上面的命令。 因为你的.chef目录中knife.rb定义的Cookbook目录决定这个命令会把apache-tutorial-1这个Cookbook创建在哪里。
可以参考我的目录结构(编辑器为Atom):
chef repo
如图,可以看到,一个Cookbook的结构。
attributes
属性(Attributes)就是节点(Node)的信息,如IP地址,主机名,加载的内核模块,系统中可用的编程语言的版本以及更多.新的属性可以用多种方式加到节点上.
definitions
你可以在这里定义一段通用代码,可以在多个recipes中使用,你可以把它理解为「宏定义」。实际就是Ruby中动态定义的方法,后续有更详细的例子。
files
文件,是一种资源(resources),这里定义的是文件该如何分发到各个服务器,包括节点、平台和版本信息。
libraries
这里允许定义任意的Ruby代码,用于扩展你的Cookbook。
providers
Provider负责把抽象的Resource对应到实际的命令(比如一个例子, 安装vim的动作,对应到Centos系统命令是:yum -y install vim, 而Ubuntu下命令是:apt-get install vim -y)。
recipes
定义了多个resources,通俗的说,就是定义了这个Cookbook该如何进行配置。
resources
Resource是Chef提供给你的,用来描述系统的某一部分希望怎么配置的具体的东西。稍后看例子。
templates
这里定义了模板文件,用于从服务端复制配置文件到客户端,复制的过程中还可以进行变量替换。这样,不同的服务器上就可以有不同的配置。
metadata.rb
这个文件记录了一个Cookbook本身的元信息。
介绍完了Cookbook的结构,让我们来动手吧。