Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。
•SaltStack 采用 C/S模式,minion与master之间通过ZeroMQ消息队列通信,默认监听4505端口。
•Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口。
实验环境
准备三台虚拟机环境
server1 server2 server3
然后根据官网要求直接安装软件即可
他会生成一个salt的repo文件
然后安装
yum install -y salt-master
同时在server3和server4中也安装saltstack同时安装salt-minion
然后设置开机自启动
然后我们可以看到4505和4506端口均被打开
然后安装一个Python的包
重启salt-master
然后我们给server3添加master
查看server3发给minion的公钥
同样去server3查看
同样的我们给server4也要添加一个master
我们使用正则匹配测试ping的情况
也可以测试我们的指令
saltstack远程执行
Salt命令由三个主要部分构成:
salt '
target: 指定哪些minion, 默认的规则是使用glob匹配minion id.
# salt '*' test.ping
Targets也可以使用正则表达式:
# salt -E 'server[1-3]' test.ping
Targets也可以指定列表:
# salt -L 'server2,server3' test.ping
funcation是module提供的功能,Salt内置了大量有效的functions.
# salt '*' cmd.run 'uname -a'
arguments通过空格来界定参数:
# salt 'server2' sys.doc pkg #查看模块文档
# salt 'server2' pkg.install httpd
# salt 'server2' pkg.remove httpd
salt内置的执行模块列表:
http://docs.saltstack.cn/ref/modules/all/index.html
编辑master配置文件:
# vim /etc/salt/master
file_roots:
base:
- /srv/salt
调用模块的时候有时候不是我们想要的模块我们也可以自己写
然后把我们写的同步到所有的节点上
我们去节点上查看
然后我们执行
YAML语法
规则一: 缩进
Salt需要每个缩进级别由两个空格组成,不要使用tabs。
规则二: 冒号
字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。
my_key: my_value
规则三: 短横杠
想要表示列表项,使用一个短横杠加一个空格。
- list_value_one
- list_value_two
配置管理
创建一个sls文件:
# vim /srv/salt/apache.sls
httpd: # ID声明
pkg: # 状态声明
- installed # 函数声明
让msater能对不同的节点进行不同的操作
我们定义一个top.sls
我们也可以创建两个文件分别是apache和nfs然后将对应的sls文件移到里面
源码编译
测试
我们可以再写一个service.sls用来声明
然后从server4中拷贝conf文件
然后修改init文件添加service文件的关系
然后我们再service中添加一个需求
然后去执行
Salt 状态系统的核心是SLS,或者叫SaLt State 文件。
SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。
sls文件命名:
sls文件以”.sls”后缀结尾,但在调用是不用写此后缀。
使用子目录来做组织是个很好的选择。
init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以``apache/init.sls`` 就是表示``apache``.
如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache.
grains与pillar详解
Grains是SaltStack的一个组件,存放在SaltStack的minion端。
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。
由于grains是静态数据,因此不推荐经常去修改它。
应用场景:
信息查询,可用作CMDB。
在target中使用,匹配minion。
在state系统中使用,配置管理模块
我们可以通过service定义它
然后重启service
在/etc/salt/grains中定义:
# vim /etc/salt/grains:
deployment: datacenter1
同步数据:
# salt server3 saltutil.sync_grains
查询自定义项:
# salt server3 grains.item deployment
我们也可以再master端穿件grain
在salt-master端创建_grains目录:
mkdir /srv/salt/_grains vim /srv/salt/_grains/my_grain.py
def my_grain():
grains = {}
grains['roles'] = 'nginx'
grains['hello'] = 'world'
return grains
# salt '*' saltutil.sync_grains
#同步grains到minion端
pillar简介
pillar和grains一样也是一个数据系统,但是应用场景不同。
pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。
pillar更加适合在配置管理中运用。
我们定义一个web.sls
然后定义一个top.sls
pillar是动态的不用同步可以直接运行
装包