背景:puppet 用ruby开发,saltstack用python语言开发的包
环境:
修改hostname和hosts文件, 关闭selinux,清空iptables
172.16.115.157 master.huangzp.com ;hostname master
172.16.115.203 agent.huangzp.com ;hostname agent
一、配置认证
1. 安装和启动Saltstack服务
master上:
yum install -y epel-release
yum install -y salt-master salt-minion
vim /etc/salt/minion //修改
master: 172.16.115.157
service salt-master start
service salt-minion start
agent上:
yum install -y epel-release
yum install -y salt-minion
vim /etc/salt/minion //修改
master: 172.16.115.157
service salt-minion start
2. 配置saltstack认证
master上:
salt-key -a agent.huangzp.com // agent机器/etc/salt/pki/minion目录下生产一个minion_master.pub文件
salt-key //查看已经签名的客户端
salt-key -a //签名指定的主机
salt-key -A //签名所有的主机
salt-key -d //删除指定主机的签名
salt-key --help //查看各命令的用法
3.salstack远程执行命令
3.1 ping测试
salt '*' test.ping //*表示所有已经签名的客户端,也可以指定某一台;test为模块名,ping为函数
3.2 查看磁盘信息
salt '*' cmd.run 'df -h' //*星号位置支持通配、正则、列表等
例如:
salt 'web*'
salt 'web[0123]'
salt -L 'web10,web11' //多个机器用分号隔开,需要加-L
salt -E 'web(10|11)' //使用正则,需加-E
支持grains //加-G
支持pillar //加-l
二、saltstack grains
grains概念
minion启动时,收集的一些系统信息,比如操作系统类型、网卡IP、内核版本、cpu架构等;
根据收集的信息可以做配置管理工作;
静态不实时信息;
支持自定义信息
salt 'agent.huangzp.com' grains.ls //列出所有grains项目名字
salt 'agent.huangzp.com' grains.items //列出所有grains项目以及值
1. 自定义编辑/etc/salt/grains //minion端添加:
role: nginx //分号后空一格
env: test
myname: silen
mydomian: silen.com
2. 重启minion服务,查看结果
service salt-minion restart
salt ‘agent.huangzp.com’ grains.item role env myname mydomian //item没有s
3. 使用-G,指定机器
salt -G mydomian:silen.com cmd.run 'w'
三、saltstack pillar
pillar概念
和grains不一样,是在master上定义;
针对minion定义的重要数据信息,如密码等,存在pillar中
可以定义变量
1. 配置自定义pillar
vim /etc/salt/master //修改配置文件,找到:
pillar_roots: //相当于key-value
base: //相当于二层key,空2格
- /srv/pillar //相当于value,空4格,,指定主目录
去掉前面的#号
2. mkdir /srv/pillar //创建目录
vim /srv/pillar/test.sls //自定义test模块,名称不能是纯数字
conf: /etc/123.conf //自定义conf位置目录
myname: silen //自定义
vim /srv/pillar/top.sls //配置总入口配置文件,固定名称,否则test.sls不生效,指定客户端和同目录先的配置文件(test.sls也可直接放置在总配置文件中)内容:
base: //固定格式开头
'agent': //作用的机器,空两格,agent是master识别出来的名字
- test //模块名称,空四格,也该目录下,为test.sls
3. /etc/init.d/salt-master restart //重启master
salt '*' saltutil.refresh_pillar //刷新pillar配置来获取新的pillar状态,不需要重启
salt '*' pillar.itme conf //查看conf
salt '*' pillar.itmes //查看所有
pillar同样可以用来作为salt的匹配对象,大写I如
salt -l 'conf:/etc/123.conf' test.ping
四、saltstack配置apache
1. master上:
vim /etc/salt/master //找到file_roots
file_roots:
base:
- /srv/salt
#去掉注释
2. mkdir /srv/salt ;cd /srv/salt
vim /srv/salt/top.sls //加入
base:
'*':
- apache
# 即在所有的客户机上执行apache模块的安装
3. vim /srv/salt/apache.sls //加入
apache-service: //显示的名称,当使用该配置文件中的pkg.installed时,名称可以被调用
pkg.installed: //模块名称.函数名
- names: //如果只有个一个服务,则直接写成-name: httpd
- httpd
- httpd-devel
service.running: //保证服务启动的函数
- name: httpd
- enable: True //开机启动
重启 /etc/init.d/salt-master restart
刷新配置文件 salt '*' saltutil.refresh_pillar
4. 执行
salt 'agent' state.highstate
五、saltstack文件和目录管理
1. vim /srv/salt/filetest.sls,关键函数 file.managed
file_test: //名称
file.managed: //模块名.函数
- name: /tmp/huanzp.com //放到对方机器的文件名字
- source: salt://test/123/1.txt //来源,salt:// == /srv/salt/
- user: root
- group: root
- mode: 644
2. vim /srv/salt/top.sls //加入
base:
'agent':
- filetest
3. 执行
mkdir -p /srv/salt/test/123
echo "test123456">/srv/salt/test/123/1.txt
salt 'agent' state.highstate // 只要是涉及配置的,都执行这个语法
4. vim /srv/salt/testdir.sls,关键函数 file.resurce
file_dir: //名称
file.recurse: //模块名.函数
- name: /tmp/testdir //放到对方机器的目录
- source: salt://test/123 //来源,salt:// == /srv/salt/
- user: root
- group: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
- clean: True //加上它之后,源删除文件或者目录也会删除
5. vim /srv/salt/top.sls //加入
base:
'agent':
- testdir
6. 执行
salt 'agent' state.highstate
六、saltstack远程执行命令
1. vim /srv/salt/cmdtest.sls,关键函数cmd.run
cmd_test:
cmd.run:
- onlyif: test -f /tmp/3.txt //onlyif表示条件,与unless相反
- names:
- touch /tmp/4.txt //没有冒号
- mkdir /tmp/dir1
- user: root //user 使用哪个用户去操作
2. vim /srv/salt/top.sls //加入
base:
'agent':
- cmdtest
3. 执行
salt 'agent' state.highstate
七、saltstack远程执行shell脚本
1. vim /srv/salt/shelltest.sls,关键函数cmd.script
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root
2. vim /srv/salt/test/1.sh
#! /bin/bash
touch /tmp/5.txt
3. vim /srv/salt/top.sls //加入
base:
'agent':
- shelltest
4. 执行
salt 'agent' state.highstate
八、saltstack管理任务计划
1. vim /srv/salt/crontest.sls,关键函数 cron.present;cron.present //删除计划任务
cron_test:
cron.present:
- name: /bin/touch /tmp/6.txt
- user: root
- minute: '*' //*需要用单引号引起来
- hour: 18
- daymonth: '*'
- dayweek: '*'
2. vim /srv/salt/top.sls //加入
base:
'agent':
- cronlltest
3. 执行
salt 'agent' state.highstate
九、saltstack几个常用的命令
cp.get_file //拷贝master上的文件到客户端
salt '*' cp.get_file salt://test/1.txt /tmp/001.txt
cp.get_dir //拷贝目录
salt '*' cp.get_dir salt://test/conf /tmp/ //自动在客户端创建conf目录
salt-run manage.up //显示存活的minion
salt '*' cmd.script salt://test/1.sh //命令行下在master上执行shell脚本