您的位置:首页 > 其它

saltstack安装配置

2016-07-04 17:55 155 查看
基于python开发,C/S架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现几乎所有puppet功能。
比puppet出来晚几年,基于python开发,如果你仔细对比会发现saltstack和puppet很像,随着saltstack的使用量越来越多,它的发展也是越来越迅猛,可以说saltstatck可以实现puppet的所有功能,它比puppet容易配置。

三种工作方式: 本地, c/s, 基于ssh(不用安装agent)
三大功能: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理
支持系统:大多数都支持,windows上不支持安装master
1. saltstack安装
前期准备:
准备两台机器,写hostname
10.10.13.239 master.river.com
10.10.13.248 client.river.com

server上:
yum install -y epel-release
yum install -y salt-master salt-minion

client上:
yum install -y epel-release
yum install -y salt-minion

server上和client上:
vim /etc/salt/minion #指定server的ip
大概是16行,修改或增加
master: 10.10.13.239
说明,这个id虽然不定义也没有关系,如果不定义,那么master会以客户端的hostname来显示,一定定义了就按id定义的名字来显示了,这个id可以不和hostname一致,但定义了id后,也应该在/etc/hosts里面定义记录

启动
server上:
/etc/init.d/salt-master start
/etc/init.d/salt-minion start
client上:
/etc/init.d/salt-minion start
2. 认证
server上:
salt-key -a client.river.com

此时我们在client的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件

可以使用 salt-key 命令查看到已经签名的客户端呈绿色字体高亮显示

salt-key 可以使用-A签名所有主机,也可以使用-d删除指定主机的key,使用salt-key --help查看其他命令

3. 远程执行
示例1: salt '*' test.ping 这里的*表示所以已经签名的客户端,也可以指定其中一个
示例2: salt '*' cmd.run 'df -h'

说明1:salt命令由两部分主成,前面模块,后面函数,比如 cmd为模块,run为函数
说明2: 这里的*必须是在master上已经被接受过的客户端,可以通过salt-key查到,通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端 web10 web11, 那我们可以写成 salt 'web*' salt 'web1[02]' salt -L 'web10,web11' salt -E 'web(10|11) 等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持grains,加-G选项,下面会介绍到。

4. grains
grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip等。 使用命令
salt 'client.river.com' grains.ls 列出所有的grains项目名字
salt 'client.river.com' grains.items 列出所有grains项目以及值
grains的信息并不是动态的,并不会时时变更,它只是在minion启动时收集到的。
grains可以做配置管理。

自定义grains #在客户端修改
vim /etc/salt/grains
添加:
role: nginx
env: test

重启minion服务
salt ‘*’ saltutil.refresh_pillar刷新salt配置
salt '*' grains.item role env
salt 'client.river.com' grains.get role

grains其实在远程执行命令时,很方便。我们可以按照grains的一些指标来操作。比如把所有的web服务器的grains的role设置为nginx,那这样我们就可以批量对nginx的服务器进行操作了:
salt -G role:nginx cmd.run 'hostname'
salt -G os:CentOS cmd.run 'hostname'

5. pillar
pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。

查看指定minion的pillar值(我测试的版本为空):
salt 'client.river.com' pillar.items

配置自定义pillar
vim /etc/salt/master #主配置文件
找到如下配置:
pillar_roots:
base:
- /srv/pillar
去掉前面的#号,申明pillar的根目录,注意这种格式文件base前面一定要空两格,底下的值要工四格,这种格式叫yaml格式

创建根目录
mkdir /srv/pillar

定义pillar配置文件
vim /srv/pillar/test.sls
conf: /etc/123.conf

定义pillar总入口配置文件
vim /srv/pillar/top.sls
base:
'client.river.com':
- test
#注意,此处test模块不能使用数字开头,sls也不能使用数字
重启master:
/etc/init.d/salt-master restart

刷新状态:
salt ‘*’ saltutil.refresh_pillar

验证:
salt '*' pillar.item tests

pillar同样可以用来作为salt的匹配对象。比如一组system:Centos的批量执行命令,如下:
salt -I 'conf:/etc/123.conf' test.ping
salt -I 'system:Centos' cmd.run w
6、saltstack配置apache
server上:
vim /etc/salt/master #搜索找到 file_roots
打开如下内容的注释:
file_roots:
base:
- /srv/salt

#重启服务
/etc/init.d/salt-master restart

#创建目录
mkdir /srv/salt

#定义总入口sls文件:
cd /srv/salt
vim /srv/salt/top.sls #加入如下内容
base:
'*':
- apache
#意思是,在所有的客户端上执行 apache模块

#定义模块文件:
vim /srv/salt/apache.sls #加入如下内容,这个就是apache模块的内容
apache-service: #ID名
pkg.installed: #pkg模块名,installed函数,整个表示管理具体 的包
- names:
- httpd
- httpd-devel
service.running: #service模块名,running函数,表示启动服务
- name: httpd
- enable: True

说明,该模块调用了pkg.installed 函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。

执行:
salt 'client.aming.com' state.highstate
7. 文件和目录管理

#文件同步:
vim /srv/salt/filetest.sls

file_test: #ID名
file.managed: #file模块,managed函数
- name: /tmp/12345.txt #目标路径
- source: salt://test/12345.txt #这个salt://目录是指/srv/salt/所以事先在要在/srv/salt目录下创建test这个目录,并且创建12345.txt文件
- user: root
- group: root
- file_mode: 600

#在top.sls文件里引用:
vim /srv/salt/top.sls
base:
'*':
- file_test

#执行: salt 'client.aming.com' state.highstate

#目录同步:

vim /srv/salt/filetest.sls
file_dir: #ID名
file.recurse: #file模块,recurse函数
- name: /tmp/testdir #目标路径
- source: salt://test/123 #源目录
- user: root
- group: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
-clean:True #这个参数表示当目录在源服务器被删除后客户端也允许删除

#在top.sls文件里引用:vim /srv/salt/top.sls
base:
'*':
- file_dir

#执行: salt 'client.aming.com' state.highstate
8、远程执行命令

#定义sls文件
vim /srv/salt/cmdtest.sls
cmd_test:
cmd.run:
- unless: test f /tmp/111.txt #unless表示判断只有当远程文件或目录不存在时才执行,取反用onlyif表示判断远程文件或目录存在时执行
- unless: test d /tmp/1233.txt
- names:
- touch /tmp/111.txt
- mkdir /tmp/1233
- user: root
#注意空格
#在总入口sls文件引用
vim /srv/salt/top.sls
base:
'*':
- cmdtest

#执行: salt 'client.aming.com' state.highstate

9、远程执行脚本

#定义脚本sls文件
vim /srv/salt/test/shelltest
shell_test:
cmd.script:
- source: salt://test/1.sh #源脚本路径
- user: root #指的是客户端的用户

#创建脚本文件
vim /srv/salt/test/1.sh
#!/bin/bash
touch /tmp/111.txt
if [ -d /tmp/1233 ]
then
rm -rf /tmp/1233
fi

#在总入口文件引用
vim /srv/salt/top.sls
base:
'*':
- shelltest

#执行: salt 'client.aming.com' state.highstate

10、远程任务计划

#定义sls文件
vim /srv/salt/crontest.sls
cron_test:
cron.present:
- name: /bin/touch /tmp/111.txt #cron要执行的命令
- user: root
- minute: '*'
- hour: 20
- daymonth: '*'
- month: '*' #如果是具体的数字不用加引号
- dayweek: '*'

总入口文件引用
vim /srv/salt/top.sls
base:
'*':
- crontest

#执行: salt 'client.aming.com' state.highstate

注意,*需要用单引号引起来。
当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。
#如果要删除该cron:
cron.absent:
- name: /bin/touch /tmp/111.txt
11. 一些可能会用到的命令
cp.get_file 拷贝文件
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脚本
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  saltstack安装