一、saltstack的master和minion安装

1、把对应的master和minion的IP和主机名写入/etc/hosts中

2、修改主机名

3、缓存yum安装包,方便没网时安装
vim /etc/yum.conf 把里面的keepcache由0改为1

4、安装epel源
yum install epel-release -y

5、master端安装salt-master
yum install salt-master -y

6、minion端安装salt-minion
yum install salt-minion -y

7、启动salt-master服务
systemctl start salt-master.service

8、修改minion端配置文件,并启动
vim /etc/salt/minion 修改# master:在后面写master端的IP或能解析主机名
systemctl start salt-minion.service

 

 

二、使用saltstack的命令

salt-key -L --------查看所有minion的状态

salt-key -a --------对某个minion进行签名

salt-key -A --------对所有minion进行签名

salt-key -d --------删除某个minion

salt-key -D --------删除所有的minion

salt '*' test.ping ----------对所有minion进行ping操作

salt '*' cmd.run 'getenforce' --------对所有minion主机执行命令

salt -L 'minion01,minion02' cmd.run 'getenforce' ------L参数可以指定minion多个主机

salt -S '192.168.2.0/24' cmd.run 'getenforce' -------S参数查看指定一个IP网段minion的主机(-E使用正则表达式匹配)

三、配置管理入门(软件包管理)

1、编辑master端的/etc/salt/master文件
file_roots:
base:
- /srv/salt
把上面三行的#注释去掉

2、建立/srv/salt

3、在/srv/salt中建立对应功能的文件top.sls和apache.sls
在top.sls入口文件中写入
base: -----------在哪个环境中,这里指在bese环境中
'*': -----------对哪些主机应用
- apache -----------执行哪个文件

在apache.sls中写入

apache-install: -----------标签
pkg.installed: -----------pkg模块是对包进行管理的,installed方法指处于安装状态
- names: -----------安装多个包时的格式
- httpd -----------要安装的软件名
- mod_ssl
service.running: ----------service模块为启动服务模块,running方法指处于运行状态
- name: httpd ----------要启动的软件名称
- enable: True ----------永久启动

4、文件写好之后可以用以下命令执行
salt '*' state.highstate
如果没有top.sls则用下面语句执行sls文件
salt '*' state.sls apache

 

四、数据系统 Grains

1、Grains : 收集Minion端的信息并匹配Target,Minion端设置提供给Master(Grains里收集了Minion启动时候的所有系统信息,存储在Minion端,静态数据,只有重启的时候才会重新收集)

salt 'minion01' grains.ls -----------查看grains自带的内置信息

salt 'minion01' grains.items -----------查看所有grains自带的内置信息的值

salt 'minion01' grains.item os -----------查看某个grains自带的内置信息的值

salt 'minion01' grains.get os ----------查看某个grains自带的内置信息的值

2、自定义Grains:在minion端定义

方法一、编辑minion端的/etc/salt/minion文件
grains:
roles:
- webserver ---------自定义的内之类
- memcache
deployment: datacenter4 ----------指在哪个机房

把上面五行的#注释去掉
systemctl restart salt-minion.service重启minion
master端执行
salt '*' grains.item roles

方法二、在/etc/salt/下创建grains文件,并编辑自定义类
roles:
- mysqls
- redis

systemctl restart salt-minion.service重启minion
master端执行
salt '*' grains.item roles

3、制定一类grains执行远程命令
salt -G 'roles:mysqls' test.ping

五、数据系统Pillar

1、Pillar:Pillar在saltstack中的主要作用是存储和定义配置管理中需要的一些数据,比如软件版本号、用户名密码等信息,他的存储格式和Grains类似,都是YAML格式。(Master端设置,提供给Minion端)

2、编辑master端的/etc/salt/master文件
pillar_roots:
base:
- /srv/pillar
把上面三行的#注释去掉

systemctl restart salt-master.service 重启服务

3、mkdir /srv/pillar 创建pillar文件路径

4、在/srv/pillar中建立对应功能的文件top.sls和zabbix.sls
在top.sls入口文件中写入
base: -----------在哪个环境中,这里指在bese环境中
'*': -----------对哪些主机应用
- zabbix -----------执行哪个文件

在zabbix.sls中写入

Zabbix_Server : 120.0.0.1 ---------zabbix的IP

5、刷新pillar
salt '*' saltutil.refresh_pillar

6、查看所有主机的pillar值
salt '*' pillar.item Zabbix_Server

7、制定一类pillar执行远程命令
salt -I 'Zabbix-version:2.3.4' test.ping

 

六、远程执行 Targeting(匹配想要管理的对象的)

和Minion ID相关:
Globbing(通配符)
Regex(正则表达式) -E
List(列表) -L

和Minion ID无关:
Subnet/IP -S
Grains -G
Pillar -I
Compound matchers(复合匹配) -C (例:salt -C 'saltstack.minion01* or I@post:10050' test.ping -------I为pillar匹配符,不同的匹配方式匹配符不同)
Node groups(节点组) -N

匹配ID默认是FQTN(主机名),如果需要修改minion端vim /etc/salt/minion中的id:加上对应的ID即可。

1、在sls文件中使用正则表达式(top.sls为例)
base:
'saltstack.minion(01|02).com':
- match: pcre --------------让sls文件中匹配的主机支持正则表达式的模块
- zabbix

2、在sls文件中使用Grains(top.sls为例)
base:
'os:CentOS':
- match: grain --------------让sls文件中匹配的主机支持grains的模块
- zabbix

3、节点组匹配设置
编辑master端的/etc/salt/master文件
nodegroups:
group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
group2: 'G@os:Debian and foo.domain.com'
webs: 'L@saltstack.minion01.com,saltstack.minion02.com' ----------------节点组可以自定义
把上面三行的#注释去掉

七、远程执行 Modules(模块管理)--------查看官方帮助文档docs.saltstack.com

1、salt 'saltstack.minion02.com' sys.list_modules -----------sys模块名称list_modules为查询所有模块的方法 (查询所支持的所有模块)
2、salt 'saltstack.minion02.com' sys.list_functions cmd -----------查询某一个模块所支持的功能方法
3、salt 'saltstack.minion02.com' sys.doc pkg -----------查询某一个模块的所有方法的具体帮助用法
4、salt 'saltstack.minion02.com' sys.doc pkg.install -----------查询某一个模块的一个方法的具体帮助用法
5、salt 'saltstack.minion01.com' pkg.install vsftpd -----------安装单个服务
6、salt 'saltstack.minion01.com' pkg.install pkgs='["tree","httpd"]' -----------同时安装多个服务
对网络的管理:network模块
7、salt '*' network.active_tcp -----------查看主机目前开放的TCP端口(包含所有正在运行的TCP连接信息的字典)
8、salt '*' network.mod_hostname saltstack.master.com -----------修改主机名
9、salt '*' network.hw_addr eth0 -----------获取网卡的MAC地址
10、salt '*' network.interface eth0 -----------获取网卡的所有信息
对服务的管理:service模块
11、salt '*' service.available ssh -----------检查服务是否有效(安装)
12、salt '*' service.get_all -----------查看minion所有的已安装服务
13、salt '*' service.start vsftpd -----------启动minion端的某个服务
14、salt '*' service.disable vsftpd -----------禁用minion端的某个服务
15、salt '*' service.restart vsftpd -----------重启minion端的某个服务
对状态状态的管理:state模块
16、salt '*' state.show_top ------------查看当前master的top应用对那些minion有应用
17、salt '*' state.highstate ------------将master端的top中的整个应用同步到对应的minion中
18、salt 'saltstack04.zhang.com' state.sls apache (env=base默认,可根据不同的环境改变) ------------将master端/srv/salt/apache.sls文件中的应用手动同步到对应的minion上

八、远程执行Returners
官方手册网址: https://docs.saltstack.com/en/latest/ref/returners/
return组件可以理解为saltStack 系统对执行 Minion 返回后的数据存储或者返回给其他程序,支持多种存储方式。通过return可以对stltstack的每次操作进行记录,对日志审计提供了数据源。

salt '*' sys.list_returners ---------------------查看returners支持哪些方法

1、安装好mysql服务(随便一台机器,最好是master端)
2、在master端安装MySQL-python
3、vim /etc/salt/master在最后的#return: mysql后加上:
mysql.host: '120.0.0.1'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
master_job_cache: mysql
4、重启master端的服务
5、测试return语句
salt '*' test.ping --return mysql

九、配置管理States
states是saltstack系统中的配置语言,在日常运维中需要编写大量的states文件,例如需要创建一个用户、安装一个软件包、之后管里相应的配置文件,最后确保服务正常运行。则需要编写一些states SLS文件,即状态配置文件去描述和实现相应的功能。states SLS主使用YANL语法,也可以使用python语言编写。

1、编辑master端的/etc/salt/master文件
file_roots:
base: ----------base环境,公共设置(必须)
- /srv/salt
dev: -----------一般为开发环境(非必需)
- /srv/salt/dev
test: -----------一般为测试环境(非必需)
- /srv/salt/test
prod: -----------一般为生产环境(非必需)
- /srv/salt/prod
把上面九行的#注释去掉

 

2、YAML语法规则:
规则一:缩进 YAML使用一个固定的缩进风格表示数据层级结构关系
两个空格组成,不要使用tab键
规则二:冒号Python的字典是简单的键值对,他的结果是以字典的方式
以冒号结尾和路径不需要加冒号
以冒号结尾
规则三:短横线
表示一种列表关系(字典中的列表)
短横线后加空格

案例:客户端配置DNS解析
1、mkdir /srv/salt/init
2、mkdir /srv/salt/init/files
3、cat /srv/salt/init/files/resolv.conf

4、vim /srv/salt/init/dns.sls
/etc/resolv.conf ----------标签,文件名字,目的段目录
file.managed: ---------file模块中的managed方法为管理一个模板文件,载入到各个节点并运行相应配置
- source: salt://init/files/resolv.conf ---------要传的源文件位置
- user: root ---------文件传到minion端时的用户名(非必需)
- group: root ---------文件传到minion端时的用户组(非必需)
- mode: 644 --------文件传到minion端时的权限(非必需)

5、方法一:如果没有在top.sls中没有对应环境的dns.sls文件的情况下,想执行对应环境的dns.sls文件用
salt '*' state.sls init.dns

6、方法二:vim top.sls写入:
base:
'*':
- init.dns
然后执行:salt '*' state.highstate

十、配置管理LAMP部署

1、mkdir /srv/salt/dev/lamp
2、mkdir /srv/salt/dev/lamp/files
3、拷贝对应的http配置文件http.conf和mysql的配置文件my.cnf到/srv/salt/dev/files下,并在files下建立index.php文件,并写入:
<?php
phpinfo();
?>

4、vim /srv/salt/dev/lamp/lamp.sls文件写入
lamp-pkg-install:
pkg.installed:
- pkgs:
- httpd
- php
- mariadb-server
- php-mysql
- php-gd
- gd

apache-service:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://lamp/files/httpd.conf
- user: root
- group: root
- mode: 644
service.running:
- name: httpd
- enable: True
- restart: True
- reload: True

apache-html:
file.managed:
- name: /var/www/html/index.php
- source: salt://lamp/files/index.php
- user: root
- group: root
- mode: 644

mysql-service:
file.managed:
- name: /etc/my.cnf
- source: salt://lamp/files/my.cnf
- user: root
- group: root
- mode: 644
service.running:
- name: mariadb
- enable: True

5、方法一:如果没有在top.sls中没有对应环境的dns.sls文件的情况下,想执行对应环境的dns.sls文件用
salt '*' state.sls lamp.lamp env = dev

6、方法二:vim top.sls写入:
base:
'*':
- init.dns

dev:
'*':
- lamp.lamp
然后执行:salt '*' state.highstate