概述
chef是一个自动化部署的工具项目, 类似的有puppet.
官网地址:www.opscode.com 地址
chef主要分为两种方式:
方式一: chef-solo
chef-solo的原理是自己撰写cookbook, role等代码并配置run_list, 然后通过chef-solo命令按照run_list依次执行不同软件的部署
chef-solo的可定制程度相对比较高, 不过由于代码执行是在统一路径下,使得chef-solo主要用于单机环境的部署
具体的部署方法请见下一节
方式二: chef-server 和 chef-client
chef-server 和 chef-client 顾名思义是经典的CS架构,这使得多机部署成为可能, 准确来说变得非常简单.
大致流程可以描述为: 通过knife命令, 根据部署规则, 分别连接待部署机器, 植入chef-client进程, chef-client从各个待部署机器上, 向chef-server请求相应的软件包, 并按照特定的配置文件部署自己的机器.
chef-solo入门
这一章节主要讲述如何建立chef的基础环境并使用chef-solo
安装chef
主要有
安装ruby
通过rvm安装
安装chef
gem install chef
修改chef配置文件
mkdir /chef/solo.rb
新建和编辑文件: solo.rb 该文件是会在chef-solo执行时自动读取, 获得cookbook位置等信息
1 | file_cache_path: "/chef-solo/cache" |
使用hello world的cookbook
官方的hello world, 地址
cd chef-solo/cookbooks
git clone git://github.com/opscode-cookbooks/getting-started.git
获得相应的cookbook
运行cookbook
chef-solo 命令介绍
-c —config CONFIG文件 # 配置文件位置, 默认是/etc/chef/solo.rb
-j —json-attributes JSON_ATTRIBS # 任务脚本, 控制执行cookbooks中的哪些任务和变量属性 node.json
1 | { |
chef-solo -c solo.rb -j node.json -r —recipe-url RECIPE_URL # recipe的位置, 暂未用到
chef-server的搭建
此处主要描述Chef 11 的搭建和基本使用
参考: Chef 11 Server: Up and Running 地址
这篇文章主要描述了如何搭建chef-server 11, 并且介绍了chef-server-ctl管理工具的使用
目前我们的实验环境是Ubuntu 12.04 Server系统
注意 Chef Server强烈推荐有域名绑定和域名解析, 这个暂时没有实践, 通过修改/etc/hosts来进行
安装和启动
Chef Server 11 的安装真的很简单
首先获得安装包, 执行如下命令即可获得:
1 | wget -O chef-server-11.deb https://opscode-omnitruck-release.s3.amazonaws.com/ubuntu/12.04/x86_64/chef-server_11.0.6-1.ubuntu.12.04_amd64.deb |
在Ubuntu机器上执行, dpkg命令来安装deb的安装包, 命令如下:
1 | sudo dpkg -i chef-server-11.deb |
下面便是执行启动命令, 命令如下, 该命令会对chef-server进行配置和启动
1 | sudo chef-server-ctl reconfigure |
这个命令实质上会运行内嵌的chef-solo及其包含的cookbook, 然后设置好所有必需的环境和软件, 比如Erchef, RabbitMQ, PostgreSQL等
同时我们还可以运行测试用例, 这些用例会检测所有的组件是否正常运行, 执行如下命令即可进行
1 | sudo chef-server-ctl test |
下面便是设置管理员用户
复制默认的管理员的key和校验key到你本地的安装了chef-client的工作系统上, 通过knife为你自己创建一个新用户. Chef Server的密钥文件只能被root用户读取
1 | mkdir ~/.chef |
使用knife configure -i
可以创建一个初始化的~/.chef/knife.rb
执行命令
1 | knife configure -i |
执行结果, 在用户目录下创建一个knife.rb文件
文件并且为你自己新建一个管理员的账号. 请注意在Chef Server的机器上使用FQDN - 全称域名(Fully Qualified Domain Name), 最好可以带上HTTPS. 确认key需要从Chef Server上的/etc/chef-server/chef-validator.pem
拷贝到本机的~/.chef
. 通过这个key可以使用knife自动化地部署目标节点
1 | % knife configure -i |
文件 .chef/knife.rb
内配置的格式大致如下:ku
1 | log_level :info |
注意 cookbook_path
没有设置, 默认设置为空, 如果你需要存储本地的cookbook的时候请注意设置.
这个时候Chef Server已经可以使用了. 可以通过knife测试连通性
执行命令:
1 | % knife client list |
返回结果:
1 | chef-validator |
执行命令:
1 | % knife user list |
返回结果:
1 | admin |
在Chef Server以前的版本中,用户是API的客户端. 在Chef 11中, 无论是对于Opscode的公用Server还是自建的私有Server, 用户都是Server上独立的实体
chef-server-ctl
chef-server-ctl命令是被用来做Chef Server系统管理的. 它有内置的help参数可以呈现出很多的子命令. 包括之前执行过的重新配置命令和测试命令. 另外, 还有如下其他命令:
获得Chef Server上所有正在运行的服务的命令为:
1 | sudo chef-server-ctl service-list |
查看服务的状态, 可以用如下命令:
1 | sudo chef-server-ctl status |
其他与管理服务有关的命令比如:hup,int,kill,once,start,stop,term等
这些服务的日志可以通过tail命令进行tail方式的查看. 它还可以通过传递一个服务名称来查看仅仅是这个服务的日志.
1 | sudo chef-server-ctl tail |
安装完成后, 如果我们重新修改了配置文件, 我们还可以使用reconfigure
命令来配置Chef Server. 一旦Chef Server被重新配置后, 我们通过show-config来查看它的配置文件.
1 | sudo chef-server-ctl show-config |
文件系统位置
我们尝试将Chef Server安装的位置尽可能的集中在一个地方,而不是分散在文件系统的各个位置.下面列出Chef Server常见的几个位置:
1 | /opt/chef-server – 安装包解压的位置 |
系统设计是自我维护主要通过chef-server-ctl
命令, 而不是直接修改组件本身
Chef Server的配置
Chef Server 11中主要的配置文件在/etc/chef-server/chef-server.rb
. 类似于其他Chef配置文件, 如/etc/chef/client.rb
, ~/.chef/knife.rb
, 它也使用了Ruby DSL. 通过chef-server-ctl reconfigure
命令, 他们被定义为在cookook中的一个个的属性值. 如下所示:
在配置文件中, 我们可以控制WebUI是否有效:
1 | default['chef_server']['chef-server-webui']['enable'] = true |
可以在/etc/chef-server/chef-server.rb
文件中禁止它:
1 | chef_server_webui['enble'] = false |
注意 在chef-server.rb
配置文件中, 属性值的名字使用下划线隔开, 而默认是短横线
同时在对/etc/chef-server/chef-server.rb
文件做了任何修改后, 都应该重新配置命令:
1 | chef-server-ctl reconfigure |
chef-workstation的配置
每个chef workstation都必须设置一个chef-repo来跟Chef Server进行交互
设置chef-repo, 可以从github上面clone出来基础代码:
1 | git clone https://github.com/opscode/chef-repo.git |
执行结果:
1 | Cloning into 'chef-repo'... |
chef-repo的目录结构为:
1 | |-- chef-repo |