SaltStack
官方文档
1.简介
作用:
批量处理
状态管理(配置管理)
事件驱动(通过事件触发操作)
管理私有云/公有云
yum仓库:
http://repo.saltstack.com
安装
1.master和minion
rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/3004/SALTSTACK-GPG-KEY.pub
curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/3004.repo | sudo tee /etc/yum.repos.d/salt.repo
2.master
yum -y install salt-master salt-api salt-master
systemctl start salt-master
3.minion
yum -y install salt-minion
vim /etc/salt/minion
master:
- 192.168.0.12
id: 192.168.0.13
systemctl start salt-minion
4.master 认证:
salt-key
salt-key -A
salt-key
配置文件:yaml 语言格式
/etc/salt/minion:
master: IP 指定 master
示例:
master:
- salt-master.haier.net
- salt.haier.net
id: name agent端的名字,默认为域名,一般为IP地址,启动后会记录在minion_id在这儿给
/etc/salt/master:
file_roots:设置编写的状态管理配置文件存放路径,可设置多个环境
master与minion的认证:
minion在第一次启动时会在/etc/salt/pki/minion/中生成一个公钥和私钥,并把公钥minion.pub发送到master的/etc/salt/pki/master/minions_pre/中并以minion的id命名
master允许后会把公钥发送到minion的/etc/salt/pki/minion/中,并把自己目录下/etc/salt/pki/master/minions_pre/相关密钥移动到/etc/salt/pki/master/minions/中
salt-key :查看密钥
-a id 允许id 支持通配符
-A 允许所有
-d id 删除
-D 删除所有
示例:
通信:
master:
端口:
4505:发送
4506:接收
zeromq:借助此工具进行通信
功能:
发布与订阅,实现并行通信
请求与接收
minion主动连接master,所以不需要提供或暴漏端口,随机端口
帮助文档:
1、查看普通模块和函数使用方法
salt 'minion' sys.doc module_name
salt ‘minion' sys.doc module_name.function_name
或者采用 -d 代替 sys.doc
2、查看state模块的使用方法
salt ‘minion’ sys.state_doc state_module_name
salt 'minion' sys.state_doc state_module_name.function_name
常用模块:
salt
Usage: salt [options] '<target>' <function> [arguments]
options:
-V
-h
-c #指定配置文件位置,默认/etc/salt
-t #超时时间默认5s
--args-stdin #读取额外的选项或参数,每个条目用换行符/分隔
-p #显示进度条
--failhard #在返回第一次 bad 时停止执行批量
--async #异步,执行命令时不需要等待返回
-v #详细信息 包括jid
例:
salt '*' cmd.run 'df -T' -v 可以输出包括jid的信息
salt-run jobs.lookup_jid jid 可以查看相关jid的输出信息
-b #BATCH, --batch=BATCH, --batch-size=BATCH 显示minion执行的数量或百分比
-d #查看文档
-l #设置输出的日志级别
--log-file #设置日志路径
--out-file #输出到指定文件
目标选项
-H #列出所有主机列表
-E #正则表达式
-L #后跟列表 用空格或逗号分隔
-G #grain数据系统
-P, --grain-pcre 使用正则匹配
-N #用预定义组匹配
-R #范围匹配
-C #复合匹配,可以使用所有匹配模式
-I, --pillar #pillar数据系统
-J, --pillar-pcre
-S 网段匹配
function: 模块.函数
test.
ping 检测master与minion通信是否正常
sys.
argspec 返回Salt执行模块中函数的参数说明。
doc 查看模块文档
list_functions 列出所有指定模块的函数
list_modules 列出所有模块
查看配置管理。。。 与上相仿
sys.list_state_modules
sys.list_state_functions
sys.state_argspec
sys.state_doc
network.
active tcp 返回所有tcp连接
arp 返回所有arp记录
connect 测试与minion是否连通
例:salt '192.168.150.62' network.connect baidu.com 80
default_route 查看默认路由
dig 查看域名解析
cmd.
run/shell
-cmd #手动指定命令
例:salt '*' cmd.run cmd='sed -e s/=/:/g'
-cwd #执行命令当前目录位置
-stdin #可以使用'stdin参数为要运行的命令指定一个标准输入字符串
-runas #指定用户
-group #指定组
-shell #指定运行shell
-python_shell #如果为False',则让python处理位置参数。设置为'True'使用shell特性,如管道或重定向。
-bg #如果"True,在后台运行命令,不等待或交付它的结果
-env #在执行之前设置的环境变量。
-timeout 超时时间
run_all #执行传递的命令并返回返回数据的字典
run_bg #在后台执行传递的命令并返回它的PID
run_stderr #执行命令并只返回标准错误
exec_code #传入两个字符串,第一个命名可执行语言,akapython2, python3, ruby, perl, lua,等等,第二个字符串包含您希望执行的代码。将返回标准输出。
例:salt '*' cmd.exec_code ruby 'puts "cheese"' args='["arg1", "arg2"]' env='{"FOO": "bar"}'
retcode #执行shell命令并返回命令的返回代码。
script #从远程位置下载脚本并在本地执行该脚本。该脚本可以位于salt主文件服务器或HTTP/FTP服务器上。(支持多种语言)
-source #要下载脚本的位置
-args #传递给脚本的命令行参数的字符串。
例:
salt '*' cmd.script salt://scripts/runme.sh
salt '*' cmd.script salt://scripts/runme.sh 'arg1 arg2 "arg 3"'
salt '*' cmd.script salt://scripts/windows_task.ps1 args=' -Input c:\tmp\infile.txt' shell='powershell'
salt '*' cmd.script salt://scripts/runme.sh stdin='one\ntwo\nthree\nfour\nfive\n'
service.
available 查看服务是否运行
例:salt '*' service.available sshd
get_all 获取所有正在运行的服务
reload/start/stop/status/restart
cron.
list_tab 查看指定用户的计划任务
例:salt '*' cron.list_tab root
rm_job 删除指定用户的计划任务
例:salt '*' cron.rm_job root /usr/local/weekly
set_job 设置指定用户的计划任务
例: salt '*' cron.set_job root '*' '*' '*' '*' 1 /usr/local/weekly
pkg.
install #安装软件包
remove #删除指定软件包
upgrade #更新软件包
version #查询软件包版本
cp. (或salt-cp)
get_file:#下载文件到客户端
例:
salt ‘*’ cp.get_file salt://vimrc /etc/vimrc
salt ‘*’ cp.get_file “salt://`grains`.`os`/vimrc” /etc/vimrc template=jinja
salt ‘*’ cp.get_file salt://vimrc /etc/vimrc gzip=5 #使用模板 #压缩:其中,1代表作小压缩,9代表最大压缩。
salt ‘*’ cp.get_file salt://vimrc /etc/vim/vimrc makedirs=True 如果目录不在,则创建目录
get_dir #从master下载整个目录
get_url #从一个URL地址下载文件,URL可以是msater上的路径(salt://),也可以是http网址。
file.
access #测试salt进程是否有对指定文件的对应访问权限
touch #如果文件不存在创建文件,相当于touch file,如果文件存在就更新访问时间或者修改时间
append #追加文字到文件的末尾
-args 具体追加内容可以放到这个键值对上
例: salt '*' file.append /etc/motd args="['cheese=spam','spam=cheese']"
chgrp #修改文件的属组。
chown #修改文件的属主和属组。
copy #从源目录拷贝文件到目标目录
-recurse 拷贝目录
-remove_existing 提前移除目标目录中的所有文件,然后再从源路径拷贝文件到目标
find
grep
mkdir
sed
move #移动一个文件或目录。
remove #删除文件。注意:该模块一次只能接受一个参数。
stats #返回包含指定文件状态的词典。
status.
cpuinfo
netstats
uptime
vmstats
state.
apply #应用在TOP中配置的所有状态
2.salt-ssh
需要先安装salt-ssh模块:
yum -y install salt-ssh
记录IP地址的名册:
/etc/salt/roster
远程执行:
第一次使用需要加-i 标识默认为yes
-r标识直接使用shell命令
salt-ssh '*' test.ping -i
salt-ssh '*' -r "uptime"
.
3.状态/配置管理文件:
配置路径 /etc/salt/master:
file_roots:设置编写的状态管理配置文件存放路径,可设置多个环境
默认路径为 /srv/salt/base
例:
vim /srv/salt/base/web/name.sls
远程执行:
salt 'name' state.sls web.apache #调用state远程执行模块的sls方法 读取默认路径下web目录下的apache.sls 文件
注:默认环境为base,如果要换到其他环境需要在后面加上这个方法的参数 saltenv=环境名字
定义每台服务器分别的状态:一般默认都是base环境
vim /srv/salt/base/top.sls
示例:表示 所有机器都执行web/apache.sls这个状态文件
vim /srv/salt/base/top.sls
base:
'*':
- web.apache
远程执行:(命令行中的*表示通知所有 top.sls中的*表示实际需要操作的机器有哪些)
salt '*' state.highstate
test=True 末尾加上此参数表示干跑一趟,并不实际执行
4.salt的数据系统
Grains(明文):负责采集salt-minion启动时的一些基本信息 ,明文,在minion设置
grains.items 查询所有信息
grains.get 参数 查询单个信息
例: salt '*' grains.get saltversion
用grains 来匹配minion:
salt -G 'os:CentOS' cmd.run 'ip a' 通过grains匹配到所有centos系统上执行命令
在top.sls 中匹配
base
'os:CentOS':
-match: grain
-web.apache
模板匹配:
自定义grains:
需要重启salt-minion生效 或执行 salt '*' saltutil.sync_grains 生效
vim /etc/salt/grains
test-grains: linux-nod2
Pillar(可加密),在master上设置
vim /etc/salt/master
minion_pillar_cache: False 设置内置采集是否开启
pillar_roots: 设置路径
例:(不需要重启)
vim /srv/pillar/base/apache.sls
设置谁能执行(必须有)
vim/srv/pillar/base/top.sls
base
'*':
-apache
执行 :
salt '*' pillar.items
pillar在状态文件里怎样引用
grains 与 pillar的对比
5.返回:salt支持salt-minion数据信息直接写入mysql等数据存储中,需在minion上安装对应插件和配置文件中指定存储位置和授权
需要末尾追加--return
例:salt '*' cmd.run 'df -hT' --return mysql
如要把所有缓存数据都写了mysql中:(这种不需要末尾加--return mysql)
minion的cache默认保存1天
6.配置管理几种写法
注意:配置管理文件中,每个id下的相同的模块只能用一次
示例:
多个id:
单个id
管理多个文件时,也可以不用声明name,可以把id作为name
微服务架构:
JSF:京东
Spring Cloud: 开源