---
title: 配置管理工具怎么选：agent 还是 ssh
date: '2014-09-04 10:30:15'
draft: false
summary: 配置管理工具真正先要想清楚的，不是哪家语法更好，而是你到底愿不愿意接受 agent 这层长期运维成本。
slug: config-management-agent-vs-ssh
syndication:
- platform: Weibo
  url: https://weibo.com/1648815335/3751026265741651
tags:
- ansible
- salt
- devops
topics:
- infra
type: post
---

配置管理工具怎么选？`puppet`、`chef`、`ansible`、`salt` 这一类工具，经常容易从“语法风格”或者“功能丰富度”开始比较。

但如果真要在工程里长期用，我更倾向先问一个更基础的问题：

> 你愿不愿意接受 `agent` 这层长期运维成本？

我之前用的是 `salt`，喜欢它那种简单、敏捷的感觉，也确实很顺手。

但后来越来越想切到 `ansible`，主要原因不是它“更新”，而是依赖 agent 的方案在实际环境里总会遇到一个反复出现的问题：

- `agent` 失连
- 状态漂移
- 节点不稳定

这些问题单看都不算大，但只要节点规模一上去，就会变成一类持续性的系统噪音。

`ansible` 基于 `ssh`，至少在这件事上少了一层后顾之忧。你不需要先保证一套 agent 体系长期健康，才能让配置管理本身正常工作。

当然，这不是说 `ssh` 模式就天然完胜。问题还会继续往下走：

1. 如果和 `Docker` 结合，哪种方式更顺手？
2. 当系统越来越动态时，配置管理到底应该停留在“推配置”，还是进一步变成“声明目标状态”？

但在我看来，很多工具选择如果不先把 `agent vs ssh` 这层想清楚，后面的比较往往会失焦。
