综合安装程序

综合安装程序

是否有人尝试过执行无人值守的 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 实例。

  1. validation.pem 放置在 /etc/chef 中
  2. /etc/chef 中的 client.rb 包含以下字段:

    node_name "my_node" chef_server_url "https://api.chef.io/organizations/my_org validation_client_name "my_org-validator"

  3. /etc/chef 中的 first_run.json 至少包含以下数据:

    {"run_list":["role[base]"]}

  4. 将运行的启动脚本

    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 方法 - 该包不再起作用。

相关内容