有一个更优雅的方式来远程运行厨师客户端?

这是Chef Fast Start教程推荐的方法:

knife ssh name:mynode -a ipaddress -x ubuntu -i mycredentials.pem "sudo chef-client" 

这真的很笨拙。 是不是真的没有更好的方法,还是在真正的生产环境中,无论如何都会有节点自动更新?

这几乎是如何让事情开始,但只需要做一次。 chef-client的初始运行通常启用和启动chef-client守护程序作为init.d服务。

如果你真的想更优雅地做到这一点,你可以切刀ssh并直接运行ssh:

 ssh ubuntu@ipadddress -i mycredentials.pem sudo chef-client 

这可能会更快,因为knife-sshsearch主厨服务器以获取与search词相匹配的节点(在本例中为name:dynode ),如果您已经知道IP地址,则不必严格执行此操作。

您可以使用ssh刀在所有包含特定angular色或配方的框上运行chef-client:

 knife ssh "role:web" "sudo chef-client" -x ubuntu --sudo 

或者如果你在EC2:

 knife ssh "role:web" "sudo chef-client" -x ubuntu -a ec2.public_hostname 

你可以使用可以部署和运行厨师客户端。

$ ansible -i hosts all -a 'chef-client'

非常容易安装与点:

pip install ansible

您的库存文件(在示例中名为“hosts”)可能如下所示:

[all] host1.example.com ansible_user=root host2.example.com ansible_user=root host3.example.com ansibel_user=root

(注意“all”是我们例子中configuration文件中的分组名称 – 这是任意的,可以是任何东西,您的库存文件也可以包含其他分组,例如[web_wervers],[database_servers],[chef_servers]等)

所以再一次把它放在一起:

> ansible -i hosts all -a 'chef-client'

或者可能:

> ansible -i hosts all -a 'systemctl status'

我使用Jenkins CI来pipe理运行。 Linux服务器设置为工作站,并安装了Jenkins。 所以我可以使用修改的run_list引导节点。 无论如何,引导过程最后会运行厨师客户端。

对于临时执行,Jenkins作业执行knife命令修改节点的run_list,并使用SSH插件在所需的节点上执行chef-client。