我在互联网上拥有大约 40 台运行 Debian 的 Arm 设备,这些设备具有已知的动态 IP 地址。它们的带宽有限(使用 3g 手机,使用 piad 数据计划),但我有 ssh 访问权限。有时需要升级这些机器。只有 2 个文件和日志目录不相同。
现在我使用定制的 rsync/install 脚本并在所有机器上循环。
我最担心的是工作流程很容易出错:
首先在测试设备上升级系统。(安装 - 删除软件包、在 etc 中设置配置文件、升级内核、通过 /etc/init.d 脚本安装新服务,诸如此类)
尝试重现自定义脚本中的更改(这就是问题所在)
循环部署更改
你有什么建议吗?(puppet?chef?rsync 整个文件系统?将文件系统移到版本控制之下?)
答案1
我推荐 Ansible。
它可以通过 SSH 完成步骤 1 中的所有操作,而无需在设备上安装任何代理(但建议使用 Python 和 JSON 库)。我建议在每个设备上运行步骤 1,而不是步骤 2。
Puppet 非常适合拥有大量设备的环境。它至少可以像 Ansible 一样出色地完成第 1 步中的所有操作,但需要一些额外工作(在每个设备上安装 Puppet Agent 和依赖项、设置 Puppet Master、允许设备通过 HTTP 连接到 Puppet Master)。
rsync
乍一看可能看起来像一个简单的解决方案。但是,您可能会花费大量时间编写脚本来解决其他工具已经解决或第一次不会遇到的问题。