191145692 发表于 2018-7-31 13:49:05

saltstack-10897714

  saltstack 安装
  两台机器
  192.168.1.122 192.168.1.124
  设置hostname以及hosts
  192.168.1.122 web1.bbs.com
  192.168.1.124 web2.bbs.com
  关闭selinux,清空iptables规则
  122上
  yum install -y epel-release
  yum install -y salt-master salt-minion
  124上
  yum install -y epel-release
  yum install -y salt-minion
  启动服务
  122上 vim /etc/salt/minion
  master:192.168.1.122
  启动服务
  service salt-master start
  service salt-minion start
  124上
  vim /etc/salt/minion
  master: 192.168.1.122
  启动服务
  service salt-minion start
  查看进程
  ps aux |grep salt
  配置认证
  一下操作都是在122上
  salt-key -a web2.bbs.com
  此时在client的/etc/salt/pki/minion命令下面会多出一个minion—_master.pub文件
  可以使用salt-key命令查看到已经签名的客户端
  salt-key可以使用-A签名所有主机,也可以使用-d删除制定主机的key
  远程执行命令
  示例1 salt '*' test.ping 这里的*表示所有已经签名的客户端,也可以制定其中一个 比如web2.bbs.com
  示例2 salt '*' cmd.run 'df -h'
  说明这里的*是在master上已经被接受过的客户端,可以通过salt-key查到,通常是已经设定的id值,关于这部分内容,它支持通配,列表以及正则。比如两台可以端web2 web3 ,那么可以写成salt ’web*' salt 'web1' sakt -L 'web2,web3' salt -E 'web(10|11)等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项> . 他还支持grains,加-G选项,pillar-l选项,下面会介绍到
  # salt '*' test.ping
  web2.bbs.com:
  True
  web1.bbs.com:
  True
  # salt '*' cmd.run 'df -h'
  web1.bbs.com:
  Filesystem      SizeUsed Avail Use% Mounted on
  /dev/sda3      18G2.5G   15G15% /
  tmpfs         491M   16K491M   1% /dev/shm
  /dev/sda1       190M   27M154M15% /boot
  web2.bbs.com:
  Filesystem      SizeUsed Avail Use% Mounted on
  /dev/sda3      18G1.2G   16G   8% /
  tmpfs         238M   12K238M   1% /dev/shm
  /dev/sda1       190M   27M154M15% /boot
  # salt '*' cmd.run 'hostname'
  web2.bbs.com:
  web2.bbs.com
  web1.bbs.com:
  web1.bbs.com
  # salt '*' cmd.run 'w'
  web1.bbs.com:
  11:17:25 up2:20,1 user,load average: 0.21, 0.13, 0.09

  USER   TTY      FROM            LOGIN@>  root   pts/0    192.168.1.104    16:58    1.00s1.59s0.75s /usr/bin/python
  web2.bbs.com:
  11:17:25 up2:20,1 user,load average: 0.48, 0.51, 0.46

  USER   TTY      FROM            LOGIN@>  root   pts/0    192.168.1.104    08Jan16 16:34   0.32s0.32s -bas
  单个执行命令
  # salt 'web2.bbs.com' cmd.run 'w'
  web2.bbs.com:
  11:18:34 up2:21,1 user,load average: 0.52, 0.51, 0.46

  USER   TTY      FROM            LOGIN@>  root   pts/0    192.168.1.104    08Jan16 17:43   0.32s0.32s -bas
  正则
  salt -E 'web(1|2).bbs.com' cmd.run 'w'
  列表
  salt -L 'web1.bbs.com,web2.bbs.com' cmd.run 'w'
  grains
  grains是在minion启动时收集到的一些信息,比如操作系统类型,网卡ip,内核版本,CPU架构等。
  salt 'web2.bbs.com' grains.ls 列出所有的grains项目名字
  salt 'web2.bbs.com' grains.items 列出所有grains项目以及值
  grains的信息并不是动态的,并不会实时变更,他只是在minion启动时收集到的 不能变化
  可以根据grains收集到的一些信息,做配置管理工作
  grains支持自定义信息
  自定义grains
  124上
  vim /etc/salt/grains 添加
  role: nginx
  env:test
  重启minion服务
  service salt-minion restart
  122上
  获取grains:
  salt '*' grains.item role env
  可以借助grains的一些属性信息来执行
  salt -G role:nginx cmd.run 'hostname'
  pillar
  pillar和grains不一样,实在master上定义的,并且针对minion定义的一些信息,像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等
  配置自定义pillar
  vim /etc/salt/mster
  找到如下配置
  pillar_roots:
  base:
  - /srv/pillar
  去掉前面的警号
  mkdir /srv/pillar
  vim /srv/pillar/test.sls
  conf: /etc/123.conf
  vim /srv/pillar/top.sls 作为总入口配置文件 不定义它test.sls不生效
  base:
  'web2.bbs.com':
  - test
  重启master
  /etc/init.d/salt-master restart
  salt 'web2.bbs.com' pillar.items
  salt '*' pillar.item conf
  当更改玩pillar配置文件后,可以通过刷新pillar配置来获取新的pillar状态:
  salt '*' saltutil.refresh_pillar
  验证: salt '*' pillar.items test
  pillar 同样可以用来作为salt的匹配对象 比如salt -l 'conf:/etc/123.conf test.ping
  在添加模块
  在 cd pillar/
  vim aaa.sls
  system: Centos
  vim top.sls
  base:
  'web2.bbs.com':
  - test
  - aaa
  salt '*' saltutil.refresh_pillar
  # salt -I system:Centos cmd.run 'w'
  web2.bbs.com:
  13:36:51 up4:39,1 user,load average: 0.60, 0.52, 0.46

  USER   TTY      FROM            LOGIN@>  root   pts/0    192.168.1.104    08Jan16 18:22   0.35s0.35s -bash
  配置管理安装Apache
  122上 vim /etc/salt/master 找到file_roots
  打开如下内容的注释
  file_roots:
  base:
  - /srv/salt
  mkdir /srv/salt ; cd /srv/salt
  vim /srv/salt/top.sls 加入以下内容
  base:
  '*':
  - apache
  意思是。在所有的客户端上执行Apache模块
  重启/etc/init.d/salt-master restart
  vim apache.sls
  apache-service:
  pkg.installed:
  - names:这里如果只有一个服务,那么就可以写成 -name:httpd 不用在换行了
  - httpd
  - httpd-devel
  service.running:
  - name: httpd
  - enables: True
  说明 Apache-service是id的名字 自定义的 pkg.installed为包安装函数,下面是要安装的包的名字 service.running也是一个函数,来保证制定的服务启动 ,enable开机启动
  执行salt 'web2.bbs.com' state.highstate
  管理管理文件
  /srv/salt
  vim filetest.sls
  file_test:
  file.managed:
  - name: /tmp/12.conf
  - source: salt://test/123/1.txt
  - user: root
  - group: root
  - mode: 644
  说明:第一行的file_test为自定义名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的test相当于是/srv/salt/test
  salt://==/srv/salt
  /srv/salt
  # mkdir test
  # mkdir test/123
  vim test/123/1.txt
  执行salt 'web2.bbs.com' state.highstate
  管理目录
  # vim dirtest.sls
  file_dir:
  file.recurse:
  - name: /tmp/testdir
  - source: salt://test/123
  - user: root
  - file_mode: 644
  - dir_mode: 755
  - mkdir: True
  - clean: True
  # touch test/123/111111.txt
  # salt 'web2.bbs.com' state.highstate
  配置管理远程命令
  cmd_test:
  cmd.run:
  - onlyif: test -f /tmp/111.txt
  - name:
  - touch /tmp/111.txt
  - mkdir /tmp/1233
  - user: root
  配置管理远程脚本
  vim shelltest.sls
  shell_test:
  cmd.script:
  - source: salt://test/1.sh
  - user: root
  vim /srv/salt/test/1.sh
  #!/bin/bash
  touch /tmp/111111.txt
  if [ -d /tmp/123333 ]
  then
  rm -rf /tmp/123333
  fi
  # vim top.sls
  base:
  'web2.bbs.com':
  - shelltest
  salt 'web2.bbs.com' state.highstate
  配置管理任务计划
  cron.absent:表示删除
  cron_test:
  cron.present:
  - name: /bin/touch /tmp/1.ttt
  - user: root
  - minute: '*'
  - hour: 20
  - daymonth: '*'
  - month: '*'
  - dayweek: '*'
  vim top.sls
  base:
  'web2.bbs.com':
  - shelltest
  - crontest
  salt 'web2.bbs.com' state.highstate
  可能会用到的命令
  cp.get_file 拷贝master上的文件到客户端
  # salt 'web2.bbs.com' cp.get_file salt://apache.sls /tmp/apeda
  web2.bbs.com:
  /tmp/apeda
  cp.get_dir拷贝目录
  salt '*' cp.get_dir salt://test/conf /tmp/ 会自动在客户端创建conf目录,所以后面不要加conf, 如果写成/tmp/conf/则会在/tmp/conf/目录下又创建conf
  # salt 'web2.bbs.com' cp.get_dir salt://test /tmp/
  web2.bbs.com:
  - /tmp//test/1.sh
  - /tmp//test/123/1.txt
  - /tmp//test/123/111111.txt
  salt-run manage.up 显示存活的minion
  salt '*' cmd.script salt://test/1.sh 命令下执行master上的shell脚本
页: [1]
查看完整版本: saltstack-10897714