saltsatck02入门
1.使salt可以使用配置文件进行配置
配置文件的位置的配置在/etc/salt/master中的file_roots字段,将base的注释打开,重启salt-master生效
# file_roots: # base: # - /srv/salt/ # dev: # - /srv/salt/dev/services # - /srv/salt/dev/states # prod: # - /srv/salt/prod/services # - /srv/salt/prod/states # file_roots: base: - /srv/salt
2.编写状态配置文件
可以使用: set list查看空白符,因为配置文件是使用缩进来表示层级的,对缩进严格
其中apache-install是ID,pkg.installd
apache-install: pkg.installd: - names: - httpd - httpd-devel apacher-service: service.running: - name: httpd - enable: True - reload: True
执行配置文件
其中state.sls是状态模块的sls方法,执行apache这个配置文件,其中apache后不跟“.sls”
salt '*' state.sls apache
使用top文件,state模块的高状态,从top文件里去读需要执行的配置,其中top.sls需要放在base的配置文件目录下,即/srv/salt下
vim /srv/salt/top.sls base: '10.12.20.*': - apache
执行
salt '*' state.highstate
所有机器都需要执行的放在base环境下,如zabbix的agent,安全软件的agent等。可以有多个环境应对各种配置文件
3.Grains(静态数据)
Grains是在minions端配置的
Grains的作用:
1)收集minions的信息
2)在远程执行里面匹配minions
3)在top file里匹配minions
3.1收集信息
Grains里是minions启动时收集的minions信息。是存放在minions端的,每次minions重启时收集一次配置,是静态数据。#查看grains的指标
salt '*.14' grains.ls #查看grains所有的指标及指标的具体内容 salt '*.14' grains.items #查看单个指标数据,如 num_cpus salt '*.14' grains.item num_cpus #10.12.20.14: # ---------- # num_cpus: # 48 #或者直接获得指标值 salt '*.14' grains.get num_cpus #10.12.20.14: # 48
#查看多层级(字典)的数据
salt '*.14' grains.get ip_interfaces:docker0
3.2在远程执行里匹配minions
#匹配系统为Centos的服务器执行ls,-G代表使用grains进行匹配 salt -G os:Centos cmd.run "ls"
可以在minions端配置自定义的grains参数,编辑minions的配置文件
vim /etc/salt/minion.d/grains.conf grains: roles: - webserver - memcache
添加grains参数后需要重启minions才可以生效
systemctl restart salt-minion
在master执行下面命令,可以获取到数据
salt -G roles:webserver cmd.run "ls"
除了在minions的配置文件/etc/salt/minion.d/grains.conf,也可以在minions的/etc/salt/grains文件中进行配置,重启后生效。
vim /etc/salt/grains
app: nginx
其中key app不能与其他配置文件如/etc/salt/minion.d/grains.conf的key冲突,否则不生效。
3.3在top file中匹配minions
匹配grain中的app:web 执行apache
vim /srv/salt/top.sls base: 'app:web': - match: grain - appache
执行top file
salt '*' state.highstate
4.Pillar(动态数据)
在master端配置,不用重启master。
pillar需要在master配置文件中进行模块的启用及配置文件位置的指定,其中pillar_opts为一些系统的变量,这个可以关闭,只使用自定义的
vim /etc/salt/master.d/pillar.conf
pillar_opts: False
pillar_roots:
base:
- /srv/pillar
编写pillar配置文件
/srv/pillar/apache.sls {% if grains['os'] == 'CentOS' %} apache:httpd {% elif grains['os'] == 'debian'%} apache:apache2 {% endif %}
编写top file
vim /srv/pillar/top.sls base: '*': - apache
pillar修改配置后只有在master上是自动刷新的,如果要用于其他minions需要手动刷新pillar配置
salt '*' saltutil.refresh_pillar
使用-I来指定pillar中的参数可以选择minions。
salt -I 'apache:httpd' test.ping
grains和pillar的区别
5.远程执行
远程执行主要包括三个方面:
目标
模块
返回
5.1目标
https://docs.saltproject.io/en/latest/topics/targeting/globbing.html
5.1.1 基于minion id做匹配
默认id是fqdn名即主机名,但是可以自己随意设置
基于minion id做匹配支持通配符。如果要给minion改id的话不能直接改,需要先把master中的secret key通过salt-key -d '10.12.20.14'删掉,再重新加入
salt '10.12.20.14' cmd.run 'ls'
#通配符
salt '10.12.20.*' cmd.run 'ls'
#除了*其他的正则匹配,前面都应该加上参数-E
salt -E '10.12.20.?' cmd.run 'ls'
salt -E '10.12.20.[13-14]' cmd.run 'ls'
salt -E '10.12.20.(13|15)' test.ping
在top文件里使用正则匹配,其中match: pcre代表指定正则匹配
base: '10.12.20.(13|14)': - match: pcre - webserver
5.1.2list 使用“-L”,后加多个主机列表
salt -L 'web1,web2,web3' test.ping
5.1.3grains 使用-G进行匹配
salt -G 'os:CentOS' test.version
5.1.4pillar 使用-I进行匹配
salt -I 'apache:httpd' test.ping
5.1.5指定IP 使用-S进行匹配
id为host非ip 可以通过-S来指定服务器IP
salt -S '10.12.20.14'
还可以指定ip子网段
salt -S "10.12.20.0/24" test.ping
5.1.5混合多种匹配方式使用 使用-C进行匹配 支持与或非,and or not可以组合使用
salt -C 'S@10.12.20.0/24 and G@roles:webserver' test.ping salt -C 'S@10.12.20.13 or G@roles:webserver' test.ping salt -C 'S@10.12.20.0/24 not G@roles:webserver' test.ping
各匹配方法使用的参数
Letter |
Match Type |
Example | |
---|---|---|---|
G |
Grains glob |
|
Yes |
E |
PCRE Minion ID |
|
No |
P |
Grains PCRE |
|
Yes |
L |
List of minions |
|
No |
I |
Pillar glob |
|
Yes |
J |
Pillar PCRE |
|
Yes |
S |
Subnet/IP address |
|
No |
R |
Range cluster |
|
No |
N |
Nodegroups |
|
No |
5.1.6 节点组(慢)
在master的配置文件中进行组的配置
vim /etc/salt/master.d/nodegroups.conf nodegroups: group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com' group2: 'G@os:CentOS' group3: 'G@os:CentOS and N@group1' group4: - 'G@foo:bar' - 'or' - 'G@foo:baz'
节点组使用-N进行匹配
salt -N 'group2' test.ping
5.2模块
https://docs.saltproject.io/en/latest/ref/modules/all/index.html#all-salt-modules
5.2.1systemd_service
(linux)
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.systemd_service.html#module-salt.modules.systemd_service
# 判断某服务是否在运行 salt '*' service.available sshd # 判断某服务是否没在运行(与available相反) salt '*' service.missing sshd #获取14服务器在运行的所有服务 salt '*14' service.get_all #服务重载 salt '*' service.reload nginx #查看服务状态 salt '*' service.status nginx #停止服务 salt '*' service.stop nginx #重启服务 salt '*' service.restart nginx
5.2.2network
https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.network.html#module-salt.modules.network
#返回所有的活动的tcp链接 salt '*' network.active_tcp #返回arp salt '*14' network.arp #检查服务器对某个地址的链接状态(能否链接) salt '*' network.connect baidu.com 80 timeout=3 #做域名查询 salt '*' network.dig baidu.com #获取hostname salt '*' network.get_hostname #获取interface salt '*' network.interface eth0
5.3返回
https://docs.saltproject.io/en/latest/ref/returners/all/index.html#all-salt-returners
默认将执行结果返回到master console
5.3.1 返回给mysql
https://docs.saltproject.io/en/latest/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql
yum安装MySQL-python包,返回程序是minions返回的,这样比minions先返回给master再写到数据库要快且对master的压力小,所以每个minion都需要安装MySQL-python包,由于3006版本的salt是自动安装的python3,python3不支持python-mysqldb,使用salt pip进行安装PyMySQL,每个master及minions节点都要安装
salt-pip install PyMySQL
在每台minions需要添加配置文件
vim /etc/salt/minion.d/mysql.conf mysql.host: 'xxxx' mysql.user: 'salt' mysql.pass: 'xxxx' mysql.db: 'salt' mysql.port: 30145
重启minions生效
systemctl restart salt-minion.service
在数据库中创建用户,库还有表
#创建库 CREATE DATABASE `salt` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; #创建用户 create user salt@'%' identified by 'xxxxx'; #授权用户 GRANT ALL ON salt.* TO 'salt'@'%'; #切换库 USE `salt`; #创建jids表 CREATE TABLE `jids` ( `jid` varchar(255) NOT NULL, `load` mediumtext NOT NULL, UNIQUE KEY `jid` (`jid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; #创建salt_returns表 CREATE TABLE `salt_returns` ( `fun` varchar(50) NOT NULL, `jid` varchar(255) NOT NULL, `return` mediumtext NOT NULL, `id` varchar(255) NOT NULL, `success` varchar(10) NOT NULL, `full_ret` mediumtext NOT NULL, `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, KEY `id` (`id`), KEY `jid` (`jid`), KEY `fun` (`fun`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; #创建salt_events表 CREATE TABLE `salt_events` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `tag` varchar(255) NOT NULL, `data` mediumtext NOT NULL, `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `master_id` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `tag` (`tag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在master执行salt命令
salt '*14' test.ping --return mysql
在master配置文件中添加返回到mysql,然后重启master,执行salt命令时就不用加 --return mysql
#修改配置文件 vim /etc/salt/master.d/mysql.conf return: mysql #重启master systemctl restart salt-master.service
此时在master直接执行如下命令,就可以实现将返回写入到mysql数据库
salt '*14' test.ping
如果不在minion上安装python包及配置mysql配置,则可以通过master的返回缓存往mysql里面写返回数据,配置master配置文件,首先先把上一步中的 return: mysql注释掉,添加master_job_cache: mysql及数据库信息,然后重启master。
vim /etc/salt/master.d/mysql.conf #return: mysql #返回缓存写入到数据库 master_job_cache: mysql #数据库信息 mysql.host: 'xxxx' mysql.user: 'salt' mysql.pass: 'xxxx' mysql.db: 'salt' mysql.port: 30145 #重启master systemctl restart salt-master.service
在master执行salt命令,测试是否写入到数据库
salt '*' cmd.run 'free -m'
job_cache的文档https://docs.saltproject.io/en/latest/topics/jobs/job_cache.html,默认路径在/var/cache/salt/master/jobs/,可以转存储在下列外部系统中:
6.二次开发
在master上添加Grains,且同步给minion。注意:只能从master同步给minion,而不能从master通过syndic同步给minion。
在master的file_roots目录下建_grains,在_grains目录下写grains的py文件,用return返回就可以拉
vim my_grains.py def my_grains(): ''' My Custom Grains ''' grains = { 'hehe1': 'haha1', 'hehe2': 'haha2' } return grains
然后在master主机执行同步grains命令
salt '*14' saltutil.sync_grains
此时在minion主机的/var/cache/salt/minion/extmods/grains/下可以看到master中同步过来的my_grains.py文件。
在master执行下面命令可以得到对应的grains值。
salt '*14' grains.item hehe1
salt-cp复制文件
salt-cp '*14' a.log /tmp/a.log
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?