如何配置虚拟机以便它能够自动在 Chef 服务器上注册?
我知道我可以使用 knife bootstrap,但是如果您一次启动数十台服务器,这将非常繁琐。
Chef 文档说要使用chef-client -j /etc/chef/file.json
并将它与 client.rb 和 validation.pem 文件一起放入镜像中。但是,这仍然需要 ssh 进入机器才能运行命令chef-client
。
有没有更自动化的方法来做到这一点?
其他人如何一次性配置数千台机器?
更新
我联系了 Chef 支持,他们说您可以通过以下方式在启动时启动 Chef。
添加
/usr/bin/chef-client
到 /etc/rc.local 文件并确保 /etc/chef 中有一个 client.rb 和 validatation.pem 文件使用 chef-client cookbook 来管理 chef 并控制 init 脚本。
他们还说 chef-client 不作为守护进程运行。相反,它只在需要进行收敛时运行。(这似乎与文档相矛盾。)
但是这些解决方案引入了新的问题。1. 如果将其添加到 rc.local 文件中,则将运行重复的 chef-client 进程 2. 您需要运行 chef 才能使用 chef cookbook 管理 chef。然后如何清理和取消注册节点以便拍摄快照?
答案1
您有很多选择。
- 节点启动后,使用 cloud-init 运行 chef-client 命令。
- 包括在启动时运行的“服务”以运行 chef-client
- 使用或其他云的类似命令编写节点创建脚本
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