文章背景图

SaltStack 自动化运维指南:Master/Minion、Grains、Pillar、States 与 Zabbix 部署

2026-07-25
4
-
- 分钟

SaltStack 既支持远程执行,也支持声明式状态管理。Master 接收 Minion 密钥并下发任务;Grains 描述节点事实,Pillar 向目标节点提供受控数据,States 定义期望状态。

## 安装与信任

当前 Salt 官方推荐 onedir 包。安装后分别配置 master 与 minion,Minion 指向 Master 地址并设置唯一 ID:

```bash

systemctl enable --now salt-master

systemctl enable --now salt-minion

salt-key -L

salt-key -a MINION_ID

salt '*' test.ping

```

接受密钥前必须核对指纹和资产来源,不使用 salt-key -A -y 无差别信任未知主机。Master 是高权限控制面,应限制网络、人员和命令审计。

## Grains 与 Pillar

```bash

salt '*' grains.item os osrelease ip4_interfaces

salt 'web*' pillar.items

```

Grains 由 Minion 提供,适合系统类型、角色等目标选择,不应存放密码。Pillar 按 top.sls 定向编译,可存放配置和引用 Secret,但仍需限制缓存、日志和仓库权限。

## States

```yaml

zabbix-agent:

pkg.installed: []

file.managed:

- name: /etc/zabbix/zabbix_agentd.conf

- source: salt://zabbix/files/zabbix_agentd.conf.j2

- template: jinja

- require:

- pkg: zabbix-agent

service.running:

- enable: true

- watch:

- file: zabbix-agent

```

先执行:

```bash

salt 'test-*' state.show_highstate

salt 'test-*' state.apply test=True

salt 'test-*' state.apply

```

Zabbix Agent 自动部署还需验证仓库、服务器地址、TLS PSK/证书、主机名、端口、主动/被动模式和服务注册。配置模板不得包含通用明文密钥。

## Targeting 与批量变更

支持 glob、Grains、Pillar、正则和 compound matcher。生产高危操作先匹配清单,再使用 batch 小批执行:

```bash

salt -C 'G@roles:web and G@os:Ubuntu' test.version

salt -b 10 'web*' state.apply web

```

## 进阶与排障

- 使用 environments 区分 base、dev、prod。

- Formula/State 进入 Git 并代码评审。

- Reactor、Scheduler 和 Orchestrate 要防止事件风暴和递归触发。

- 升级 Master 后刷新 Grains/Pillar 缓存并灰度 Minion。

- 任务失败检查 job cache、Master/Minion 日志、网络、密钥、渲染结果和模块版本。

远程执行成功不等于状态正确;每个 State 都要幂等、可测试、可回滚,并用业务健康检查验收。

参考:https://docs.saltproject.io/salt/install-guide/en/latest/ 和 https://docs.saltproject.io/en/latest/topics/tutorials/states_pt1.html

原创

SaltStack 自动化运维指南:Master/Minion、Grains、Pillar、States 与 Zabbix 部署

本文链接: SaltStack 自动化运维指南:Master/Minion、Grains、Pillar、States 与 Zabbix 部署

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录