3422 发表于 2016-2-26 10:52:44

saltstack安装配置

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@   IDLE   JCPU   PCPU WHAT
    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@   IDLE   JCPU   PCPU WHAT
    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@   IDLE   JCPU   PCPU WHAT
    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@   IDLE   JCPU   PCPU WHAT
    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安装配置