Chef - 自动将节点添加到 Chef 服务器

Chef - 自动将节点添加到 Chef 服务器

如何配置虚拟机以便它能够自动在 Chef 服务器上注册?

我知道我可以使用 knife bootstrap,但是如果您一次启动数十台服务器,这将非常繁琐。

Chef 文档说要使用chef-client -j /etc/chef/file.json并将它与 client.rb 和 validation.pem 文件一起放入镜像中。但是,这仍然需要 ssh 进入机器才能运行命令chef-client

有没有更自动化的方法来做到这一点?
其他人如何一次性配置数千台机器?

更新

我联系了 Chef 支持,他们说您可以通过以下方式在启动时启动 Chef。

  1. 添加/usr/bin/chef-client到 /etc/rc.local 文件并确保 /etc/chef 中有一个 client.rb 和 validatation.pem 文件

  2. 使用 chef-client cookbook 来管理 chef 并控制 init 脚本。

他们还说 chef-client 不作为守护进程运行。相反,它只在需要进行收敛时运行。(这似乎与文档相矛盾。)

但是这些解决方案引入了新的问题。1. 如果将其添加到 rc.local 文件中,则将运行重复的 chef-client 进程 2. 您需要运行 chef 才能使用 chef cookbook 管理 chef。然后如何清理和取消注册节点以便拍摄快照?

答案1

您有很多选择。

  1. 节点启动后,使用 cloud-init 运行 chef-client 命令。
  2. 包括在启动时运行的“服务”以运行 chef-client
  3. 使用或其他云的类似命令编写节点创建脚本knife ec2 server create。这将在一个命令中创建并引导节点。封装在脚本中,您可以通过这种方式创建任意数量的服务器。

无论你采用哪种方法,你都需要意识到如果不错开服务器的创建,负载就会增加。几分钟内数千台机器将需要一个出色的 chef-server,或者一个 chef 服务器集群。

答案2

你基本上需要的是:

  • chef-服务器网址
  • 厨师服务器证书
  • 验证文件
  • 厨师-客户

存在于您想要引导的机器上。

在您的机器引导过程中放置​​ valiadtion.pem 的内容,例如/etc/chef/validation.pem。获取 chef-server 证书并将其放在/etc/chef/trusted_certs/chef-server.pem

创建一个/etc/chef/client.rb内容如下

日志级别:信息
log_location 标准输出
chef_server_url "https://yourchefserver.example.com"
validation_client_name“chef-validator”
file_backup_path“/var/lib/chef”
file_cache_path“/var/cache/chef”
pid_file“/var/run/chef/client.pid”

如果您chef-client现在运行,您将得到 chef-server 中的节点。

如果你想将基本食谱设置为运行列表,你可以创建类似/tmp/base-run_list.json

{
"run_list": ["recipe[my_base_cookbook]"]
}

并申请chef-client -j /tmp/base-run_list.json

相关内容