Cloudflare自动化Salt配置管理调试,减少发布延迟

小编007 正二品 (尚书) 2026-02-09 01:17 2 0
小编007 正二品 (尚书) 楼主
2026-02-09 01:17
第1楼

摘要:nbsp;为了解决这些挑战,Cloudflare的商业智能和SRE团队合作构建了一个新的内部框架。nbsp;基于Cloudflare在SaltStack上遇到的挑战,需要注意的是,像Ansible"、Puppet"和Chef"这样的替代配置管理工具,每个工具都有不同的架构权衡。nbsp;原文链接:Cloudflare Automates Salt Configuration Management Debugging, Reducing Release Delays"


Cloudflare最近分享"了他们是如何使用SaltStack"(Salt)管理庞大的全球服务器集群的。在这篇博客文章中,他们讨论了解决“一粒沙(grain of sand)”问题所需的工程任务。它的关注点在于要从数百万次状态应用中找出某个配置错误。Cloudflare的站点可靠性工程(SRE)"团队重新设计了其配置的可观测性,他们将故障与部署事件关联起来。这项工作将发布延迟减少了5%以上,并减少了手动分析问题相关的工作。

 

作为配置管理(configuration management,CM)的工具,Salt能够确保了跨数百个数据中心的数千台服务器保持在期望的状态。在Cloudflare的规模下,即使YAML文件中的一个微小语法错误或“Highstate”运行期间的瞬时网络故障,都可能阻碍软件发布。

 

Cloudflare面临的主要问题是预期配置与实际系统状态之间的“偏离(drift)”。当Salt运行失败时,它影响的不仅仅是一台服务器,它可能会阻止在整个边缘网络中推出关键的安全补丁或性能特性。

 

Salt使用了带有ZeroMQ"的主控/受控(master/minion)设置"。这使得很难找出为什么特定的受控端(代理)没有向主控端报告状态,这简直就像大海捞针。Cloudflare总结了几个破坏此反馈循环的常见故障模式:

无声故障:受控端在状态应用期间可能会崩溃或挂起,导致主控端无限期地等待响应。资源耗尽:繁重的pillar数据(元数据)查找或复杂的Jinja2模板可能会使主控端的CPU或内存不堪重负,导致job丢失。依赖地狱:包状态可能会因为上游仓库无法访问而失败,但错误消息可能埋藏在数千行日志的深处。

Salt的架构图

 

当发生错误时,SRE工程师必须手动通过SSH登录到候选受控端。他们会追踪主控端上的job ID,并筛选保留时间内有限的日志,然后尝试将错误与变更或环境条件联系起来。在拥有数千台机器和频繁提交代码的情况下,这个过程变得单调且难以维护。它提供的持久工程价值非常有限。

 

为了解决这些挑战,Cloudflare的商业智能和SRE团队合作构建了一个新的内部框架。目标是为工程师提供一种“自助服务”机制,以识别跨服务器、数据中心和特定机器组的Salt故障的根本原因。

 

解决方案涉及从集中式日志收集转向更健壮的、事件驱动的数据摄入管道。这个在相关内部项目中被称为“Jetflow”的系统,允许将Salt事件与以下内容关联:

Git提交:识别配置仓库中触发故障的精确变更。外部服务故障:确定Salt失败是否实际上是由依赖项(如DNS故障或第三方API中断)引起的。临时(Ad-Hoc)发布:区分计划的全局更新和开发人员进行的手动更改。

 

Cloudflare通过改变管理基础设施故障的方式,为自动分类奠定了基础。系统现在可以自动标记特定的“一粒沙”,即导致发布阻塞的那一行代码或那一台服务器。

 

从被动管理到主动管理的转变带来了以下成果:

发布延迟减少5%::通过更快地暴露错误,缩短了从“代码完成”到“在边缘运行”的时间。减少琐事:SRE不再需要花费数小时进行“重复性分类”,使他们能够专注于更高层次的架构改进。改进的可审计性:现在每个配置变更都可以从Git PR到边缘服务器上的最终执行结果进行全生命周期追踪。

 

Cloudflare工程团队观察到,尽管Salt是一个强大的工具,但在“互联网规模”下管理它需要更智能的可观测性。通过将配置管理视为一个需要关联和自动分析的关键数据问题,他们为其他大型基础设施提供商树立了榜样。

 

基于Cloudflare在SaltStack上遇到的挑战,需要注意的是,像Ansible"、Puppet"和Chef"这样的替代配置管理工具,每个工具都有不同的架构权衡。Ansible使用SSH无代理的方式工作。这比Salt的主控/受控设置更简单。然而,由于顺序执行,它在大规模环境时可能会面临性能问题。Puppet使用基于拉取的模型,代理会与主控服务器进行核对。这提供了更加可预测的资源使用,但与Salt的推送模型相比,可能会减慢紧急变更的速度。Chef也使用代理,但侧重于使用其Ruby DSL的代码驱动方法。这为复杂任务提供了更大的灵活性,但学习曲线更陡峭。

 

在Cloudflare的规模下,任何工具都会遇到其自身的“一粒沙”问题。然而,关键教训很明确,那就是管理数千台服务器的任何系统都需要强大的可观测性。它还必须能够将故障与代码变更自动关联,并具备智能分类机制。这将手动侦探工作转化为可操作的洞察力。

 

原文链接:

Cloudflare Automates Salt Configuration Management Debugging, Reducing Release Delays"

  • 1 / 1 页
敬请注意:文中内容观点和各种评论不代表本网立场!若有违规侵权,请联系我们.
{# #]