一 Saltstack安装配置认证
Saltstack安装
1 两台机器
172.7.15.106 172.7.15.111
2 设置hostname以及hosts
172.7.15.106 web9.aming.com
172.7.15.111 web10.aming.com
3 关闭selinux,情况iptables规则
4 106上:
yum install -y epel-release
yum install -y salt-master salt-minion
5 111上:
yum install -y epel-release
yum install -y salt-minion
Saltstack启动服务
1 106上:
vim /etc/salt/minion //大概16行修改或增加
master: 172.7.15.106
2 启动服务
service salt-master start
service salt-minion start
3 111上:
vim /etc/salt/minion //大概16行增加或修改
master: 172.7.15.106
4 启动服务
service salt-minion start
Saltstack配置认证
以下操作都是在106上:
salt-key -a web10.aming.com
此时我们在client的/etc/salt/pki/minion目录下面会多出一个minion_master.pub文件
可以使用salt-key命令查看到已经签名的客户端
salt-key可以使用-A签名所有主机,也可以使用-d删除指定主机的key
Saltstack远程执行命令
示例1: salt '*' test.ping 这里的*表示已经签名的客户端,也可以指定其中一个,比如wen10.aming.com
示例2: salt '*' cmd.run 'df -h'
说明:这里的* 必须是master上已经被接受过的客户端,可以通过salt-key查到,通常是我们已经设定的id值.关于这部分内容,它支持通配,列表以及正则.比如两台客户端web10 web11 ,那我们可以写成salt 'web*' salt 'web1[01]' salt -L 'web10,web11' salt -E 'web(10|11)'等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项>.它还支持grains,加-G选项,pillar加-I选项,下面会介绍到.
二 saltstack grains
1 grains是在minion启动是收集到的一些信息,比如操作系统类型 ,网卡IP,内核版本,CPU架构等.
salt 'web10.aming.com' grains.ls 列出所有的grains项目名字
salt 'web10.aming.com' grains.items列出所有grains项目以及值
2 grains信息并不是动态的,并不会时时变更,它只是在minion启动时收集到的.
3 我们可以根据grains收集到的一些信息,做配置管理工作.
4 grains支持自定义信息.
saltstack-自定义grains
1 111上:
vim /etc/salt/grains //添加:
role: nginx
env: test
2 重启minion服务
service salt-minion restart
3 106上:
获取grains:
salt '*' grains.item role env
4 可以借助grains的一些属性信息来执行
salt -G role:nginx cmd.run 'hostname'
三 saltstack pillar
Saltstack-pillar
1 pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。
2 配置自定义pillar
vim /etc/salt/mster
找到如下配置:
pillar_roots:
base:
- /srv/pillar //yaml格式
去掉前面的井号
mkdir /srv/pillar
vim /srv/pillar/test.sls //内容如下 自定义的pillar
conf: /etc/123.conf
vim /srv/pillar/top.sls //内容如下
base:
'web10.aming.com':
- test
重启master
/etc/init.d/salt-master restart
当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:
salt '*' saltutil.refresh_pillar //刷新
验证: salt '*' pillar.item conf //salt ‘web10.aming.com' pillar.items
pillar同样可以用来作为salt的匹配对象。比如salt -I 'conf:/etc/123.conf' test.ping
四 Saltstack配置Apache
Saltstack -配置管理安装Apache
106上: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 /srv/salt/apache.sls //加入如下内容,这个就是apache模块的内容
apache-service:
pkg.installed:
- names: //这里如果只有一个服务,那么就可以写成- name: httpd不用再换一行了
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
说明,apache-service是id的名字,自定义的。pkg.installed为安装包函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。
执行:salt 'web10.aming.com' state.highstate
五 saltstack文件和目录管理
file_test:
file.managed:
- name: /tmp/aminglinux.com
- source: salt://test/123/1.txt
- user: root
- group: root
- mode: 644
说明:第一行的file_test为自定义的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的test相当于是/srv/salt/test
saltstack-配置管理目录
file_dir:
file.recurse:
- name: /tmp/testdir/
- source: salt://test/123
- user: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
- clean: True //加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除.
参考:http://www.0550go.com/automation-deployment/saltstack/saltstack-file-recurse.html
七 saltstack远程执行命令
saltstack-配置管理远程命令
cmd_test:
cmd.run:
- onlyif:test -f /tmp/aminglinux.txt
- names:
- touch /tmp/111.txt
- mkdir /tmp/1233
- user:root
还可以加unless,和onlyif正好相反
八 saltstack远程执行shell脚本
Saltstack - 配置管理远程脚本
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root //指对方机器上的用户
cat /srv/salt/test/1.sh
#! /bin/bash
touch /tmp/111.txt
if [ -d /tmp/1233 ]
then
rm -rf /tmp/1233
fi
九 saltstack管理任务计划
Saltstack - 配置管理任务计划
cron_test:
cron.present:
- name: /bin/touch /tmp/111.txt
- user: root
- minute:'*'
- hour: 20
- daymonth: '*'
- month: '*'
- dayweek: '*'
注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在。想要删除该cron,需要增加:
cron.absent
- name: /bin/touch /tmp/111.txt
两者不能共存,要想删除一个cron,那之前的present就得去掉。
十 saltstack几个常用的命令
Saltstack - 可能会用到的命令
cp.get_file 拷贝master上的文件到客户端
salt '*' cp.get_file salt://test/1.txt /tmp/123.txt
cp.get_dir 拷贝目录
salt '*' cp.get_dir salt://test/conf /tmp/ //会自动在客户端创建conf目录,所以后面不用加conf,如果写成/tmp/conf/ 则会在/tmp/conf/目录下又创建conf
salt-run manage.up 显示存活的minion
salt '*' cmd.script salt://test/1.sh 命令行下执行master上的shell脚本
转载于:https://blog.51cto.com/11906060/1838210