安装和配置chef

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安装和配置chef相关的知识,希望对你有一定的参考价值。

Chef 由三大组件组成:Chef Server、Chef Workstation 和 Chef Node。
Chef Server 是核心服务器,维护了一套配置脚本(Cookbook),与每个被管节点(Chef Node)交互并给出配置指令。
Chef Workstation 提供了我们与 Chef Server 交互的接口:我们在 Workstation 上创建定义 Cookbook,并将 Cookbook 上传到 Chef Server 上以保证被管机器能从 Chef Server 上取得最新的配置指令。
Chef Node 是安装了 chef-client 并注册了的被管理节点,可以是物理机或者虚拟机或者其他对象。Chef Node 每次运行 chef-client 时都会从 Chef Server 端取得最新的配置指令(Cookbook)并按照指令配置自己。
技术分享图片
参考[https://www.ibm.com/developerworks/cn/cloud/library/1407_caomd_chef/]

系统环境: CentOS6.10
Chef server版本:chef-server-core-12.17.33-1.el6.x86_64
ChefDK版本: chefdk-3.2.30-1.el6.x86_64
Chef client版本:chef-14.4.56-1.el6.x86_64

下载chef server 到cfserver
wget https://packages.chef.io/files/stable/chef-server/12.17.33/el/6/chef-server-core-12.17.33-1.el6.x86_64.rpm
下载 chefdk, chef client到cfwork
wget https://packages.chef.io/files/stable/chefdk/3.2.30/el/6/chefdk-3.2.30-1.el6.x86_64.rpm
wget https://packages.chef.io/files/stable/chef/14.4.56/el/6/chef-14.4.56-1.el6.x86_64.rpm
下载chef client 到cfclient
wget https://packages.chef.io/files/stable/chef/14.4.56/el/6/chef-14.4.56-1.el6.x86_64.rpm

安装文件默认都是下载到/root目录下

需要在系统/etc/hosts文件中将3台测试服务器的主机名和对应的IP地址分别填入

用rpm 命令分别安装之,chef server的安装目录在/opt/opscode, chefdk的安装目录在/opt/chefdk下,chef的安装目录在/opt/chef

rpm -ivh chef-server-core-12.17.33-1.el6.x86_64.rpm
rpm -ivh chefdk-3.2.30-1.el6.x86_64.rpm
rpm -ivh chef-14.4.56-1.el6.x86_64.rpm

配置chef server
在cfserver主机上执行命令进行初始化配置,如相关联的数据库postgres和web服务nginx等等
chef-server-ctl reconfigure
安装chef-manage

chef-server-ctl install chef-manage 
chef-server-ctl reconfigure 
chef-manage-ctl reconfigure 

创建用户和证书
chef-server-ctl user-create USERNAME FIRSTNAME LASTNAME [email protected] ‘password‘ --filename /path/to/user.pem

创建组织名和证书

chef-server-ctl org-create ORGNAME ‘example.com, Inc.‘ --association_user USERNAME --filename /path/to/example.pem

配置chef workstation

参考[https://docs.chef.io/chefdk_setup.html]
运行git 命令添加用户名和邮箱

git config --global user.email "[email protected]
git config --global user.name "USERNAME"

运行 chef verify ,验证所有来自ChefDK的不同组件
添加环境变量 echo "$(chef shell-init bash)" >> ~/.bash_profile

环境变量内容为:

export PATH="/opt/chefdk/bin:/root/.chefdk/gem/ruby/2.5.0/bin:/opt/chefdk/embedded/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/opt/chefdk/gitbin"
export GEM_ROOT="/opt/chefdk/embedded/lib/ruby/gems/2.5.0"
export GEM_HOME="/root/.chefdk/gem/ruby/2.5.0"
export GEM_PATH="/root/.chefdk/gem/ruby/2.5.0:/opt/chefdk/embedded/lib/ruby/gems/2.5.0"
_chef_comp() {
    local COMMANDS="exec env gem generate shell-init install update push push-archive show-policy diff provision export clean-policy-revisions clean-policy-cookbooks delete-policy-group delete-policy undelete describe-cookbook verify"
    COMPREPLY=($(compgen -W "$COMMANDS" -- ${COMP_WORDS[COMP_CWORD]} ))
}
complete -F _chef_comp chef

在chef workstation上创建chef-repo, 有2中方式

  1. 访问chef server web 页面去下载,https://<chef server IP>, 进入Administration标签,选择Actions -> Starter Kit -> Download Starter Kit, 将下载下来的chef-starter.zip解压到/root/chef-repo

技术分享图片
技术分享图片

knife配置文件knife.rb路径在chef-repo/.chef/knife.rb,内容如下,其中的USERNAME为用户自己定义的用户名

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "USERNAME"
client_key               "#{current_dir}/USERNAME.pem"
chef_server_url          "https://chefserver/organizations/exam"
cookbook_path            ["#{current_dir}/../cookbooks"]
  1. 运行命令 chef generate app chef-repo, 在chef-repo目录下创建.chef/knife.rb文件,将上述配置内容拷贝到knife.rb里

将chef server上创建的用户和组织的证书user.pem和example.pem远程拷贝到chef workstartion的chef-repo/.chef/目录下,

执行命令knife ssl fetch,这个命令是将chef server的https SSL证书拷贝到.chef/trusted_certs目录里
运行knife ssl check, 验证ssl 证书
运行knife client list 列出当前node

配置chef client

在chef workstation机器上添加node,执行命令
knife bootstrap HOSTNAME -x USERNAME -P password -N NODENAME
knife client show NODENAME, 显示这个node的信息

Knife 是一个在 Chef 仓库和 Chef Server 之间进行交互的命令

创建一个cookbook

在chef-repo/cookbook里执行命令 chef generate cookbook motd 创建一个名为motd的文件
编辑recipe文件 chef-repo/cookbooks/motd/recipes/default.rb,添加如下内容

#
# Cookbook:: motd
# Recipe:: default
#
# Copyright:: 2018, The Authors, All Rights Reserved.
#
file ‘/etc/motd‘ do
    content ‘Welcome to chef world‘
end

然后上传cookbook到chef server,
knife upload cookbook

在chef server web页面上可以看到创建的motd以上传成功
技术分享图片

将该cookbook添加到node,还是在chef server web页面上操作
技术分享图片
编辑RunList,将该cookbook 拖拽到右侧栏目里并保存
技术分享图片

然后在chef client上面执行chef-client更新配置,可以看到motd已更新

cat /etc/motd
Welcome to chef world

到此大致完成了chef初步配置,能通过chef workstation 添加node,创建和上传cookbook,并且部署到node

吐槽一下,用过Ansible后觉得Chef有多么难用,为啥ruby语言写的配置管理工具都这么的不人性化呢,比如puppet啊之类。

以上是关于安装和配置chef的主要内容,如果未能解决你的问题,请参考以下文章

Chef学习笔记--基础知识与安装配置

自动化运维工具安装部署 chef (八)- 分发配置策略

自动化运维工具安装部署 chef (一) - 测试环境配置

如何配置 Chef Solo 以在新的 Vagrant 机器上安装 Nginx?

Chef - 如何在本地运行食谱

运维利器rshell,功能强大似Ansible/Puppet/Chef,配置简单如Putty!