如何设置和配置Chef工作站
我们可以将Chef工作站视为Chef进行所有开发工作的地方。
大多数管理员将在这里开始创建食谱和食谱。
工作站包含本地Chef 存储库。
然后可以将此存储库与中央Chef服务器同步。
Chef工作站还将具有一个名为“ Knife”的命令行实用程序,该实用程序将用于与中央Chef服务器进行交互。
Chef工作站由前面提到的两个主要组件组成。
- Chef 库
- Knife 实用程序
首先,在Chef 工作站上安装Knife实用程序。
只需启动以下curl命令,即可轻松将Knife Utility和Chef Client安装在工作站上。
下面的curl命令下载主厨提供的bash shell脚本,然后执行它。
curl -L https://omnitruck.chef.io/install.sh | sudo bash
成功完成上面的命令将如下所示。
Installing chef installing with dpkg... Selecting previously unselected package chef. (Reading database ... 51193 files and directories currently installed.) Preparing to unpack .../chef_12.11.18-1_amd64.deb ... Unpacking chef (12.11.18-1) ... Setting up chef (12.11.18-1) ... Thank you for installing Chef!
或者,我们也可以执行以下步骤来安装Chef工作站特定的组件。
步骤1:Chef正式提供了一个名为Chefdk的debian和rpm软件包。
Chefdk代表Chef 开发套件。
我们可以通过导航到以下URL下载特定于操作系统的软件包。
下载Chef 开发套件
步骤2:第二步是通过简单地复制下载页面中指定的URL,然后将其作为参数传递给wget命令,将其下载到工作站服务器。
当我们单击上方的下载按钮时,将显示一条有关重置用户密钥的消息。
继续进行。
这个新密钥将成为我们现在下载的入门工具包的一部分。
下载后(chef-starter.zip),将其复制到Chef工作站服务器。
复制后,我们可以按如下所示对其进行解压缩。
unzip chef-starter.zip
上面的命令将在当前位置创建一个名为chef-repo的目录。
该目录包含用于从工作站与Chef服务器进行交互的所有基本设置。
它还在内部有一个菜谱目录,所有菜谱都将存储在该目录中,然后再推送到中央Chef 服务器。
让我们进入“ chef-repo”目录,看看里面有什么。
root@workstation:/home/ubuntu/chef-repo# ls -la total 32 drwxr-xr-x 5 root root 4096 Jun 30 02:45 . drwxr-xr-x 5 ubuntu ubuntu 4096 Jun 30 02:45 .. drwxr-xr-x 4 root root 4096 Jun 30 03:01 .chef drwxr-xr-x 4 root root 4096 Jun 30 02:59 cookbooks -rw-r--r-- 1 root root 495 Jun 30 02:30 .gitignore -rw-r--r-- 1 root root 2341 Jun 30 02:30 README.md drwxr-xr-x 2 root root 4096 Jun 30 02:30 roles
从上面的目录中可以明显看出有一个名为“ .chef”的目录。
该.chef目录包含用户的私钥。
另外,该“ .chef”目录还包含名为“ knife.rb”的knife配置文件。
root@workstation:/home/ubuntu/chef-repo/.chef# ls -l total 16 -rw-r--r-- 1 root root 423 Jun 30 02:30 knife.rb -rw-r--r-- 1 root root 1678 Jun 30 02:30 sarath.pem
在从工作站与中央Chef 服务器交互时,将通过Knife 具工具读取Knife.rb文件。
knife.rb文件的内容如下所示。
root@workstation:/home/ubuntu/chef-repo/.chef# cat knife.rb # See https://docs.getchef.com/config_rb_knife.html for more information on knife configuration options current_dir = File.dirname(__FILE__) log_level :info log_location STDOUT node_name "sarath" client_key "#{current_dir}/sarath.pem" chef_server_url "https://chef.example.com/organizations/theitroad" cookbook_path ["#{current_dir}/../cookbooks"] root@workstation:/home/ubuntu/chef-repo/.chef#
client_key:指定与用户关联的私钥文件的路径。
此私钥将用于根据Chef 服务器对工作站进行身份验证。
Chef_server_url:这是带有组织路径的Chef服务器的完整URL(我们在上一个安装Chef服务器的教程中确实创建了一个组织。
我们的组织名称为“ theitroad”)
cookbook_path:将食谱存储在工作站上的绝对路径。
这是因为Knife 将同步菜谱到服务器,还将下载菜谱,将创建新菜谱等。
client_name:这是与组织关联的用户名。
在上一个教程中,我们创建了一个名为“ sarath”的用户。
我们可以使用以下命令在中央Chef服务器上创建用户和组织。
创建用户:
chef-server-ctl user-create sarath Sarath Pillai [email protected] password --filename sarath.pem
在Chef中创建组织:
chef-server-ctl org-create example "Example, Inc." association_user sarath
就像我们刚才那样,无需下载Chef 入门套件(包括工作站所需的一切以及用户密钥)来设置工作站。
我们也可以自己创建Chef 仓库,如下所示。
- 在工作站上安装chefdk软件包(如前所述)。
- 运行命令“ chef generate repo Chef-repo”
- 然后在创建的存储库中创建.chef目录(cd Chef-repo && mkdir .chef && cd .chef)
- 然后创建knife.rb,并将用户的私钥复制到.chef目录(knife.rb应该具有与我们之前看到的完全相同的内容。私钥可以在我们使用以下方法创建用户的Chef 服务器上找到以上的Chef-server-ctl命令。)
knife.rb内的Chef_server_url设置使用中央Chef 服务器的dns名称。
这意味着...我们还需要在Chef 工作站上也具有适当的dns分辨率。
换句话说,Chef工作站应该能够使用chef_server_url中提到的dns名称访问Chef服务器。
如果是非生产环境,则只需将条目添加到/etc/hosts文件即可。
否则,我建议对Chef 服务器名称进行正确的dns输入。
一旦上述所有项目都已配置完毕并准备就绪。
让我们验证Chef工作站和Chef服务器之间的连接性。
如前所述,在与中央Chef 互动时,Knife 具将成为我们的工具。
因此,让我们执行以下命令。
请记住,只有在导航到chef-repo目录后才应该执行knife命令。
这是因为knife会寻找一个名为.chef的目录,其中包含我们的knife.rb设置文件。
root@workstation:/home/ubuntu/chef-repo# knife ssl fetch WARNING: Certificates from chef.example.com will be fetched and placed in your trusted_cert directory (/home/ubuntu/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. Adding certificate for chef.example.com in /home/ubuntu/chef-repo/.chef/trusted_certs/chef_example_com.crt
上面的命令与Chef服务器进行交互(通过使用knife.rb文件中定义的URL),并获取服务器的SSL证书。
然后,此SSL证书存储在一个名为Trusted_certs的新目录中。
一旦将SSL证书添加到Knife 的受信任列表中。
然后,我们可以使用以下命令验证与中央Chef服务器的连接。
root@workstation:/home/ubuntu/chef-repo# knife ssl check Connecting to host chef.example.com:443 Successfully verified certificates from `chef.example.com'
如果一切配置正确..我们应该能够看到上面的输出。
现在,利Knife 可以使用我们创建的用户(在利Knife .rb中定义)以及与该用户关联的组织来执行Chef 服务器上的所有操作。
我们可以执行诸如引导节点,创建食谱以及将食谱上传到中央Chef 服务器等工作。
如何使用Chef工作站对节点进行Boostrap处理?
引导节点不过是在需要通过Chef自动化的服务器上安装和配置Chef Agent的工作。
安装和配置带有Chef代理的节点,然后开始从中央Chef服务器提取配置,这是一个简单的命令,如下所示。
knife bootstrap 10.12.2.23 --ssh-user root --ssh-password 'password' --node-name node1.example.com
上面的命令连接到服务器10.12.2.23(在这种情况下是自动的示例节点),然后下载Chef 代理并将其配置为连接到我们的中央Chef 服务器。
如果节点仅支持基于密钥的身份验证,则可以选择使用以下命令进行引导。
knife bootstrap 10.12.2.23 --ssh-user ubuntu --sudo --identity-file privatekey.pem --node-name node1.example.com
用真实的私钥文件替换privatekey.pem。
而且我们还使用sudo,以便在该节点上安装Chef Agent时执行的命令将以sudo开头。
我们在两个命令中都给出的节点名称将为该Chef 服务器上的节点添加该名称。
Chef服务器将能够使用该名称标识该节点。
如何从工作站创建cookbook并将其上传到Chef 服务器?
Chef工作站执行的第二个操作是创建一个cookbook,该菜谱充当将应用于节点的主要基本配置块。
我们可以使用以下命令创建基本食谱。
knife cookbook create test
再次..请不要忘记Knife 命令需要从chef-repo目录进入(因为它需要.chef目录,该目录具有knife.rb设置文件)
然后,我们可以使用以下命令将我们刚刚创建的cookbook上传到中央Chef 服务器。
knife cookbook upload test