如何在 Linux 上安装和设置 Chef 工作站

举报
Tiamo_T 发表于 2022/10/13 09:52:16 2022/10/13
【摘要】 Chef 是一款 IT 基础设施自动化软件,可用于管理您组织中的所有服务器和网络设备。

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
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。