如何在 Linux 上安装和设置 Chef 工作站
Chef 是一款 IT 基础设施自动化软件,可用于管理您组织中的所有服务器和网络设备。
当您想与厨师服务器或基础设施中的任何物理节点(服务器、网络设备等)交互时,您需要厨师工作站。
在厨师工作站上,使用多个厨师相关命令(例如,knife),您可以创建食谱,或创建将在各个节点上执行的食谱。您还可以从 Chef 工作站启动新节点。
本教程介绍了如何在 Linux 服务器上安装和配置 Chef 工作站。
下载 ChefDK
ChefDK 代表厨师开发工具包。ChefDK 适用于几乎所有平台,包括基于 Debian 的发行版、Ubuntu、基于 RedHat 的发行版,如 CentOS、Mac OS X 和 Windows。
ChefDK 目前的稳定版本是 0.11.2,对于基于 RHEL 的系统,它可用于版本 6 和版本 7(即 CentOS 6 和 CentOS 7)。打包的 RPM 版本仅适用于 64 位版本。
从这里下载,或使用如下所示的直接 URL。
对于 CentOS 7,请使用以下命令:
cd ~
wget https://packages.chef.io/stable/el/7/chefdk-0.11.2-1.el7.x86_64.rpm
对于 CentOS 6,请使用以下命令:
cd ~
wget https://packages.chef.io/stable/el/6/chefdk-0.11.2-1.el6.x86_64.rpm
安装 ChefDK
使用我们上面下载的 RPM 安装 ChefDK。
# rpm -ivh chefdk-0.11.2-1.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:chefdk-0.11.2-1.el7 ################################# [100%]
Thank you for installing Chef Development Kit!
这将在 /opt/chefdk 下安装 ChefDK,如下所示。
# ls -l /opt/chefdk/
drwxr-xr-x. 2 root root 4096 Mar 3 13:50 bin
drwxr-xr-x. 7 root root 62 Mar 3 13:50 embedded
-rw-r--r--. 1 root root 13249 Feb 22 14:26 version-manifest.json
-rw-r--r--. 1 root root 8233 Feb 22 14:26 version-manifest.txt
验证 ChefDK 安装
执行 chef verify,这将验证 ChefDK 附带的所有不同组件,以确保它们都正常工作,没有任何问题,如下所示。
# chef verify
Running verification for component 'berkshelf'
Running verification for component 'test-kitchen'
Running verification for component 'tk-policyfile-provisioner'
Running verification for component 'chef-client'
Running verification for component 'chef-dk'
Running verification for component 'chef-provisioning'
Running verification for component 'chefspec'
Running verification for component 'generated-cookbooks-pass-chefspec'
Running verification for component 'rubocop'
Running verification for component 'fauxhai'
Running verification for component 'knife-spork'
Running verification for component 'kitchen-vagrant'
Running verification for component 'package installation'
Running verification for component 'openssl'
Running verification for component 'inspec'
.......
---------------------------------------------
Verification of component 'test-kitchen' succeeded.
Verification of component 'chef-dk' succeeded.
Verification of component 'chefspec' succeeded.
Verification of component 'rubocop' succeeded.
Verification of component 'knife-spork' succeeded.
Verification of component 'openssl' succeeded.
Verification of component 'berkshelf' succeeded.
Verification of component 'chef-client' succeeded.
Verification of component 'fauxhai' succeeded.
Verification of component 'inspec' succeeded.
Verification of component 'tk-policyfile-provisioner' succeeded.
Verification of component 'kitchen-vagrant' succeeded.
Verification of component 'chef-provisioning' succeeded.
Verification of component 'package installation' succeeded.
Verification of component 'generated-cookbooks-pass-chefspec' succeeded.
以下是厨师验证失败的示例案例。另外,请注意嵌入在 ChefDK 中的 Chef 需要 ruby。
# chef verify
..
/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/mixlib-shellout-2.2.6/lib/mixlib/shellout.rb:289:in `invalid!': Expected process to exit with [0], but received '1' (Mixlib::ShellOut::ShellCommandFailed)
---- Begin output of /usr/bin/ohai -v ----
STDOUT:
STDERR: /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb:319:in `to_specs': Could not find 'chef-config' (= 12.8.0) - did find: [chef-config-12.7.2] (Gem::LoadError)
我们收到此错误消息:“Could not find ‘chef-config’ (= 12.8.0) – did find: [chef-config-12.7.2] (Gem::LoadError)”
在上述错误消息中,ChefDK 附带的 chef-config 是 12.7.2,这是一个较旧的版本,在此设置中不兼容。因此,在这种情况下,我手动安装了 chef-config 版本 12.8.0。
之后,当我运行厨师验证时,它没有给出上述错误消息。
验证 ChefDK 版本
当你执行 chef –version 命令时,它会显示 ChefDK 的版本号以及它附带的所有组件,如下所示。
# chef --version
Chef Development Kit Version: 0.11.2
chef-client version: 12.7.2
berks version: 4.2.0
kitchen version: 1.5.0
设置 Chef ENV 变量
您还应该设置 Chef 相关的环境变量。例如:GEM_ROOT、GEM_HOME、GEM_PATH。
export GEM_ROOT="/opt/chefdk/embedded/lib/ruby/gems/2.1.0"
export GEM_HOME="/root/.chefdk/gem/ruby/2.1.0"
export GEM_PATH="/root/.chefdk/gem/ruby/2.1.0:/opt/chefdk/embedded/lib/ruby/gems/2.1.0"
此外,如果您的系统上已经安装了 ruby,您应该相应地更新 PATH 变量以使用 chefDK 附带的 ruby,如下所示。
export PATH="/opt/chefdk/bin:/root/.chefdk/gem/ruby/2.1.0/bin:/opt/chefdk/embedded/bin:/opt/chefdk/bin:/root/.chefdk/gem /ruby/2.1.0/bin:/opt/chefdk/embedded/bin:/opt/chefdk/bin:/root/.chefdk/gem/ruby/2.1.0/bin:/opt/chefdk/embedded/bin: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
以下命令将显示应设置的所有 Chef 环境变量。
chef shell-init bash
设置这些环境变量的快速方法是将上述行添加到您的 .bash_profile 文件中,如下所示。
echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile
访问 Chef Manage 的防火墙规则
接下来,您需要从已经运行的 Chef 服务器下载 Chef 入门工具包。
要访问您的 Chef Manage GUI,请在 Chef 服务器上添加以下防火墙规则以打开 Chef 服务器上的相应端口。
firewall-cmd --direct --add-rule ipv4 \
filter INPUT_direct 0 -i eth0 -p tcp \
--dport 443 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 \
filter INPUT_direct 0 -i eth0 -p tcp \
--dport 80 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 \
filter INPUT_direct 0 -i eth0 -p tcp \
--dport 9683 -j ACCEPT
firewall-cmd --reload
从 Chef Manage GUI 下载 Starter Kit
登录 Chef Manage GUI,然后单击顶部的“Administration”选项卡。接下来,从列表中选择组织。在本例中,组织名称为“example”。选择组织后,单击左侧菜单中的“Starter Kit”,如下所示。
当您单击“下载”时,您将收到以下警告消息:您确定吗?:您的用户和组织密钥将被重置。你确定要这么做吗?。
单击继续。这会将 chef-starter.zip 文件下载到您的本地计算机。
解压缩入门工具包
将 chef-starter.zip 文件传输到 Chef 工作站,并将其解压缩到 root 的主目录下,如下所示。
# cd ~
# unzip chef-starter.zip
Archive: chef-starter.zip
creating: chef-repo/cookbooks/
creating: chef-repo/cookbooks/starter/
creating: chef-repo/cookbooks/starter/templates/
creating: chef-repo/cookbooks/starter/templates/default/
inflating: chef-repo/cookbooks/starter/templates/default/sample.erb
creating: chef-repo/cookbooks/starter/files/
creating: chef-repo/cookbooks/starter/files/default/
inflating: chef-repo/cookbooks/starter/files/default/sample.txt
creating: chef-repo/cookbooks/starter/recipes/
inflating: chef-repo/cookbooks/starter/recipes/default.rb
creating: chef-repo/cookbooks/starter/attributes/
inflating: chef-repo/cookbooks/starter/attributes/default.rb
inflating: chef-repo/cookbooks/starter/metadata.rb
inflating: chef-repo/cookbooks/chefignore
inflating: chef-repo/README.md
inflating: chef-repo/.gitignore
creating: chef-repo/.chef/
creating: chef-repo/roles/
inflating: chef-repo/.chef/knife.rb
inflating: chef-repo/roles/starter.rb
inflating: chef-repo/.chef/ramesh.pem
inflating: chef-repo/.chef/example-validator.pem
如果是手动设置chef-repo文件夹,则需要手动创建上述子目录,并复制knife.rb文件、organization-validator.pem文件(例如:example-validator.pem),以及username.pem 文件(例如:ramesh.pem)到上面显示的目录。
获取 Chef 服务器 SSL 证书
在这个阶段,如果你执行knife client list,你会得到如下所示的错误信息:“ERROR: SSL Validation failure connection to host certificate verify failed”
# cd ~/chef-repo
# knife client list
ERROR: SSL Validation failure connecting to host: centos.example.com - SSL_connect returned=1 errno=0 state=error: certificate verify failed
ERROR: Could not establish a secure connection to the server.
Use `knife ssl check` to troubleshoot your SSL configuration.
If your Chef Server uses a self-signed certificate, you can use
`knife ssl fetch` to make knife trust the server's certificates.
Original Exception: OpenSSL::SSL::SSLError: SSL Error connecting to https://centos.example.com/organizations/example/clients - SSL_connect returned=1 errno=0 state=error: certificate verify failed
证书验证失败,因为我们还没有从 Chef 服务器下载 SSL 证书。
为此,请执行以下“knife ssl fetch”命令,如下所示。
# cd ~/chef-repo
# knife ssl fetch
WARNING: Certificates from centos.example.com will be fetched and placed in your trusted_cert
directory (/root/chef-repo/.chef/trusted_certs).
Knife has no means to verify these are the correct certificates. You should
verify the authenticity of these certificates after downloading.
这会将证书下载到以下 truster_certs 目录。
# ls -l /root/chef-repo/.chef/trusted_certs
-rw-r--r--. 1 root root 1379 Mar 20 20:17 centos_example_com.crt
# cat /root/chef-repo/.chef/trusted_certs/centos_example_com.crt
-----BEGIN CERTIFICATE-----
MIIDzDCCArSgAwIBAgIBADANBgkqhkiG9w0BAQsFADBRMQswCQYDVQQGEwJVUzEQ
MA4GA1UECgwHWW91Q29ycDETMBEGA1UECwwKT3BlcmF0aW9uczEbMBkGA1UEAwwS
ZXJhdGlvbnMxGzAZBgNVBAMMEmNlbnRvcy5leGFtcGxlLmNvbTCCASIwDQYJKoZI
..
..
WLyr2ORLMcck/OGsubabO/koMNTqhl2JJPECNiDJh06MeZ/2+BOwGZSpXDbw+vFE
NJAsLfsTzihGWZ58einMFA==
-----END CERTIFICATE-----
Chef工作站的最终验证
如果厨师工作站工作正常,当您执行“刀客户端列表”时,它将显示连接到该工作站的所有客户端。由于我们刚刚安装它,我们将只看到您组织的验证器,如下所示。
# cd ~/chef-repo
# knife client list
example-validator
如果您在已经连接了多台服务器的现有厨师工作站机器上执行此命令,您将看到厨师管理的所有服务器的列表。
在以下示例中,我们看到 5 台服务器连接到此厨师工作站。
# knife client list
example-validator
node1
node2
node3
node4
node5
- 点赞
- 收藏
- 关注作者
评论(0)