[salt 安装和查看版本]
安装 省略
查看版本: salt --versions-report
【salt的目录结构】
环境是有默认的,不过可以更改配置/etc/salt/master文件中file_roots
file_roots:
base:
- /data1/salt/base/
db:
- /data1/salt/db/
dev:
- /data1/salt/dev/
prod:
- /data1/salt/prod/
【先掌握saltstack的SLS文件命名空间问题】
遵照以下规则:
sls是扩展名
.sls是被省略的(如 zabbix.sls使用的时候 为 zabbix)
存在包的时候 如:执行包1/xxx.sls ,用包1.xxx的方式表示
如果包目录创建一个init.sls的文件,引用的时候仅指定该目录即可 (例如 包1/init.sls 可以简称为 包1)
如果一个目录下同时存在包1.sls 和 包1/init.sls,那么包1/init.sls 将被忽略,SLS文件引用的包1将只引用包1.sls
【从以下三个执行方式就可以理解以上说的了】
salt "dev-mysql001" state.highstate -v test=true
highstate意思就是从base环境(默认是执行base环境)目录下的top.sls开始执行
所以你的top.sls就可能写成以下这个样子
base:
'*':
- init # the system init
- users # add users three user one pubkey
- sudoer # config sudoer
- yum # repos config file
- hosts # sync host and resolve
- ssh # ssh-client,ssh-server config
- ntpd # service ntpd
- syslog # log server config
- monitor # zabbix,salt-minion config
- vim # vim,vimconfig vimcolor
salt 'dev-mysql001' state.sls monitor -v test=true
state.sls的意思是执行指定的一个.sls文件。 monitor更具sls命名规则的第4条规则,执行包1下面的init.sls
可能monitor包下面的sls文件就这样写的了
# cat monitor/init.sls
include:
- .zabbix
# cat monitor/zabbix.sls
zabbix-agent:
pkg:
- installed
- names:
- zabbix-agent
salt "dev-mysql001" state.sls saltenv='prod' nginx.stock
指定的是prod环境,而不是默认的base环境
【关于其他的嘛,知道一下几点就可以了】
1 懂得如何-v test=true 去验证 (cmd.rum 执行命令这个是没用的哦记住哦,别犯傻)
2 salt "dev-mysql001" cmd.run "you command"
注意"you command " 和 'you command' 的区别,双引号中可以使用变量如
for i in dev-app001.novalocal; do salt "$i" cmd.run "hostname `echo $i| sed 's#\.novalocal##g'` " ;done
3 slat "dev-mysql001" test.ping
4 知道如何tail -f /var/log/salt/minion 查看(master执行的会在minion中生成日志)
5 知道如何调整minion配置文件中log_level = debug这个调整在排查的时候很有作用(默认是#log_level: warning)
6 观察执行结果中的绿色 ××× 红色代表啥意思~~·
×××是即将要更改的(test=true模式中)
蓝色是更改了的
绿色为更改
红色更改失败
7 获取静态minion端的静态变量
salt "dev-mysql001" grains.items salt "dev-mysql001" grains.ls salt "mysql001" grains.item fqdn
【关于如何写.sls文件,如果理解一上的,百度百度就知道如何写了】
【关于自带的模块】
1 拷贝文件
salt "shnh-db001*" cp.get_file salt://monitor/file/db.conf /data1/env/zabbix30/etc/zabbix_agentd.d/db.conf
salt:// 对应的根目录是 master 配置文件中的 file_roots 的 base 项。
问题:
1 权限不能同步,不如x权限不能同步的想cp -p一样保持。
解决方法:cmd.run 'chmod +x xxx.file'
2 只能是相对salt目录
【自定义grains的方法】
可以在minion端写,并且重启salt-minion
在master端写.py脚本,然后同步到指定的或者所有的minion端
方法1:
参考:http://blog.csdn.net/hnhuangyiyang/article/details/50410709
步骤
在minion.d下创建test.conf文件定义grains
grains: #这是一个标签
idc:
- hhe
- nice
user: cuizhiliang
重启/etc/init.d/salt-minion restart
minion端获取验证:
[root@dev-vhost012 minion.d]# salt-call -l error grains.item idc
local:
----------
idc:
- hhe
- nice
注意: 删除这个静态变量,删除文件重启salt-minion即可。
方法二(不需要重启minion客户端)
在master端书写.py文件,然后同步到指定的minion端jike
参考:http://blog.csdn.net/hnhuangyiyang/article/details/50410709
在file_roots目录下(默认是/srv/salt/),如果更改就是base目录的那个file_roots下面。
1. 在此目录下创建_grains目录(/data1/salt/base/_grains),在建立你的py文件,且py文件中返回值要是一个字典形式,且脚本一定要有执行权限。
2. 写wlink.py文件
[root@dev-mon001 _grains]# cat wlink.py
def wlink():
wlink={}
wlink['wlink']='yes'
return wlink
3.增加可执行权限
chmod +x wlink.py
4 同步到指定的minion
[root@dev-xxx001 _grains]# salt "localhost.localdomain.a.pa.com" saltutil.sync_grains
localhost.localdomain.a.pa.com:
- grains.wlink
5 验证获取
[root@dev-xxx001 _grains]# salt "localhost.localdomain.a.pa.com" grains.item wlink
localhost.localdomain.a.pa.com:
----------
wlink:
yes
注:删除这个grains,删出文件,在同一一次即可。
【pillar】
1 master 端定义
2 master配置文件中找到pillar_roots (默认/srv/pillar)
3 确定pillar_opts: True 这个参数,表示master配置文件都将当做pillar的key/value
4 pillar如何定义,如何使用
像写sls文见一样
如:
[root@dev-vhost012 pillar]# cat top.sls
base:
"*":
- data
- users
[root@dev-vhost012 pillar]# cat users/init.sls
users:
user1: 4000
user2: 4001
user3: 4002
user4: 4004
user5: 4005
pillar写完后,是不需要重启master的。
验证:
salt "*" pillar.items
立刻同步到minion当中,(也可以不做,如果未生效可以使用一下 刷新pillar)
salt ‘*’ saltutil.refresh_pillar
salt shzr* saltutil.refresh_pillar
5 用途:
1 salt -I "key/value" 过滤出对已的客户端 (不常用)
2 使用咋模板当中(常用)
如:
[root@dev-vhost012 base]# pwd
/data1/salt/base
[root@dev-vhost012 base]# cat top.sls
base:
"*":
- users
[root@dev-vhost012 base]# cat users/init.sls
{% for user, uid in pillar.get('users',{}).items() %}
`user`:
user.present:
- uid: `uid`
{% endfor %}
【pillar中查看nodegroups】
查看nodegroups的方法
1 cat /etc/salt/master 文件或者 cat /etc/salt/master.d/ 配置文件
2 pillar.items查看
salt "dev-db001.a.pa.com" pillar.items |grep -A10 nodegroups
salt "dev-db001.a.pa.com" pillar.item master
[salt的job 相关遇见]
master端显示正在运行的job
salt-run jobs.active
结束指定的jobs
salt '*' saltutil.term_job 20141230094047407913
salt "10.20.101.97" saltutil.kill_job 20160728144218830252
slave端可以查看正在cache的job
/var/cache/salt/minion/proc/20160728144218830252
[salt-run命令]
一般在master端进行执行
salt-run [options] [runner.func]
salt-run manage.status ##查看所有minion状态
salt-run manage.down ##查看所有没在线minion
salt-run manged.up ##查看所有在线minion
########################### salt 报错解决 ##########################
salt 报错解决:
If you are confident that you are connecting to a valid Salt Master, then remove the master public key and restart the Salt Minion.
The master public key can be found at:
/etc/salt/pki/minion/minion_master.pub
解决:
master 端删除key
salt -d app001.a.pa.com -y
client 端 删除salt-master的key缓存
rm /etc/salt/pki/minion/minion_master.pub
重启salt-minion
/etc/init.d/salt-minion restart
master端 接收
salt-key -a app001.a.pa.com -y
clinet 这个而被重新生成
/etc/salt/pki/minion/minion_master.pub