官网文档链接:https://docs.saltstack.com
远程执行:在远程系统上执行命令是Salt的核心功能,Salt可以在秒级内在成千上万个系统上执行命令。
事件驱动架构:可以在架构中的系统中驱动响应式配置和管理
配置管理:Salt有一套健壮且灵活的配置管理框架,该框架使得同时配置成千上万套系统毫不费力
Salt的基本组件和概念
Grains
grains interface获取底层系统信息的接口。Grains收集操作系统,域名,IP,内核,OS类型,内存和其他系统属性
grains interface使得Salt的模块和组件可用,因此正确的salt minion命令可以自动化的在正确的系统上执行
Grain数据是相对静态的,即使操作系统信息改变,grain data可以自动更新
查看所有minion的grains数据 salt '*' grains.items
Pillar
Pillar是Salt的接口,Pillar是Salt用来分发全局变量到所有minions的一个接口
Pillar data处理方式类似Salt State Tree
Pillar data在主上编译,只有在pillar配置中指定的minion才可以获取pillar data,这使它为特定的minion存储敏感数据非常有用.
Targeting
Targeting minions是定义哪个minion应该执行命令,或者通过匹配主机名、系统信息、或者自定义组、甚至组合,来执行状态。
Runners
Salt Runners类似于Salt execution modules,但是他们是在master(不是在远端minions)上执行
YAML
SLS文件是YAML renderer渲染器的默认渲染器,YAML是一种标记语言,有许多强大的功能。Salt使用YAML的一个小子集包含常用的数据结构,例如list和dictionaries。YAML renderer的工作是将YAML 数据结构编译成python数据结构,让Salt使用。
salt-api:用于远程连接salt master的接口
--version 打印正在运行Salt的版本
--versions-report 输出程序依赖者和版本号,然后退出
-h, --help
-c CONFIG_DIR, --config-dir=CONFIG_dir Salt配置目录的位置,这个目录包含Salt manager和minions的配置文件,默认位置是/etc/salt
-d, --daemon 后台运行salt-api
--pid-file=PIDFILE 指定pidfile的位置,默认位置/var/run/salt-api.pid
-l LOG_LEVEL, --log-level=LOG_LEVEL 控制台日志的日志级别:all, garbage, trace, debug, info, warning, error, quiet. 默认: warning.
--log-file=LOG_FILE 日志文件的位置,默认/var/log/salt/api
--log-file-level=LOG_LEVEL_LOGFILE 日志文件的日志级别,默认warning
salt sls
规则一: 缩进
Salt需要每个缩进级别由两个空格组成
规则二: 冒号
字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。Values的表现形式冒号下面的每一行,用一个空格隔开
my_key: my_value
规则三: 短横杠
想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一列表的一部分。
my_dictionary:
- list_value_one
- list_value_two
- list_value_three
salt cmd.run:执行一个salt run
--version
--versions-report
-h, --help
-c CONFIG_DIR, --config-dir=CONFIG_dir
-t TIMEOUT, --timeout=TIMEOUT 等待从Minion返回的超时时间,以秒为单位。超时时间说明了命令行客户端查询minion,然后检查运行任务会等待多长时间。默认 1
--hard-crash 抛出原始异常,默认False
-d, --doc, --documentation 显示runners的文档,仅查看特定模块或者runner的文档
pillar
配置文件中的Pillar
pillar_roots : 存在于master/minion配置文件中. 指定Pillar roots对应环境的目录, 其布局类似于State Tree. 在minion配置文件中配置该选项, 只有当 file_client 为 local 时才生效. 默认位置/srv/pillar
state_top : 存在于master/minion配置文件中, 默认值为top.sls. 官方描述为用于state system, 用于告诉minion使用哪个环境并且需要执行哪些模块. 其实该选项也应用在pillar system中, 作用和state system类似. 所以如果更改了本选项, pillar system对应的top.sls也需要变更. 在minion配置文件中配置该选项, 只有当 file_client 为 local 时才生效.
file_client : 存在于minion配置文件中, 默认值为remote. 用于指定去哪里查找文件. 有效值是 remote 和 local. remote 表示使用master, local 用于 Masterless 的情况.
pillar_opts : 存在于master配置文件中, 默认值为True. 指定是否将master配置选项作为pillar. 如果该选项为True, 修改了master配置选项时, 需要重启master, 才能在pillar中得到最新的值.
声明master pillar
Salt master server包含pillar_roots设置,pillar_roots选项从环境映射到目录,pillar data基于top.sls文件中的匹配器映射到minions。
pillar_roots:
base:
- /srv/pillar
基础环境在/srv/pillar目录下
/srv/pillar/top.sls
base:
'*':
- packages
'web*':
- vim
/srv/pillar/packages.sls匹配所有minion
以web开头的minion匹配/srv/pillar/packages.sls file 和 /srv/pillar/vim.sls
dev:
'os:Debian':
- match: grain
- servers
传递特殊配置到指定minion
pillar的namespace
pillar的字典合并
包含其他Pillars
include:
- users:
defaults:
sudo: ['bob', 'paul']
key: users
In-Memory Pillar Data vs. On-Demand Pillar Data
主从上的pillar data会同步,in-memory pillar data 是由 pillar.item, pillar.get, and pillar.raw 方法返回的
saltutil.refresh_pillar.刷新方式
Pillar环境如何处理
pillarenv使minion只考虑从单一环境中获取配置文件
查看pillar data
pillar.item :在in-memory pillar data中检索
pillar.items:编译一个新的pillar字典并返回,和in-memory pillar data无关
pillar.raw:返回in-memory pillar data中整个pillar字典
pillar.get 方法
在命令行设置Pillar Data
salt '*' state.apply pillar='{"cheese": "spam"}'
Pillar 中Master配置
pillar_opts: True master的配置在所有minion中都可用
Target中的Pillar
Salt指令发送底层网络, 采用ZeroMQ PUB/SUB结构. Minion会监听SUB接口, Master会将指令发送到本地的PUB接口, 然后所有Minion均会收到该指令, 然后在Minion本地判断自己是否需要执行该指令(即Target). 当前版本中, 已经支持pillar作为Target(通过"-I"选项指定).
想要使用最新的Pillar来做Target操作, 需要在执行前先手动执行 saltutil.refresh_pillar 操作, 以刷新Minion内存中的Pillar数据.
在master上执行的具体命令例子:
查看Minion的Pillar信息
salt '*' pillar.items
查看某个Pillar值
salt '*' pillar.item <key> #只能看到顶级的
salt '*' pillar.get <key>:<key> #可以取到更小粒度的
刷新Pillar数据
salt '*' saltutil.refresh_pillar