这是Chef Fast Start教程中推荐的方式:
knife ssh name:mynode -a ipaddress -x ubuntu -i mycredentials.pem "sudo chef-client"
这实在是笨拙。真的没有更好的方法吗,或者在真实的生产环境中,您无论如何都会让节点自动更新的想法?
这是Chef Fast Start教程中推荐的方式:
knife ssh name:mynode -a ipaddress -x ubuntu -i mycredentials.pem "sudo chef-client"
这实在是笨拙。真的没有更好的方法吗,或者在真实的生产环境中,您无论如何都会让节点自动更新的想法?
您可以使用knife ssh在包含特定角色或食谱的所有盒子上运行 chef-client:
或者,如果您在 EC2 中:
这几乎就是你开始做事的方式,但它只需要完成一次。chef-client 的初始运行通常会启用并启动 chef-client 守护进程作为 init.d 服务。
如果你真的想更优雅地做到这一点,你可以放弃 knife-ssh 并直接运行 ssh:
这可能会更快,因为 knife-ssh 会针对 Chef 服务器进行搜索以获取与搜索词匹配的节点(在本例中
name:dynode
),如果您已经知道 IP 地址,则不需要严格执行此操作。您可以使用 ansible 来部署和运行 chef-client。
$ ansible -i hosts all -a 'chef-client'
ansible 很容易用 pip 安装:
pip install ansible
您的清单文件(在示例中名为“hosts”)可能如下所示:
[all] host1.example.com ansible_user=root host2.example.com ansible_user=root host3.example.com ansibel_user=root
(注意“all”是我们示例的配置文件中分组的名称——这是任意的,可以是任何东西。您的清单文件也可以包括其他分组,例如 [web_wervers]、[database_servers]、[chef_servers] , ETC。)
所以,再次,把它们放在一起:
> ansible -i hosts all -a 'chef-client'
或者可能:
> ansible -i hosts all -a 'systemctl status'
我使用 Jenkins CI 来管理运行。Linux 服务器设置为工作站并安装了 Jenkins。所以我可以使用修改后的 run_list 引导节点。无论如何,引导过程在最后运行 chef-client。
对于临时执行,Jenkins 作业执行 knife 命令以修改节点的 run_list 并使用 SSH 插件在所需节点上执行 chef-client。
遗憾的是,要向 chef 客户端发送命令,我们必须使用 ssh 下划线。
看起来虽然每个 Chef 客户端都与 Chef 服务器建立了安全连接,但是 Chef 服务器并没有在该安全连接上提供命令多路复用器,这是为什么呢?
chef-run
Chef Workstation 中有一个新命令:如果不存在,它将安装
chef-client
并运行您指定的资源或说明书。教程:https ://learn.chef.io/modules/try-chef-infra#/