🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 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](https://box.kancloud.cn/2015-08-23_55d9d7ada3bdb.png) *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的结构,让我们来动手吧。