saltstack - 入门介绍(一)
本文档主要介绍使用的一些心得。
一,saltstack 运行方式
1, Local
2, Master / Minion (传统方式)
3, Salt SSH
二,saltstack 三大功能
1, 远程执行
2, 配置管理
3, 云管理
三,安装
(一台机器是 master ,同时也是做 minion )
本次saltstack 的安装的版本是基于 Python2.7, 基于centos7 系统。
master主机IP:192.168.204.128 , minion 主机IP:192.168.204.128
1,在 master 主机上安装
yum install https://repo.saltstack.com/yum/redhat/salt-repo-2018.3.el7.noarch.rpm
yum install salt-master salt-minion
2, 在minion 主机上安装
yum install https://repo.saltstack.com/yum/redhat/salt-repo-2018.3.el7.noarch.rpm
yum install salt-minion
3,先启动 master,minion 需配置方可以启动
systemctl start salt-master.service
4, 配置minion的master 节点。
vi /etc/salt/minion
修改:
master: 192.168.204.128 (根据实际的master 的IP地址修改)
id:linux-test-1 (这个是minion 主机的名,如果不设置,系统自动获取当前minion的主机名)
5, 启动salt-minion
systemctl start salt-master.service
6,KEY 认证
需在 master 同意 对 minion 的管理。
使用: salt-key 进行 管理
salt-key -a linux-test-1 (-a 对单个key 管理, -A 对所有的key 管理)
四,远程执行
远程执行命令(在master 主机上执行)
1,常用模块,cmd.run (可以执行所有的shell 命令)
如:salt ‘*’ cmd.run ‘uptime’

如: salt ‘*’ cmd.rum 'df -h'

五,配置管理
1, 编辑 /etc/salt/master
修改:file_roots:
base:
- /srv/salt
2,创建 /srv/salt 目录。
3,重启 salt-master 服务
4, 进入 /srv/salt 目录。
5,创建一个安装 apache 服务的,并且启动apache服务的配置文件(文件以sls 结尾)
编辑: /srv/salt/apache.sls
vi apache.sls
apache-install:
pkg.installed:
- names:
- httpd
- httpd-devel
apache-service:
service.running:
- name: httpd
- enable: True
- reload: True
执行命令:salt '*' state.sls apache (开始给minion主机安装apache)
6, 通过入口文件的方式执行,默认是 top.sls 文件 (高级状态),默认top 文件放在 base 的目录下,而且唯一。
编辑:/srv/salt/top.sls
base:
'*':
- apache
解释:top.sls 必须是从 base 开始,
* 代表在所有的minion 机器上执行。
- apache ,执行 apache.sls 的内容。
执行命令:salt '*' state.highstate (开始执行入口 top 文件内容)

六,saltstack 的数据系统
saltstack 数据系统分为下面2类
1,grains -- (静态数据,需 minion 重启才会收集数据)
2,Pillar -- (动态数据,处理敏感数据)
区别:
grains 一般是静态数据,在minion端进行配置,由minion端启动收集,而pillar 一般在master端口,处理动态的数据,由master端定义,存储master制定的数据,只有制定的minion端能够看到。
1,grains 常用的一些命令
[root@linux-test-1 ~]# salt ‘*’ grains.ls
[root@linux-test-1 ~]# salt ‘*’ grains.items
[root@linux-test-1 ~]# salt ‘*’ grains.get fqdn / salt '*' grains.item fqdn (获取信息,两条命令一样,稍有区别)
[root@linux-test-1 ~]# salt ‘*’ grains.get os ( 获取所有主机的系统)
[root@linux-test-1 ~]# salt -G os:CentOS cmd.run 'w' (所有是centos 的系统 执行 w 命令)

1,grains 用法
1, 远程方式执行:在master 主机上执行
执行: salt -G os:CentOS cmd.run 'w'
解释:在所有是centos 的系统 执行 w 命令
2,通过minion 配置 roles 方式执行
在 minion 主机上 编辑 /etc/salt/minion
修改: 注释 #
grains:
roles:
- webserver
- memcache
在 master 主机上 执行:
执行 : salt -G 'roles:memcache' cmd.run 'echo hehe'
解释: 在所有的minion 主机上,匹配minion主机上配置有 memcache role规则的,在该minion 主机执行 echo hehe 的命令。

如不想在上面的 minion 配置文件修改,可以编辑 /etc/salt/grains 文件,默认也会在这个文件上寻找。
vi /etc/salt/grains
web:
- nginx
解释:如果上面的roles 已打开,则,这里不能采用roles,否则会冲突,可以起其他的名字,如:web,可自定义。
3,通过top 入口文件执行
在master 主机上编辑:top.sls 文件,内容如下:
base:
'web:nginx':
- match: grain
- apache
在master 主机上执行命令: salt '*' state.highstate
解释: 通过top 入口文件,匹配哪些minion 主机上配置 有 web 类的nginx 规则,并执行apache.sls 的文件内容。

2,pillar 用法
pillar 主要在定义一些参数,敏感数据的处理
1,查看pillar (默认是关闭的,其配置在 master 上)
salt ‘*’ pillar.items
开启master 上的 pillar
编辑: /etc/salt/master ,
修改 :pillar_opts: False
pillar_opts: True
修改: 注释掉下面的 # ,
pillar_roots:
base:
- /srv/pillar
2,通过 top 文件模式进行使用
在 /srv/pillar 目录下,新增 apache.sls 文件,文件内容如下:
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
在 /srv/pillar 目录下,新增 top.sls 文件,文件内容如下:
base:
'*':
- apache
执行:salt '*' pillar.items
解释:通过 top.sls 文件,在所有minion 主机上执行 - apache ,就是执行 apache.sls 文件内容,
如果 os 是centos 的则 apache 显示 为 httpd ,若是debian 系统,则显示 apache2 内容。
三,通过pillar 定义的参数,需通过 salt '*' saltutil.refresh_pillar 进行刷新后方可以使用。
salt -I 'apache:httpd' test.ping

七,远程执行的返回
1,返回的结果,默认返回发送回 master
2,返回到 mysql 中,(基于python2.7.5)
参考官方:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql
1), 通过 minion 返回到 mysql 中,缺点是,所有的minion 都需要修改配置文件,并且安装 python-mysqldb 的模块。
需要安装yum install MySQL-python (python-mysqldb 的模块,所有的minion 都需安装)
在minion 主机的 /etc/salt/minion 中添加入下配置:
return:mysql
mysql.host: '192.168.204.128'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
2),通过minion 返回给 master,在由 master 的job_cache 写入 mysql 中
在master 主机的 /etc/salt/master 中添加配置如下:
master_job_cache: mysql
mysql.host: '192.168.204.128'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
3),在master 主机上安装 mysql 数据库,并且启动mysql 数据库,建立一个salt 数据库。
参考官方给的建库 sql 语句。
grant all on *.* to salt@192.168.204.128 identified by 'salt';
4), 运行:salt '*' test.ping --return mysql 进行测试。
如果在minion 中的 注释掉 #return:mysql ,则运行命令中,不需要带上 --return mysql 的参数。

浙公网安备 33010602011771号