有没有更优雅的方式远程运行Chef-Client?


22

这是Chef快速入门教程中推荐的方法:

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

这真是笨拙。真的没有更好的方法吗?还是在实际的生产环境中,您将拥有自动更新节点的想法?


1
您认为这是什么“笨拙”?
womble

9
好吧,这样说。这不会很笨拙:“刀更新名称:mynode”。必须弄清楚如何连接到客户端,以及chef client命令的名称(加上必须以sudo权限运行的事实),这很笨拙。刀擅长于将许多其他混乱抽象化-为什么不这样做呢?
史蒂夫·贝内特

Answers:


11

那几乎就是开始的方式,但是只需要完成一次。Chef-client的初始运行通常启用并启动Chef-Client守护程序作为init.d服务。

如果您真的想做得更优雅,可以放弃刀式ssh并直接运行ssh:

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

这可能会更快,因为knife-ssh对Chef服务器进行搜索以获取与搜索词匹配的节点(在这种情况下为name:dynode),如果您已经知道IP地址,则不必严格执行此操作。


2
好的,我想这回答了这个问题-不,没有更好的方法。可惜的是,“刀子引导程序”实际上也无法运行厨师客户端。
史蒂夫·贝内特

我通常在引导脚本的末尾运行Chef-client来解决该特定问题。但是,如果您不喜欢“ ssh-ssh”,那么您可能会认为“ knight-bootstrap”的内部组件同样笨拙。github上有一个示例脚本
蒂姆·波特

1
ec2 server create插件只运行刀引导其次是SSH +厨师客户端。因此,如果让您感觉更好,那么Chef的作者还没有发现任何特别聪明的东西。
kgilpin 2012年

如果厨师客户需要一些时间来运行,则会超时。:( ssh:连接到主机xx.xx.xx.xx端口22:连接超时
gdanko 2015年

如果在启动后将Chef-client作为守护程序运行,并且无论设置了什么间隔,则调用它的最简便的方法是:ssh ubuntu @ ipadddress -i mycredentials.pem -f -n“ sudo killall -USR1 Chef -客户”。Fork ssh可以同时对节点列表执行此操作。
Andrew S

12

您可以使用knife ssh在所有包含特定角色或配方的盒子上运行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 

2

您可以使用ansible来部署和运行chef-client。

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

ansible可以通过pip轻松安装:

pip install ansible

您的清单文件(在示例中,名为“主机”)可能如下所示:

[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]等)

因此,再次将所有内容放在一起:

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

或许:

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


1
我看到您在这里做什么...;)
Spechal

0

我使用Jenkins CI来管理运行。Linux服务器设置为工作站,并在其上安装了Jenkins。因此,我可以使用修改后的run_list引导节点。无论如何,引导过程最终会运行Chef-client。

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


0

遗憾的是,要向厨师客户端发送命令,我们必须使用ssh下划线。

似乎每个厨师客户端都与厨师服务器建立了安全连接,但是厨师服务器没有在该安全连接上提供命令多路复用器,为什么?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.