Chef server
Chef
是一个面向开发dev和运维人员ops的自动化管理工具
大白话: chef就是一个针对不同系统的安装脚本代码化的管理工具。
安装脚本这个大家都知道,代码化的意思是把各式各样的脚本语言以统一的ruby语言来封装编写,代码化还有一个好处就是可以用git来管理
架构/工作流程
chef server就是一个资源服务器,上面的cookbook是通过workstation上面knife传上来的
workstation 就是管理员的开发机器用于上传资源到chef server,或者向chef server注册chef client(node),都是用knife
Node: 上面装了chef client,会自动去chef server上,拉取执行命令的清单
1. Chef 主要分为三个部分 Chef Server(对client也就是所有的目标进行管理,包括安装,配置等工作)、Workstation(代码脚本开发机) 以及 Chef Client(需要进行配置的目标服务器)。
2. 用户在 Workstation 上编写 Cookbook,主要是recipe,描述怎么配置服务器。
3. 然后,通过 knife 命令上传到 Chef Server。
4. 最后,在任意一台Chef Client 上通过pem认证,拉取server上的cookbook,实施自己的配置和部署工作。
所以,对于 Cookbook 的编写在整个自动化部署中起到了重要的作用。
名词解释:
Chef, 顾名思义,作为一名厨师,为了完成一道美味,需要一份菜单,也就是 cookbook;里面包含了很多菜的做法,每道菜的做法就是一个 recipe;用于描述每台服务器需要配置哪些信息和资源,可以定义一个 role。通过定制化自己的 cookbook 等内容,同时设置必要的 attribute 属性,就可以大规模部署自己定义好的服务到各自节点。Chef 提供了多种方式来查看,可以通过网页界面来访问,也可以通过命令行方式查看已经配置好的信息。
Cookbook 主要分为如下几个组件:
- Recipe 对一个目标机器部署的整个操作(多个resource写到一起就是recipe,将resource顺序执行,可以包含其他recipe)
- Attribute 是用来定义一个目标机器的属性值的。(比如ip,hostname,内核,机器上的编程语言等和node相关的 )
- File 是用来作部署的文件。一般会根据操作系统、平台等定义不同的文件配置。
- Library 用来对 Cookbook 的功能做扩展。我们可以用 Ruby 语言编写自己的类来供 Recipe 调用。
- Resource ***********很关键,多个resource组成了Recipe,是chef提供的,用来描述系统的某部分需要怎么配置。(像常见的package,Directory,execute,file,service,user,template等都是)
- Provider 用来定义具体某个 Resource 的执行内容。从编程的角度可以理解为 Resource 定义了一个接口,而 Provider 是这个接口的实现。
- Template 一些内嵌了 Ruby 标签的文件,通常用来定义配置文件。
- Metadata 定义了 Cookbook 的属性值,比如,当前的 Cookbook 的版本,支持的平台,对其他 Cookbook 的依赖等信息。
knife cookbook create my-test
创建名为my-test的cookbook,会生成名叫my-test的目录,并在下面有这样的目录结构,各自包含了上述的组件
README.md attributes libraries metadata.rb metadata.rb.MASTER recipes templates version.json
在README.mb中详细的描述了这个cookbook操作的模块怎么配置安装等
用户可以修改已有的成熟的cookbook,使用官方社区的cookbook很简单,只需要修改attributes里面的参数就可以了
也可以自己写cookbook来进行服务器的配置
knife data bag create admin
创建data bag,并可以上传到server,数据可被recipe调用
环境安装
server有server的安装包
client的安装包包括client和knife
workstation上面只需要安装knife