安裝和配置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)並按照指令配置本身。
安裝和配置chef
參考[https://www.ibm.com/developerworks/cn/cloud/library/1407_caomd_chef/]html

系統環境: 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_64node

下載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.rpmnginx

安裝文件默認都是下載到/root目錄下git

須要在系統/etc/hosts文件中將3臺測試服務器的主機名和對應的IP地址分別填入web

用rpm 命令分別安裝之,chef server的安裝目錄在/opt/opscode, chefdk的安裝目錄在/opt/chefdk下,chef的安裝目錄在/opt/chefshell

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 xxx@example.com 'password' --filename /path/to/user.pembootstrap

建立組織名和證書ruby

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 命令添加用戶名和郵箱bash

git config --global user.email "username@example.com
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

安裝和配置chef
安裝和配置chef

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以上傳成功
安裝和配置chef

將該cookbook添加到node,仍是在chef server web頁面上操做
安裝和配置chef
編輯RunList,將該cookbook 拖拽到右側欄目裏並保存
安裝和配置chef

而後在chef client上面執行chef-client更新配置,能夠看到motd已更新

cat /etc/motd
Welcome to chef world

到此大體完成了chef初步配置,能經過chef workstation 添加node,建立和上傳cookbook,而且部署到node

吐槽一下,用過Ansible後以爲Chef有多麼難用,爲啥ruby語言寫的配置管理工具都這麼的不人性化呢,好比puppet啊之類。

相關文章
相關標籤/搜索