Skip to content


自动化运维工具SaltStack安装

一.SaltStack介绍

1.常见的自动化运维工具介绍

chef,ansible,saltstack,puppet;
这几款都是自动化运维工具,可以用来提高运维管理效率,在这几款运维工具中目前主流的是ansible和saltstack。
ansible和saltstack的区别在于ansible无需安装客户端,这也成为了ansible的一大优势。
而saltstack则需要安装客户端,也可以不用安装,他们的适用场景也不一样,ansible适用于小型企业,管理较少的服务器时适用,saltstack则用于中大型企业,因为ansible无法并行执行saltstack则可以并行执行。
但是这几款运维工具并不存在优劣,只是适用的场景的不同。

语言的选择(puppet/chef vs ansible/saltstack)
Puppet、Chef基于Ruby开发,ansible、saltstack基于python开发的
运维开发语言热衷于python(后期可做二次开发),排除Puppet、Chef

速度的选择 (ansible vs saltstack)
ansible基于ssh协议传输数据,SaltStack使用消息队列zeroMQ传输数据。从网上数据来看,SaltStack比ansible快大约40倍。
对比ansible,Saltstack缺点是需要安装客户端。为了速度建议选择SaltStack

Ansible适合100台以下到200这样服务器规模应用
SaltStack,适合几百台的规模!
puppet适合上千台和几万台的规模

2. 服务架构介绍

saltstack是基于python开发的一套C/S自动化运维工具,通信采用了zeromq消息队列的(pub/sub),数据传输采用了AES(高级加密)保证安全性,认证采用了SSL方式.
在SaltStack架构中服务器端叫作Master,客户端叫作Minion,传统C/S架构为:客户端发送请求给服务器端,服务器端接收到请求并且处理完成后再返回给客户端。在SaltStack架构中不仅有传统的C/S架构服务模式,而且有消息队列中的发布与订阅(pub/sub)服务模式。这使得SaltStack应用场景更加丰富。目前在实际环境中一般使用SaltStack的C/S架构进行配置管理。

在Master和Minion端都是以守护进程的模式运行,一直监听配置文件里面定义的ret_port(接受minion请求,默认端口号:4506)和publish_port(发布消息,默认端口号:4505)的端口。当Minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。默认客户端请求id是socket.getfqdn()取到的值,也可以在Minion启动之前修改Minion的id值。

SaltStack github地址:
https://github.com/saltstack/salt
SaltStack 官网文档地址:
https://docs.saltproject.io/en/latest/

3.saltstack四大功能与四大运行方式

saltstack四大功能,分别是:

远程执行 (批量执行命令)在master上执行命令时,会在所有的minion上执行。
配置管理/状态管理 (描述想到达到的状态,saltstack就会去执行)
云管理(cloud) 用于管理云主机
事件驱动 被动执行的,当达到某个值会自动触发
saltstack可以通过远程执行实现批量管理,并且通过描述状态来达到某些功能的目的。

saltstack四大运行方式:

local本地运行 (masterless模式)
master/minion传统方式 这是saltstack的主要模式
syndic 分布式
salt ssh (agentless模式)

Master:控制中心,salt命令运行和资源状态管理
Minion : 需要管理的客户端机器,会主动去连接Mater端,并从Master端得到资源状态
信息,同步资源管理信息
States:配置管理的指令集
Modules:在命令行中和配置文件中使用的指令模块,可以在命令行中运行
Grains:minion端的变量,静态的
Pillar:minion端的变量,动态的比较私密的变量,可以通过配置文件实现同步minions定义
highstate:为minion端下发永久添加状态,从sls配置文件读取.即同步状态配置
salt_schedule:会自动保持客户端配置
Python API就是给Python提供的API使用,需要在SaltStack master上运行

4.saltstack配置文件

saltstack的配置文件在/etc/salt 目录

saltstack配置文件说明:

配置文件 说明
/etc/salt/master 主控端配置文件
/etc/salt/minion 受控端配置文件
配置文件件/etc/salt/master默认的配置就可以很好的工作,故无需修改此配置文件

配置文件/etc/salt/minion常用配置参数

master:设置主控端的IP
id:设置受控端主机的唯一标识符,可以是IP也可以是主机名或自取见名知意的单词等都可。
在日常使用过程中,经常需要调整或修改Master配置文件,SaltStack大部分配置都已经指定了默认值,只需根据自己的实际需求进行修改即可。下面的几个参数是比较重要的

max_open_files:可根据Master将Minion数量进行适当的调整
timeout:可根据Master和Minion的网络状况适当调整
auto_accept和autosign_file:在大规模部署Minion时可设置自动签证
master_tops和所有以external开头的参数:这些参数是SaltStack与外部系统进行整合的相关配置参数
saltstack的认证机制
saltstack主控端是依靠openssl证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用salt-key命令来管理证书。

master与minion的认证过程
minion在第一次启动时会在/etc/salt/下生成/pki/minion目录,并在下面创建minion.pem(私钥)和minion.pub(公钥)。
然后主动将minion.pub发送到master的/etc/salt/pki/master/minions.pre/下面,并且文件以minion的id文件内的数据命名,等待认证。
在master上执行salt-key -L命令可以查看等待签证的minion。
执行salt-key -A -y命令同意所有没有签证的minion。
这时minion会在/etc/salt/pki/minion/下生成minion_master.pub文件,注这个是master的公钥文件。
并且master会将/pki/master/minions.pre目录下的公钥转移到/pki/master/minions/目录下表示已经认证,这时master就可以管理minion了。

二.安装部署SaltStack

1.配置yum源

cat /etc/issue.net
CentOS release 6.7 (Final)

在 Master 端和 Minion 端都需要安装 epel 的 yum源
注意网上很多教程的centos6源都已过期,注意切换到存档源


#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-archive-6.repo
#wget http://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm
#rpm -ivh epel-release-6-8.noarch.rpm 

#Centos7源
#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安装Centos6源


wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo
wget -O /etc/yum.repos.d/salt.repo https://archive.repo.saltproject.io/yum/redhat/6/x86_64/saltstack-rhel6.repo
sed -i 's/repo.saltstack.com/archive.repo.saltproject.io/g' /etc/yum.repos.d/salt*.repo
yum clean expire-cache

当前环境配置的示例ip
Master: 192.168.0.11
Minion: 192.168.0.73
环境说明:

主机名 IP 所需应用 系统
master(控制节点) 192.168.0.11 salt-master salt-minion CentOS6.7
minion01(被控节点) 192.168.0.12 salt-minion CentOS6.7

2. master端安装salt-master

当前python为2.6
python -V
Python 2.6.6

yum list |grep salt

PyYAML.x86_64 3.11-1.el6 @saltstack/6.7
python-crypto.x86_64 2.6.1-2.el6 @saltstack/6.7
python-futures.noarch 3.0.3-1.el6 @saltstack/6.7
python-jinja2.noarch 2.7.3-1.el6 @saltstack/6.7
python-markupsafe.x86_64 0.11-10.el6 @saltstack/6.7
python-tornado.x86_64 4.2.1-1.el6 @saltstack/6.7
python-zmq.x86_64 14.5.0-2.el6 @saltstack/6.7
salt.noarch 2016.3.1-1.el6 @saltstack/6.7
salt-minion.noarch 2016.3.1-1.el6 @saltstack/6.7
zeromq.x86_64 4.0.5-4.el6 @saltstack/6.7
python-salttesting.noarch 2015.7.10-1.el6 epel-archive
salt-api.noarch 0.8.2-0.el6 epel-archive
salt-cloud.noarch 0.8.8-1.el6 epel-archive

注意切成 archive.repo.saltproject.io 后再安装.
我这里之前安装过老版本salt-minion,现升级为3000.5,之前版本都有些安全漏洞.

yum clean expire-cache

yum install salt-master

Installing:
salt-master noarch 3000.5-1.el6 saltstack-repo 3.0 M
Installing for dependencies:
PyYAML27 x86_64 3.11-3.el6 saltstack-repo 152 k
python27 x86_64 2.7.13-3.ius.el6 saltstack-repo 82 k
python27-babel noarch 0.9.4-5.3.el6 saltstack-repo 1.4 M
python27-backports x86_64 1.0-7.el6 saltstack-repo 5.1 k
python27-backports-ssl_match_hostname noarch 3.4.0.2-4.el6 saltstack-repo 11 k
python27-backports_abc noarch 0.5-11.el6 saltstack-repo 15 k
python27-chardet noarch 3.0.4-8.el6 saltstack-repo 188 k
python27-crypto x86_64 2.6.1-5.el6 saltstack-repo 501 k
python27-futures noarch 3.0.3-3.el6 saltstack-repo 27 k
python27-idna noarch 2.7-4.el6 saltstack-repo 102 k
python27-ipaddress noarch 1.0.18-6.el6 saltstack-repo 36 k
python27-jinja2 noarch 2.8.1-3.el6 saltstack-repo 284 k
python27-libs x86_64 2.7.13-3.ius.el6 saltstack-repo 5.6 M
python27-markupsafe x86_64 0.11-12.el6 saltstack-repo 24 k
python27-msgpack x86_64 0.6.2-2.el6 saltstack-repo 83 k
python27-psutil x86_64 5.4.2-1.ius.el6 saltstack-repo 383 k
python27-pycurl x86_64 7.19.0-11.el6 saltstack-repo 76 k
python27-pysocks noarch 1.6.8-7.el6 saltstack-repo 30 k
python27-requests noarch 2.20.1-3.el6 saltstack-repo 120 k
python27-setuptools noarch 36.6.0-1.ius.el6 saltstack-repo 605 k
python27-singledispatch noarch 3.4.0.3-16.el6 saltstack-repo 19 k
python27-six noarch 1.9.0-4.el6 saltstack-repo 29 k
python27-urllib3 noarch 1.23-6.el6 saltstack-repo 180 k
python27-zmq x86_64 14.5.0-4.el6 saltstack-repo 478 k
Updating for dependencies:
salt noarch 3000.5-1.el6 saltstack-repo 11 M
salt-minion noarch 3000.5-1.el6 saltstack-repo 40 k

Transaction Summary

Install 25 Package(s)
Upgrade 2 Package(s)

Total download size: 24 M
Is this ok [y/N]:

以下可装可不装
yum install salt-ssh
yum install salt-syndic
yum install salt-cloud
yum install salt-api

master只监听内网


#手动编辑 vi /etc/salt/master
#interface: 192.168.0.11
#sed -i 's/#interface: 0.0.0.0/interface: 192.168.0.11/g' /etc/salt/master 
echo 'interface: 192.168.0.11' >> /etc/salt/master 

iptables开放内网端口4505和4506
iptables -A INPUT -p tcp -m tcp -s 192.168.0.0/24 -m multiport –dports 4505,4506 -j ACCEPT
/etc/init.d/iptables save

启动
/etc/init.d/salt-master start

开机启动
chkconfig salt-master on
chkconfig –list salt-master

查看当前salt版本
salt –version
salt 3000.5

查看当前salt组件版本
salt –versions-report
Salt Version:
Salt: 3000.5

Dependency Versions:
cffi: Not Installed
cherrypy: Not Installed
dateutil: Not Installed
docker-py: Not Installed
gitdb: Not Installed
gitpython: Not Installed
Jinja2: 2.8.1
libgit2: Not Installed
M2Crypto: Not Installed
Mako: Not Installed
msgpack-pure: Not Installed
msgpack-python: 0.6.2
mysql-python: Not Installed
pycparser: Not Installed
pycrypto: 2.6.1
pycryptodome: Not Installed
pygit2: Not Installed
Python: 2.7.13 (default, May 8 2020, 22:36:22)
python-gnupg: Not Installed
PyYAML: 3.11
PyZMQ: 14.5.0
smmap: Not Installed
timelib: Not Installed
Tornado: 4.5.3
ZMQ: 4.0.5

System Versions:
dist: centos 6.7 Final
locale: UTF-8
machine: x86_64
release: 2.6———.el6.x86_64
system: Linux
version: CentOS 6.7 Final

3.安装 minion 端

在minion机
配置yum源
wget -O /etc/yum.repos.d/salt.repo https://archive.repo.saltproject.io/yum/redhat/6/x86_64/saltstack-rhel6.repo
sed -i ‘s/repo.saltstack.com/archive.repo.saltproject.io/g’ /etc/yum.repos.d/salt.repo

yum list |grep salt

修复[Errno 14]ssl错误
Loading mirror speeds from cached hostfile
https://archive.repo.saltproject.io/yum/redhat/6/x86_64/latest/repodata/repomd.xml: [Errno 14] problem making ssl connection
Trying other mirror.
关闭salt源,修改salt.repo
将里面的enabled=1改成enabled=0
sed -i ‘s/enabled=1/enabled=0/g’ /etc/yum.repos.d/salt.repo
sed -n ‘/^enabled=/p’ /etc/yum.repos.d/salt.repo

yum -y install ca-certificates
yum -y update curl nss
如果还不行,那需要升级openssl等组件或者换个非https的源

再次打开salt源
sed -i ‘s/enabled=0/enabled=1/g’ /etc/yum.repos.d/salt.repo
sed -n ‘/^enabled=/p’ /etc/yum.repos.d/salt.repo

安装 salt-minion

备份原配置文件,如果有的话
mv /etc/salt/minion /etc/salt/minion.2016.bak

yum clean expire-cache
yum -y install salt-minion

Dependencies Resolved

Package Arch Version Repository Size

Installing:
salt-minion noarch 3000.5-1.el6 saltstack-repo 40 k
Installing for dependencies:
PyYAML27 x86_64 3.11-3.el6 saltstack-repo 152 k
libyaml x86_64 0.1.3-4.el6_6 os 52 k
python27 x86_64 2.7.13-3.ius.el6 saltstack-repo 82 k
python27-babel noarch 0.9.4-5.3.el6 saltstack-repo 1.4 M
python27-backports x86_64 1.0-7.el6 saltstack-repo 5.1 k
python27-backports-ssl_match_hostname noarch 3.4.0.2-4.el6 saltstack-repo 11 k
python27-backports_abc noarch 0.5-11.el6 saltstack-repo 15 k
python27-chardet noarch 3.0.4-8.el6 saltstack-repo 188 k
python27-crypto x86_64 2.6.1-5.el6 saltstack-repo 501 k
python27-futures noarch 3.0.3-3.el6 saltstack-repo 27 k
python27-idna noarch 2.7-4.el6 saltstack-repo 102 k
python27-ipaddress noarch 1.0.18-6.el6 saltstack-repo 36 k
python27-jinja2 noarch 2.8.1-3.el6 saltstack-repo 284 k
python27-libs x86_64 2.7.13-3.ius.el6 saltstack-repo 5.6 M
python27-markupsafe x86_64 0.11-12.el6 saltstack-repo 24 k
python27-msgpack x86_64 0.6.2-2.el6 saltstack-repo 83 k
python27-psutil x86_64 5.4.2-1.ius.el6 saltstack-repo 383 k
python27-pycurl x86_64 7.19.0-11.el6 saltstack-repo 76 k
python27-pysocks noarch 1.6.8-7.el6 saltstack-repo 30 k
python27-requests noarch 2.20.1-3.el6 saltstack-repo 120 k
python27-setuptools noarch 36.6.0-1.ius.el6 saltstack-repo 605 k
python27-singledispatch noarch 3.4.0.3-16.el6 saltstack-repo 19 k
python27-six noarch 1.9.0-4.el6 saltstack-repo 29 k
python27-urllib3 noarch 1.23-6.el6 saltstack-repo 180 k
python27-zmq x86_64 14.5.0-4.el6 saltstack-repo 478 k
salt noarch 3000.5-1.el6 saltstack-repo 11 M
zeromq x86_64 4.0.5-4.el6 saltstack-repo 568 k

Transaction Summary

Install 28 Package(s)

Total download size: 22 M
Installed size: 99 M
Is this ok [y/N]:

指定 master 的ip地址


#替换#master: salt
#sed -i 's/#master: salt/master: 192.168.0.11/g' /etc/salt/minion 
#sed -i 's/master: 192.168.4.138/master: 192.168.0.56/g' /etc/salt/minion 

推荐在尾部添加
echo ‘master: 192.168.0.56’ >> /etc/salt/minion
echo ‘environment: prd’ >> /etc/salt/minion
echo ‘hash_type: sha256’ >> /etc/salt/minion

再次确认master ip地址
sed -n ‘/^master:/p’ /etc/salt/minion
master: 192.168.0.11

指定minion的id
id默认为hostname,如需修改可以编辑minion配置文件的#id:
sed -i ‘s/^#id:/id: c1g-w32/g’ /etc/salt/minion #注意id:后的空格

推荐直接编辑id文件
echo hostname >/etc/salt/minion_id

查看当前版本
salt-minion –version
salt-minion 3000.5

启动服务
/etc/init.d/salt-minion start
Starting salt-minion:root:c1g-w32 daemon: OK

开机启动
chkconfig salt-minion on
chkconfig –list salt-minion

关闭服务
/etc/init.d/salt-minion stop

查看当前id
cat /etc/salt/minion_id

如id错误,修改当前id
echo ‘c1g-w32’ >/etc/salt/minion_id

4.C/S认证

在master机
salt-key 密钥管理

salt-key -L 查看当前需要接受的keys(master和minions都需要把服务开启)。
//salt-key常用选项
-L //列出所有公钥信息
-a minion //接受指定minion等待认证的key
-A //接受所有minion等待认证的key
-r minion //拒绝指定minion等待认证的key
-R //拒绝所有minion等待认证的key
-f minion //显示指定key的指纹信息
-F //显示所有key的指纹信息
-d minion //删除指定minion的key
-D //删除所有minion的key
-y //自动回答yes

查看当前证书情况
salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
c1g-w32
Rejected Keys:

单独接受c1g-w32
salt-key -ya c1g-w32

The following keys are going to be accepted:
Unaccepted Keys:
c1g-w32
Key for minion c1g-w32 accepted.

再次查看
salt-key -L
Accepted Keys:
c1g-w32
Denied Keys:
Unaccepted Keys:
Rejected Keys:

接受所有的minion证书
salt-key -yA

5.远程命令执行

测试master和minion之间的通信是否正常
salt “c1g-w32” test.ping
c1g-w32:
True

salt “*” test.ping
c1g-w32:
True

salt ‘*’ cmd.run ‘df -h’

salt ‘*’ cmd.run ‘yum -y install tree’

三.SaltStack 相关命令

1.在master上配置nodegroup

1.在/etc/salt/master的最下面加上default_include
echo ‘default_include: master.d/*.conf’ >> /etc/salt/master

2.编辑组
不要用I@ 会匹配不到
vim /etc/salt/master.d/group.conf
nodegroups:
proxy: ‘E@c1g-w0[1-7]’
nginx: ‘E@c1g-w0[8-9] or E@c1g-w[1][0-9] or E@c1g-w2[0-3] or E@c1g-w3[3-6] or L@c1g-w31’
bak: ‘L@c1g-w37’
manage: ‘E@c1g-w2[4-8] or E@c1g-w3[0-2]’

无需重启

3.测试组
salt -N proxy test.version
salt -N nginx test.version
c1g-w35:
3000.5
c1g-w36:
3000.5

salt命令使用

salt远程执行命令
//语法:salt [options] ” [arguments]

//常用的options
–version //查看saltstack的版本号
–versions-report //查看saltstack以及依赖包的版本号
-h //查看帮助信息
-c CONFIG_DIR //指定配置文件目录(默认为/etc/salt/)
-t TIMEOUT //指定超时时间(默认是5s)
–async //异步执行
-v //verbose模式,详细显示执行过程
–username=USERNAME //指定外部认证用户名
–password=PASSWORD //指定外部认证密码
–log-file=LOG_FILE //指定日志记录文件

//常用target参数
-E //正则匹配
-L //列表匹配
-S //CIDR匹配网段
-G //grains匹配
–grain-pcre //grains加正则匹配
-N //组匹配
-R //范围匹配
-C //综合匹配(指定多个匹配)
-I //pillar值匹配

查看所有的function:
salt “c1g-w32” sys.doc cmd

默认的规则是使用glob匹配minion id
salt ‘‘ test.ping salt ‘node‘ test.ping
正则表达式
salt ‘node[1|2]’ test.ping
salt ‘node[!2]’ test.ping
salt -E ‘server[1-3]’ test.ping
salt -E ‘node(1|2)’ test.ping
指定列表
salt -L ‘server2,server3’ test.ping
指定ip
salt -S ‘192.168.0.13’ test.ping
指定ip段
salt -S ‘192.168.0.0/24’ test.ping

测试
salt ‘*’ test.echo ‘hello’

网络
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.network.html
salt ‘‘ network.ping baidu.com # 使用ping命令测试到某主机的连通性 salt ‘‘ network.connect baidu.com 80 # #测试minion至某一台服务器的网络是否连通
salt ‘‘ network.default_route #查看默认路由 network.get_route #查询到一个目标网络的路由信息 network.netstat #返回所有打开的端口和状态 network.routes #返回当前路由表 salt ‘‘ network.get_hostname # 获取主机名
salt ‘‘ network.active_tcp # 返回所有活动的tcp连接 salt ‘‘ network.ip_addrs # 返回一个IPv4的地址列表
salt ‘‘ network.get_fqdn # 查看主机的fqdn(完全限定域名) salt ‘‘ network.interfaces

salt ‘‘ service.available sshd # 查看ssh服务是否可达 salt ‘‘ service.get_all # 查看所有启动的服务
salt ‘‘ service.status nginx # 查看指定服务是否在线 salt ‘‘ state.show_top # 查看top_file情况
salt ‘*’ disk.usage

查看进程
salt c1g-w01 cmd.run ‘ps aux|grep titanagent’
c1g-w01:

查看chconfig zabbix是否开启
salt ‘c1g-w01’ cmd.run ‘chkconfig –list|grep zabbix_agentd’
salt -N bak cmd.run ‘chkconfig –list|grep zabbix_agentd’
salt ‘*’ cmd.run ‘chkconfig –list|grep zabbix_agentd’

salt-run
salt-run [options] [runner.func]
salt-run manage.status ##查看所有minion状态
salt-run manage.down ##查看所有没在线minion
salt-run manged.up ##查看所有在线minion

salt-call
该命令通常在minion上执行,minion自己执行可执行模块,不是通过master下发job
salt-call [options] [arguments]
salt-call test.ping ##自己执行test.ping命令
salt-call cmd.run ‘ifconfig’ ##自己执行cmd.run函数

文件分发salt-cp
salt-cp命令用于复制一个文件到多个minion系统中。指定minion可以使用通配符、正则表达式、Grains等方法
分发文件到minion上,不支持目录分发,通常在master运行
salt-cp [options] ” SOURCE DEST
salt-cp ‘‘ testfile.html /tmp salt-cp ‘node‘ /opt/index.html /tmp/a.html

salt-cp ‘*’ /etc/hosts /etc #不用创建上面的sls即可实现(不建议此方法)

更新nginx 的nginx.conf

salt-cp ‘c1g-w3’ /srv/salt/prd/server/c1g-w3/opt/nginx/conf/nginx.conf /opt/nginx/conf/

salt ‘c1g-w3’ cmd.run ‘/opt/nginx/sbin/nginx -t’
salt ‘c1g-w3’ cmd.run ‘/opt/nginx/sbin/nginx -s reload’

Saltstack配置管理

修改file_root文件目录
文件件中的flie_roots选项管理。Salt文件服务器的默认环境为为base环境,base环境必须定义,因为
当环境没有明确指定时,文件下载就是从base环境中去找的。其配置如下:
文件服务器在给minions传输文件时,是有搜索顺序的。配置说明:如果文件URL为:salt://httpd/httpd.conf。那么传输文件时,先搜
索/srv/salt/base/httpd/httpd.conf,如果找到了,则下载;否则就使用 /srv/salt/failover/httpd/httpd.conf

注意:
如果minion里定义了environment,那么master里也要有对应的environment

echo ‘environment: prd’ >> /etc/salt/minion

否则出会现以下环境对不上的错误
No matching salt environment for environment ‘prd’ found

vim /etc/salt/master
file_roots:
base:
– /srv/salt/base
– /srv/salt/failover
dev:
– /srv/salt/dev
– /srv/salt/base
prd:
– /srv/salt/prd
– /srv/salt/base

创建文件目录
mkdir /srv/{salt,pillar}
mkdir -p /srv/salt/{base,dev,prd,failover}/init/files

编写.sls文件
sls文件是YAML语言来进行描述的,请遵循YAML语法规范

Online YAML Parser: Convert YAML to JSON or Python data structures.
https://yaml-online-parser.appspot.com/

The Official YAML Specification
https://yaml.org/spec/1.2.2/
WHAT IS YAML
https://docs.saltproject.io/en/latest/topics/yaml/index.html

规则一: 缩进
Salt需要每个缩进级别由两个空格组成,不要使用tabs。
如果你遇到“rendering sls files errors”等错误,请检查你的sls文件,确保没有Tab等非法符合

规则二: 冒号
字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。
my_key: my_value

映射到Python里面就是:
{‘my_key’: ‘my_value’}
不常见,通常情况下,一个key的value不是单一的,而是一个 列表 的values

规则三: 短横杠
想要表示列表项,使用一个短横杠加一个空格。
key:

  • v1
  • v2
  • v3

映射到Python里面就是:
{‘key’: [v1,v2,v3]}
这个在Salt很常见.

规则四: 嵌套
基本遵循2个空格的缩进,只有定义context,defaults选项的时候才使用四个空格作为缩进。用大括号的除外。

批量修改/etc/resolv.conf文件示例
file.manage
https://docs.saltproject.io/en/latest/ref/states/all/salt.states.file.html#salt.states.file.managed
cd /srv/salt/base
vim init/dns.sls
/etc/resolv.conf: #标签
file.managed: #状态模块file的mamaged方法,用以实现
– source: salt://init/files/resolv.conf #源文件resolv.conf
– user: root #文件用户属主
– group: root #文件数组
– mode: 644 #文件权限

init/files/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.0.11
nameserver 114.114.114.114

top.sls文件是必需的
vim top.sls
base:
‘: – dns dev: ‘‘:
– dns
prd:
‘*’:
– dns

重启服务
/etc/init.d/salt-master restart

执行dns状态文件
salt ‘c1g-w02’ state.sls init.dns

c1g-w02:
----------
          ID: /etc/resolv.conf
    Function: file.managed
      Result: True
     Comment: File /etc/resolv.conf updated
     Started: 14:36:30.204689
    Duration: 70.436 ms
     Changes:   
              ----------
              diff:
                  --- 
                  +++ 
                  @@ -1,4 +1,4 @@
                  -; generated by /sbin/dhclient-script
                  +# Generated by NetworkManager
                   nameserver 192.168.0.11
                   nameserver 114.114.114.114
                  +

Summary for c1g-w02
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  70.436 ms

指定环境运行
salt -N bak state.sls saltenv=’prd’ init.dns

state高级状态默认从top文件中执行
salt ‘c1g-w03’ state.highstate

常用文档地址
grains
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.grains.html
user.list_users
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.useradd.html#salt.modules.useradd.list_users
SALT.MODULES.CP
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.cp.html
SALT.MODULES.CP
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.cron.html#module-salt.modules.cron
SALT.MODULES.DISK
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.disk.html
SALT.MODULES.DNSMASQ
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.dnsmasq.html
SALT.MODULES.ELASTICSEARCH
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.elasticsearch.html
SALT.MODULES.ETHTOOL
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.ethtool.html
SALT.MODULES.FILE
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.file.html
SALT.MODULES.HOSTS
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.hosts.html
SALT.MODULES.HTTP
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.http.html
SALT.MODULES.IPTABLES
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.iptables.html
SALT.MODULES.LINUX_IP
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.linux_ip.html
SALT.MODULES.LINUX_LVM

https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.linux_lvm.html
SALT.MODULES.LINUX_SERVICE
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.linux_service.html
SALT.MODULES.LOCALEMOD
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.localemod.html

https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.logrotate.html

https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.memcached.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.minion.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.network.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.nginx.html#

https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.pillar.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.rabbitmq.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.redismod.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.rsync.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.saltcheck.html#
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.saltutil.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.schedule.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.scp_mod.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.selinux.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.splunk.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.ssh.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.ssh_service.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.status.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.svn.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.system.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.timezone.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.useradd.html
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.varnish.html

参考:
https://www.cnblogs.com/0x00000/p/5790918.html
https://tsov.net/uupee/23010/
https://www.jianshu.com/p/9fc253c35189

Posted in saltstack/ansible, 技术.


No Responses (yet)

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.