这是 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 服务器并没有在该安全连接上提供命令多路复用器,这是为什么呢?