chef-server

这种方式,意味着你需要自己去架设一个Chef Server。

Chef Server分为企业版和开源版。我们以开源版本为示例。

介质准备

从 Chef 官网(http://www.opscode.com/chef/install)下载 Chef Server 和 Chef Client 的安装包以及 Chef Repository 包。

安装Server

Chef Server分为两种,一种是企业版,一种是开源版本,我们用开源版本做示例。开源版本下载地址

目前最新版本为Chef11, 是OpsCode和Facebook合作开发的,Chef Server的核心Api也用Erlang进行了重写,所以Chef11开始,Chef是Ruby+Erlang的混合体。

这里我推荐大家使用vagrant。 我是以vagrant + VirtualBox + ubuntu12.04 x86_64版本来做示例的, Vagrantfile配置如下。

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"

  config.vm.hostname = "chef-server"
  config.vm.network "public_network"

  # ...

end

对于vagrant,本书不做介绍, 大家可以去网上搜罗各种相关文章。

安装:

1 Install the file using the correct method for your system (i.e. "dpkg -i chef-server.deb" for Debian)

因为我用的是ubuntu, 所以我执行命令安装 Chef Server 安装包:

sudo dpkg -i chef-server_11.1.4-1_amd64.deb

2 sudo chef-server-ctl reconfigure
此命令会创建 Chef Server11.x 的所有必需组件,包括 Erchef、RabbitMQ,、PostgreSQL 等。

验证 Chef Server 11.x 是否安装成功。 可通过两种方式验证:

  • 一是在 Chef Server 上运行"$ sudo chef-server-ctl test"命令,此命令会运行 chef-pedant 的测试组件并报告所有组件正常工作,安装正确。
  • 二是直接在浏览器中打开 Chef Server 的页面:

    安装好以后, 在本地机器设置hosts:

       192.168.33.11 local.chef.com
    

    https://local.chef.com ,若能出现登录界面,说明 Chef Server 已经正确启动。

  • 还有种方式,就是执行ps -ef|grep chef, 看看Chef Server相关的进程是否启动。

Chef Server UI chef server UI

Chef Server UI chef server UI

安装 Chef Workstation

经过较长的等待,我们的Chef Server安装好了之后,就可以配置我们的Chef Workstation环境了。

Chef Workstation,就是我们的工作台。它包含一系列工具,比如chef client、Ruby、Knife等。

  • 安装Chef Client

    安装chef-client有很多种方式:

    • 第一种: 安装omnibus installer

      Ominibus Installer是一个Chef的安装脚本。执行命令:

        $ curl -L https://www.opscode.com/chef/install.sh | sudo bash
      

      以上命令不只会在机器上安装chef-client,还会安装Ruby语言,Knife等一系列工具,安装结束后输入以下命令来确认安装没有问题:

      $ chef-client -v
      Chef: 11.12.8
      

      chef-client安装完成之后,会在/opt生成如下的目录结构:

      /opt
      /chef
        /bin
        /embedded
           /bin
           /include
           /lib
           /share
           /ssl
      
      • 第二种方法,直接下载Chef Client 安装包。

      • 第三种方法, 先安装Ruby, 然后执行gem install chef

        因为我是一个Rubyist,所以我倾向于第三种方法。

  • 配置chef repo

    • 直接使用opscode的chef-repo就可以了。
```
  mkdir chef-repo
  cd chef-repo
  git clone https://github.com/opscode/chef-repo.git .
```
- 在chef-repo目录下创建.chef目录
- 将 Chef Server 上的 admin.pem 和 chef-validator.pem 文件(位于/etc/chef-server) 拷贝到.chef 目录中
- 运行"knife configure --initial" 命令配置 Chef Workstation, 根据提示来输入配置信息。
  • 验证Chef Workstation是否配置成功

      # knife client list
      chef-validator
      chef-webui
    
      # knife user list
      admin
      vagrant
    
说明:knife,是Chef提供的命令行工具,用于对集群中节点进行管理。此命令在后面还会有介绍。

注册一个node

现在我们已经装好了Chef Server和Chef Workstation, 我们接下来就可以创建一个Chef node, 也就是你要用chef来管理配置的那台机器。

我们使用另外一台vagrant虚拟机来当作node

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"

  config.vm.hostname = "chef-node"
  config.vm.network :private_network, ip: "192.168.33.12"

  # ...

end

执行命令:

knife bootstrap 192.168.33.12 --sudo -x vagrant -P vagrant  -N node2

这样,我们就把这个虚拟机注册为名叫node2的Chef节点。

Chef Node chef node - node2

总结

到此为止,我们就装好了Chef 的整个环境。就可以使用Chef来管理各个node了。

在安装的过程中有一些需要注意的地方:

  • 执行knife configure --initial的时候, 要注意你的配置。

    因为knife是通过pem文件和Chef Server交互的,以及要注意knife.rb中设置的登陆用户名,可以执行knife user list命令查看

  • 如果Chef Server Webui有错误,可以去查看日志:

     sudo vi /var/log/chef-server/chef-server-webui/current
    

    如果要重启Chef Server Webui,可以去 /opt/chef-server/init目录下, 使用命令

     sudo ./chef-server-webui restart