是否有人尝试过执行无人值守的 Chef 客户端安装 - 从节点本身安装 Chef 客户端?
文档中没有提供太多信息。另外,我不想在节点上使用 chef-solo,而是使用 chef-client。
答案1
从您的问题中无法清楚得知您在哪个操作系统上执行此操作,以及您是在独立环境还是 Chef 服务器环境中执行此操作。
以下是两个独立安装 chef-client 的选项:
综合安装程序
curl -L https://www.chef.io/chef/install.sh | sudo bash
或针对特定版本
curl -L https://www.chef.io/chef/install.sh | sudo bash -s -- -v 12.0.2
软件包安装
Ubuntu 示例:
wget https://opscode-omnibus-packages.s3.amazonaws.com/debian/6/x86_64/chef_12.5.1-1_amd64.deb
sudo dpkg -i chef_12.5.1-1_amd64.deb
引导
Knife bootstrap 将在 chef 服务器环境中的节点上安装 chef-client。Bootstrap 使用综合安装程序,然后从服务器复制所需的客户端配置。
knife bootstrap 123.45.6.789 -x username -P password --sudo
无人值守引导
chef-client 可以使用无人值守的引导程序进行安装。这样,chef-client 就可以从自身进行安装,而无需使用 SSH。例如,通常使用 AWS Auto Scaling、AWS CloudFormation、Rackspace Auto Scale 和 PXE 等环境创建计算机。在这种情况下,使用诸如 knife bootstrap 或 knife CLOUD_PLUGIN create 之类的有人值守的单机安装工具并不实用,因为计算机是自动创建的,并且不可能总是有人在场来启动引导过程。
当使用无人值守引导程序安装 chef-client 时,请记住 chef-client:
- 必须能够向 Chef 服务器进行身份验证
- 必须能够配置运行列表
- 可能需要自定义属性,具体取决于所使用的食谱
- 必须能够访问 chef-validator.pem,以便在 Chef 服务器上创建新身份
- 必须具有唯一的节点名称;chef-client 将默认使用主机系统的 FQDN
使用无人值守引导程序安装 chef-client 时,它通常会内置到启动 chef-client 的映像中。所用映像的类型取决于无人值守引导程序将在其上运行的平台。
使用中的设置客户端.rb文件(chef_server_url、http_proxy 等),以确保配置详细信息内置于无人值守引导过程中。
节点的初始运行列表是使用主机系统上的 JSON 文件指定的。将 chef-client 作为可执行文件运行时,使用 -j 选项告诉 chef-client 要使用哪个 JSON 文件。例如:
chef-client -j /etc/chef/file.json --environment _default
其中file.json
类似于:
{
"resolver": {
"nameservers": [ "10.0.0.1" ],
"search":"int.example.com"
},
"run_list": [ "recipe[resolver]" ]
}
您可能还想查看使用 Chef 配置和引导 AWS 实例
答案2
我刚刚做了这件事,不得不从几个不同的 StackExchange 问题和一些博客文章中拼凑起来。很多信息都是针对 AWS 的,但我不会在那里部署。以下是所需内容的简要概述;我假设 chef-client 已经安装,并且您可以访问 chef-server 实例。
- validation.pem 放置在 /etc/chef 中
/etc/chef 中的 client.rb 包含以下字段:
node_name "my_node" chef_server_url "https://api.chef.io/organizations/my_org validation_client_name "my_org-validator"
/etc/chef 中的 first_run.json 至少包含以下数据:
{"run_list":["role[base]"]}
将运行的启动脚本
chef-client -j /etc/chef/first_run.json > /tmp/chef_first_run.log
我配置了所有这些并保存了磁盘映像。现在,当运行该操作系统安装的设备启动时,它会自动向 chef-server 注册并执行角色“base”的运行列表。我使用了 Ubuntu Server 16.04 和 Chef Client 12.3.0
编辑:之前这说 first_run.json 应该包含run-list
。这已run_list
根据评论中的反馈更新。
答案3
我们在 AWS 上一直这样做 - 在此处查看 Chef CloudInit 配置指令:http://cloudinit.readthedocs.io/en/latest/topics/examples.html#install-and-run-chef-recipes
Chef 不久前删除了他们的 PPA,因此您必须使用 omnibus 或 gem 方法 - 该包不再起作用。