zxcvb12 发表于 2018-7-31 12:50:10

saltstack知道这些就很好用了

  
  
  安装 省略
  查看版本: 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.slssaltenv='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:   #这是一个标签

  >  - hhe
  - nice
  user: cuizhiliang
  重启/etc/init.d/salt-minion restart
  minion端获取验证:

  # salt-call -l error grains.item>  local:
  ----------

  >  - 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文件
  # cat wlink.py
def wlink():  
    wlink={}
  
    wlink['wlink']='yes'
  
    return wlink
  3.增加可执行权限
  chmod +x wlink.py
  4 同步到指定的minion
  # salt"localhost.localdomain.a.pa.com"saltutil.sync_grains
  localhost.localdomain.a.pa.com:
  - grains.wlink
  5 验证获取
  # 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文见一样
  如:
  # cat top.sls
  base:
  "*":
  - data
  - users
  # 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 使用咋模板当中(常用)
  如:
  # pwd
  /data1/salt/base
  # cat top.sls
  base:
  "*":
  - users
  # 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
  
  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
  
  一般在master端进行执行
  salt-run
  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
页: [1]
查看完整版本: saltstack知道这些就很好用了