有没有更优雅的方式来远程运行 chef-client?

有没有更优雅的方式来远程运行 chef-client?

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

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

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

答案1

这基本上就是您开始使用的方法,但只需执行一次。chef-client 的首次运行通常会启用并启动 chef-client 守护程序作为 init.d 服务。

如果你真的想做得更优雅,你可以放弃 knife-ssh 并直接运行 ssh:

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

这可能会更快,因为 knife-ssh 会对 Chef 服务器进行搜索以获取与搜索词(在本例中name:dynode)匹配的节点,如果您已经知道 IP 地址,则严格来说不需要这样做。

答案2

你可以使用刀 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 

答案3

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

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

使用 pip 可以轻松安装 ansible:

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

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

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

或者可能:

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

答案4

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

看起来,虽然每个 chef 客户端都与 chef 服务器建立了安全连接,但是 chef 服务器并没有在该安全连接上提供命令多路复用器,这是为什么呢?

相关内容